[开源硬件] 准备DIY个简易镊子LCR表

[复制链接]
 楼主| yjmwxwx 发表于 2021-8-10 15:45 | 显示全部楼层 |阅读模式
别的论坛有人引诱我搞LCR表,本来要做指南针的,只能先试试做这个了,正好我想练练画电路板,于是拿出去年做的电路改改,想改单锂电池供电,但是没低压差电源芯片,也没3.3V显示器和模拟开关,没办法只能搞成两块电池的了,我也没上过什么学不懂什么原理,所以我只会做不会说,说说容易做准做稳定我是没那个能力。。争取做的比去年做的强点吧,目标低成本能用就好。
目前只搞了个100KHZ的100欧档。

又要浇地了,10天前下的雨不管用啊,浇地回来休息休息再加功能。。

电路图


KICAD原理图和程序源代码



实物





视频,100KHZ测100欧、500欧、10NF电容



搞到这里可能才完成十分之二的工作量,这方案还不知道行不行。。






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
LcwSwust 发表于 2021-8-11 09:21 | 显示全部楼层
楼主要不画个PCB吧,最近打样比较便宜,听说有的厂家免费。
尽量用贴片元件,显示屏可以用OLED减小体积。
 楼主| yjmwxwx 发表于 2021-8-11 18:16 | 显示全部楼层
LcwSwust 发表于 2021-8-11 09:21
楼主要不画个PCB吧,最近打样比较便宜,听说有的厂家免费。
尽量用贴片元件,显示屏可以用OLED减小体积。 ...

我已经画过两次实际电路的PCB了,但是都在吃灰根本用不上,反而画的转接板用上了。。我这很多零件都是直插的,不可能为了免费做PCB再去买贴片零件,尽量用我有的零件搞DIY,今年已经花了300元买电子相关的东西了,以后不考虑再花钱买东西玩了,听各位网友的准备弃坑了。

评论

[url=home.php?mod=space&uid=586924]@wenleileilei[/url] :要啥没啥不能缺什么买什么,现在我这库存零件还有一些,先消耗下库存  发表于 2021-8-22 10:37
越省钱越费钱  发表于 2021-8-22 03:36
 楼主| yjmwxwx 发表于 2021-8-14 23:08 | 显示全部楼层
加自动量程功能



档位切换慢怎么办?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| yjmwxwx 发表于 2021-8-19 18:57 | 显示全部楼层
写频率切换程序失败,LCD1602第一行第一个数据是频率,1=100HZ、2=1KHZ、3=10KHZ、4=100KHZ。第二个数据是阻抗,第二行是档位。演示测1K电阻和104电容,测电阻还行,测电容失败,不知道是程序原因还是电路原因。。。









本来想搞个电路简单的,有人提建议让我加放大。。加放大问题多多,原理感觉都懂,写一个档位一个频率手动切换档位的还行,搞多档位自动切换让我嘴说说能行,动手实际做遇到一些问题。。。关键不知道是程序有问题还是电路有问题,最有可能的是两样都有问题。。

失败啦














本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
一叶倾城wwq 发表于 2021-8-27 11:40 | 显示全部楼层
楼主不要轻言放弃啊,我们等你更新

评论

这方案好像不太行。。  发表于 2021-8-27 12:46
luohao316 发表于 2021-8-27 17:25 | 显示全部楼层
祝你成功。**下去,即便不成功,你也能体会到在学校学的模拟电路,基本上是不能直接拿来用的。

评论

关键是模拟电路我都没学过。。。失败是正常的  发表于 2021-8-27 21:48
 楼主| yjmwxwx 发表于 2021-9-3 20:40 | 显示全部楼层
本帖最后由 yjmwxwx 于 2022-1-24 09:10 编辑

做的板子到了,感觉还不如飞线的,飞线的还有个外壳,有板子还是要做外壳,业余DIY实在是没必要做板子。

硬件也就这样了,软件好像没啥动力搞了,快要秋收了,练练身体准备干活,坐在电脑前写程序太伤身。












电路原理图和程序

https://github.com/yjmwxwx/stm32asm/tree/master/gcm0/lcr_1



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
9999jim 发表于 2021-9-17 15:20 | 显示全部楼层
没事的时候多琢磨一下,半途就弃了,挺可惜的。要加油哦~
 楼主| yjmwxwx 发表于 2022-1-24 08:57 | 显示全部楼层
又搞了个UTC MC4580运放版的,这运放虽然便宜但是不怎么好用,切换放大倍数时候会抖动一下,以前用NE5532没发现这样,这版主要失败在这运放上面,大信号切换到小信号就会抖动一下,造成后面采样异常。









电路图




PCB


程序


https://github.com/yjmwxwx/stm32asm/tree/master/gcm0/lcr_2

演示视频,简单分辨几种电容和电阻,可以看到误差比较大还有的数据不正常,那是因为档位切换不对造成的。

按键2频率加,虽然两个按键但是那个在测量模式没用。

屏幕第一行显示阻抗,第一个是电阻第二个是电抗
第二行显示角度和电容电感数值(小数点可能有问题)



我写的程序太差了,为了让程序固件在16K之内没设置默认校准表,要手动校准才能用。

校准方法测量模式两个按键一块按进入校准模式,过一会显示要校准的档位,根据档位选电阻夹子上,默认调到0度,要改得改程序,校准表没数据会显示179.99度。由于IO紧张按键和SWD调试口公用没办法调试。


虽然越校越不准但是也演示下校准方法,太麻烦只演示前面几个档位,校完了会显示校准完成请关机



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| yjmwxwx 发表于 2022-1-24 09:00 | 显示全部楼层
9999jim 发表于 2021-9-17 15:20
没事的时候多琢磨一下,半途就弃了,挺可惜的。要加油哦~

这一干农活就打断搞DIY了,闲了好几个月,我技术不行,靠制作来学技术,所以做的东西都不好用。
playzlov 发表于 2022-1-28 13:45 | 显示全部楼层
这个还是要用贴片加小屏幕带劲啊
 楼主| yjmwxwx 发表于 2022-1-28 21:59 | 显示全部楼层
焊了个用NE5532版的,这个开关瞬间比4580抖动的小多了,没贴片的还是飞线焊的。。
现在就缺个开路、短路、匹配的校准程序了,虽然公式很简单,但是汇编定点数写也比较麻烦,哎。。。
















本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| yjmwxwx 发表于 2022-1-28 22:35 | 显示全部楼层
playzlov 发表于 2022-1-28 13:45
这个还是要用贴片加小屏幕带劲啊

好是好,关键那得要有这些啊,类似何不食肉糜,这次已经很多都是贴片的了,电阻库存直插的还没用上就没买,这种密度稍微大点的板子还是第一次画,主要为了连连手,要不是免费做板子根本不会练这个,立创真会做生意,免费做板子好让人买他的元器件,不知不觉被坑了。
 楼主| yjmwxwx 发表于 2022-2-4 09:45 | 显示全部楼层
本帖最后由 yjmwxwx 于 2022-2-5 12:41 编辑



SM(开路、短路、匹配)校准程序写完  这东西就俩乘法一个除法感觉是程序里面最麻烦的,不知道到哪里就溢出了。。不管怎么说该有的功能基本算是都做上了。。



按键1进入开路短路校准模式,进入后屏幕显示开路校准或者短路校准,准备好后按按键2确定进入校准,视频只演示进入方法,因为非常非常慢24个档位乘4个频率,能闭眼睡一觉,我写程序没感觉麻烦,但是感觉这校准过程也太麻烦了。

开路校准表存到0X8004000,短路存到0X8004400,匹配校准就是上个校准视频,数据会保存到0X8004800.


https://github.com/yjmwxwx/stm32asm/tree/master/gcm0/lcr_3
 楼主| yjmwxwx 发表于 2022-2-4 12:23 | 显示全部楼层
本帖最后由 yjmwxwx 于 2022-2-5 12:40 编辑



匹配校准演示

先按键按键2再同时按住按键1进入匹配校准模式,当显示确认校准后按按键1会显示进入校准,按照显示当档位根据档位表提供的校准电阻接入后,按按键1进入开始校准。



 楼主| yjmwxwx 发表于 2022-2-5 12:50 | 显示全部楼层
  1.     Zo:仪器端子打开时的测量值。
  2.     Zs:端子短路时的测量值。
  3.     Zsm:连接到DUT时标准DUT的测量值
  4.     Zstd:参考DUT的真实(或预期)值。
  5.     Zxm:DUT的测量值。
  6.     Zdut:DUT的校正值


  7. zo = -6864107 - 9872402i
  8. zs = -61 + 70i
  9. zxm=555+81i
  10. zsm =  555+  81i
  11. zdut=((zs-zxm)*(zsm-zo))/((zxm-zo)*(zs-zsm))



数据表都采集好了,就这简单公式我就是写不好你说尴尬不尴尬,搞了好几天还是不行,要是一个档位还好说,档位多了不知道哪个档位计算就溢出了,缩小数据的话又会有的档位不能正确计算,这写数学库比电桥程序麻烦的多,我这定点数计算实在是写的不怎么样。

失败告终,倒在了数值计算数学库脚下 *_*!
叶春勇 发表于 2022-2-6 21:43 | 显示全部楼层
yjmwxwx 发表于 2022-2-5 12:50
数据表都采集好了,就这简单公式我就是写不好你说尴尬不尴尬,搞了好几天还是不行,要是一个档位还好说 ...

不好定点,就写浮点呀
 楼主| yjmwxwx 发表于 2022-2-6 22:43 | 显示全部楼层
本帖最后由 yjmwxwx 于 2022-2-6 22:56 编辑
叶春勇 发表于 2022-2-6 21:43
不好定点,就写浮点呀

今天又调试了下,那个公式算是能算了,原来是复数乘法计算程序里面的ATAN2前面左移15位忘记关掉引起的溢出,实验了下在校准点还是准确的,过了,偏离了就不行了,可能得这个公式前面还要做幅度和相位校准才行。别的地方那个还有问题,比如上下臂切换太快,切换会造成干扰,这个干扰也被采集了,换成采集多个周期会强很多,但是对于自动换档来说快速更新数据就快速换档,换档程序切换太快是用没滤波的数据靠右移数位来避开跳动的数据,但是还是换的太快,没等数据稳定就换了,有的档位会换不到准确的档位。
低频时候采样率又设置太低了,造成换档和测量速度很慢,还得慢慢改改。

给你看看,就为了计算这简单公式我写的程序多麻烦,把计算这个公式用到的部分贴出来看看,总算勉强能用了
复数乘法和除法都是用角度方法算的

https://elsenaju.eu/Arithmetic/division-complex-numbers.htm





  1. atan_biao:        @角度
  2.         .int 0x00168000,0x000D4853,0x000704A3,0x00039000,0x0001C9C5,0x0000E51B,0x00007295,0x0000394B,0x00001CA5,0x00000E52,0x00000729,0x00000394,0x000001CA,0x000000E5,0x00000072,0x00000039,0x0000001C,0x0000000E,0x00000007,0x00000003,0x00000001


  3. __suan_atan2:
  4.         @入口R0=实部,R1=虚部
  5.         @出口R0=角度
  6.         push {r2-r6,lr}
  7.         ldr r6, = atan_biao
  8.         movs r2, # 0
  9.         mov r3, r2
  10.         movs r0, r0
  11.         bpl __panduan_xubu
  12.         ldr r2, = 5898240
  13.         mvns r0, r0
  14.         mvns r1, r1
  15.         adds r0, r0, # 1
  16.         adds r1, r1, # 1
  17. __panduan_xubu:
  18.         movs r1, r1
  19.         bpl __suan_atan2_xunhuan
  20.         ldr r2, = 11796480
  21. __suan_atan2_xunhuan:
  22.         movs r1, r1
  23.         bpl __atan2_zhengzhuan
  24.         mov r4, r0        @x
  25.         mov r5, r1        @y
  26.         asrs r5, r5, r3
  27.         asrs r4, r4, r3
  28.         subs r0, r0, r5
  29.         adds r1, r1, r4
  30.         mov r4, r3
  31.         lsls r4, r4, # 2
  32.         ldr r4, [r6, r4]
  33.         subs r2, r2, r4
  34.         b __atan2_xuanzhuan
  35. __atan2_zhengzhuan:
  36.         mov r4, r0        @x
  37.         mov r5, r1        @y
  38.         asrs r5, r5, r3
  39.         asrs r4, r4, r3
  40.         adds r0, r0, r5
  41.         subs r1, r1, r4
  42.         mov r4, r3
  43.         lsls r4, r4, # 2
  44.         ldr r4, [r6, r4]
  45.         adds r2, r2, r4
  46. __atan2_xuanzhuan:
  47.         adds r3, r3, # 1
  48.         cmp r3, # 21
  49.         bne __suan_atan2_xunhuan
  50.         mov r1, r0
  51.         mov r0,r2
  52.         pop {r2-r6,pc}




  53.         
  54. __suan_cos_sin:
  55.         @入口R0=0*32768到360*32768
  56.         @出口R0=COS,R1=SIN
  57.         [url=home.php?mod=space&uid=56358]@增益[/url] 32768*0.6072529350088812561694
  58.         push {r2-r7,lr}
  59.         ldr r1, = 0x4dba
  60.         ldr r2, = 2949120        @90
  61.         ldr r3, = 8847360        @270
  62.         ldr r7, = atan_biao
  63.         movs r5, # 0
  64.         mov r6, r5
  65.         cmp r0, r2
  66.         bhi __dayu_90
  67.         movs r4, # 0
  68.         b __suan_cos_sin_xunhuan
  69. __dayu_90:
  70.         cmp r0, r3
  71.         bhi __dayu_270
  72.         ldr r4, = 5898240        @180
  73.         b __suan_cos_sin_xunhuan
  74. __dayu_270:
  75.         ldr r4, = 11796480         @360
  76. __suan_cos_sin_xunhuan:
  77.         mov r3, r4
  78.         mov r2, r0
  79.         subs r2, r2, r3
  80.         bmi __zhengzhuan
  81. __fanzhuan:        
  82.         mov r3, r6
  83.         mov r2, r1
  84.         asrs r6, r6, r5
  85.         subs r2, r2, r6        @x
  86.         asrs r1, r1, r5
  87.         mov r6, r5
  88.         lsls r6, r6, # 2
  89.         ldr r6, [r7, r6]
  90.         adds r3, r3, r1        @y
  91.         adds r4, r4, r6        @jiaodu
  92.         b __cordic_xuanzhuan
  93. __zhengzhuan:
  94.         mov r3, r6
  95.         mov r2, r1
  96.         asrs r6, r6, r5
  97.         adds r2, r2, r6        @x
  98.         asrs r1, r1, r5
  99.         mov r6, r5
  100.         lsls r6, r6, # 2
  101.         ldr r6, [r7, r6]
  102.         subs r3, r3, r1        @y
  103.         subs r4, r4, r6        @jiaodu
  104. __cordic_xuanzhuan:
  105.         mov r1, r2
  106.         mov r6, r3
  107.         adds r5, r5, # 1
  108.         cmp r5, # 21
  109.         bne __suan_cos_sin_xunhuan
  110.         ldr r6, = 2949120        @90
  111.         ldr r7, = 8847360      @270
  112.         cmp r0, r6
  113.         bls __suan_cos_sin_fanhui
  114.         cmp r0, r7
  115.         bcs __suan_cos_sin_fanhui
  116.         mvns r2, r2
  117.         mvns r3, r3
  118.         adds r2, r2, # 1
  119.         adds r3, r3, # 1
  120. __suan_cos_sin_fanhui:        
  121.         mov r1, r3
  122.         mov r0, r2
  123.         pop {r2-r7,pc}

  124. __ji_suan_fu_du:            [url=home.php?mod=space&uid=72445]@[/url] 计算幅度
  125.         [url=home.php?mod=space&uid=72445]@[/url] 入r0= 实部,r1= 虚部
  126.         @ 出r0 = 幅度
  127.         @ Mag ~=Alpha * max(|I|, |Q|) + Beta * min(|I|, |Q|)
  128.         @ Alpha * Max + Beta * Min
  129.         push {r1-r4,lr}
  130.         movs r0, r0
  131.         bpl _shibubushifushu
  132.         mvns r0, r0                             @ 是负数转成正数
  133.         adds r0, r0, # 1
  134. _shibubushifushu:                                       @ 实部不是负数
  135.         movs r1, r1
  136.         bpl _xububushifushu
  137.         mvns r1, r1                             @ 是负数转成正数
  138.         adds r1, r1, # 1
  139. _xububushifushu:                                        @ 虚部不是负数
  140.         cmp r0, # 0
  141.         bne _panduanxubushibushi0
  142.         mov r0, r1
  143.         pop {r1-r4,pc}
  144. _panduanxubushibushi0:
  145.         cmp r1, # 0
  146.         bne _jisuanfudu1
  147.         pop {r1-r4,pc}
  148. _jisuanfudu1:
  149.         ldr r2, = 31066                @ Alpha q15 0.948059448969 @
  150.         ldr r3, = 12868                @ Beta q15 0.392699081699
  151.         cmp r1, r0
  152.         bhi _alpha_min_beta_max
  153. _alpha_max_beta_min:
  154.         mov r4, r1
  155.         mov r1, r2
  156.         bl __chengfa
  157.         lsls r0, r0, # 17
  158.         lsrs r1, r1, # 15
  159.         orrs r0, r0, r1
  160.         mov r2, r0

  161.         mov r0, r3
  162.         mov r1, r4
  163.         bl __chengfa
  164.         lsls r0, r0, # 17
  165.         lsrs r1, r1, # 15
  166.         orrs r1, r1, r0
  167.         mov r0, r2
  168.         
  169. @        muls r0, r0, r2
  170. @        muls r1, r1, r3
  171. @        asrs r0, r0, # 15
  172. @        asrs r1, r1, # 15
  173.         adds r0, r0, r1
  174.         movs r1, # 1
  175.         pop {r1-r4,pc}
  176. _alpha_min_beta_max:
  177.         mov r4, r1
  178.         mov r1, r3
  179.         bl __chengfa
  180.         lsls r0, r0, # 17
  181.         lsrs r1, r1, # 15
  182.         orrs r0, r0, r1
  183.         mov r3, r0

  184.         mov r0, r2
  185.         mov r1, r4
  186.         bl __chengfa
  187.         lsls r0, r0, # 17
  188.         lsrs r1, r1, # 15
  189.         orrs r1, r1, r0
  190.         mov r0, r3
  191.                
  192. @        muls r0, r0, r3
  193. @        muls r1, r1, r2
  194. @        asrs r0, r0, # 15
  195. @        asrs r1, r1, # 15
  196.         adds r0, r0, r1
  197.         movs r1, # 0
  198.         pop {r1-r4,pc}

  199. __chufa64:
  200.         @64位除32位
  201.         @ (R0=高32位R1=低32位)除(R2)= (R0高32)(R1低32)
  202.         push {r3-r7,lr}
  203.         cmp r2, # 0
  204.         beq __chu_fa64_fan_hui0
  205.         cmp r1, # 0
  206.         bne __chu_fa64_ji_suan
  207.         cmp r0, # 0
  208.         beq __chu_fa64_fan_hui0
  209. __chu_fa64_ji_suan:
  210.         movs r4, # 0
  211.         mov r7, r4
  212.         mov r3, r4
  213.         mov r5, r4
  214.         movs r6, # 1
  215.         lsls r6, r6, # 31
  216. __chu_fa64_xun_huan:
  217.         lsls r1, r1, # 1
  218.         adcs r0, r0, r0
  219.         adcs r4, r4, r4
  220.         cmp r4, r2
  221.         bcc __chu_fa_yi_wei
  222.         adds r3, r3, r6
  223.         adcs r5, r5, r7
  224.         subs r4, r4, r2
  225. __chu_fa_yi_wei:
  226.         movs r6, r6
  227.         beq __di_yi_wei
  228.         lsrs r6, r6, # 1        @高32位移位
  229.         bne __chu_fa64_xun_huan
  230.         movs r7, # 1
  231.         lsls r7, r7, # 31
  232.         b __chu_fa64_xun_huan
  233. __di_yi_wei:                    @低32位移位
  234.         lsrs r7, r7, # 1
  235.         bne __chu_fa64_xun_huan
  236.         mov r0, r3
  237.         mov r1, r5
  238.         pop {r3-r7,pc}
  239. __chu_fa64_fan_hui0:
  240.         movs r0, # 0
  241.         movs r1, # 0
  242.         pop {r3-r7,pc}
  243. __chengfa:
  244.         @入R0 乘以 R1
  245.         @出 R0高32 , R1低32
  246.         @0xffffffff*0xffffffff
  247.         [url=home.php?mod=space&uid=26072]@4[/url]        F F F E 0 0 0 1                       @4
  248.         @3                F F F E 0 0 0 1               @3
  249.         @2                F F F E 0 0 0 1               @2
  250.         [url=home.php?mod=space&uid=2514798]@1[/url]                        F F F E 0 0 0 1       @1
  251.         @         F F F F F F F E 0 0 0 0 0 0 0 1
  252.         push {r2-r7,lr}
  253.         cmp r0, # 0
  254.         beq __cheng_fa_fan_hui
  255.         cmp r1, # 0
  256.         beq __cheng_fa_fan_hui
  257. __ji_suan_cheng_fa:
  258.         mov r2, r0
  259.         mov r3, r1
  260.         lsrs r0, r0, # 16       @高16
  261.         lsls r2, r2, # 16       @ 低16
  262.         lsrs r2, r2, # 16
  263.         lsrs r1, r1, # 16       @高16
  264.         lsls r3, r3, # 16       @低16
  265.         lsrs r3, r3, # 16
  266.         mov r4, r2
  267.         mov r5, r0
  268.         muls r2, r2, r3         @1
  269.         muls r0, r0, r3         @2
  270.         muls r4, r4, r1         @3
  271.         muls r5, r5, r1         @4
  272.         mov r6, r0
  273.         mov r7, r4
  274.         lsls r0, r0, # 16       @2低32
  275.         lsls r4, r4, # 16       @3低32
  276.         lsrs r6, r6, # 16       @2高32
  277.         lsrs r7, r7, # 16       @3高32
  278.         movs r1, # 0
  279.         adds r2, r2, r0         @低32
  280.         adcs r6, r6, r1         @高32
  281.         adds r2, r2, r4
  282.         adcs r6, r6, r7
  283.         adds r6, r6, r5
  284.         mov r0, r6
  285.         mov r1, r2
  286.         pop {r2-r7,pc}
  287. __cheng_fa_fan_hui:
  288.         movs r0, # 0
  289.         movs r1, # 0
  290.         pop {r2-r7,pc}


  291. __fushu_chufa:
  292.         @入口R0=Z1_R, R1=Z1_I,R2=Z2_R,R3=Z2_I
  293.         @出口R0=Z_R,R1=Z_I
  294.         push {r4-r7,lr}
  295.         mov r6, r0
  296.         mov r7, r1
  297. @        lsls r0, r0, # 15
  298. @        lsls r1, r1, # 15
  299.         bl __suan_atan2
  300.         mov r5, r0
  301.         mov r0, r2
  302.         mov r1, r3
  303. @        lsls r0, r0, # 15
  304. @        lsls r1, r1, # 15
  305.         bl __suan_atan2
  306. @        bkpt # 0
  307.         mov r1, r5
  308.         subs r0, r1, r0 @算角度差
  309.         bpl __suan_shangxiabi_fudu
  310.         ldr r1, = 11796480      @360*32768
  311.         adds r0, r0, r1
  312. __suan_shangxiabi_fudu:
  313.         mov r5, r0      @保存角度差
  314. @        bkpt # 1
  315.         mov r0, r2
  316.         mov r1, r3
  317.         bl __ji_suan_fu_du
  318. @        bkpt # 2
  319.         mov r2, r0
  320.         mov r0, r6      @上臂R
  321.         mov r1, r7      @上臂I
  322.         bl __ji_suan_fu_du
  323. @        bkpt # 3
  324.         mov r1, r0
  325.         lsrs r0, r0, # 17
  326.         lsls r1, r1, # 15
  327.         bl __chufa64
  328.         mov r3, r1      @Z幅度
  329. @        bkpt # 4
  330.         mov r0, r5
  331.         bl __suan_cos_sin
  332. @        bkpt # 4
  333.         mov r4, r1
  334.         mov r1, r3
  335.         movs r2, # 0
  336.         movs r0, r0
  337.         bpl cl1
  338.         adds r2, r2, # 1
  339.         mvns r0, r0
  340.         adds r0, r0, # 1
  341. cl1:
  342.         movs r1, r1
  343.         bpl cl2
  344.         adds r2, r2, # 1
  345.         mvns r1, r1
  346.         adds r1, r1, # 1
  347. cl2:
  348.         bl __chengfa
  349. @        bkpt # 5
  350.         lsls r0, r0, # 17
  351.         lsrs r1, r1, # 15
  352.         orrs r1, r1, r0
  353.         cmp r2, # 1
  354.         bne __suan_xubu
  355.         mvns r1, r1
  356.         adds r1, r1, # 1
  357. __suan_xubu:
  358.         mov r0, r4
  359.         mov r4, r1      @实部
  360.         mov r1, r3
  361.         movs r2, # 0
  362.         movs r0, r0
  363.         bpl cl3
  364.         adds r2, r2, # 1
  365.         mvns r0, r0
  366.         adds r0, r0, # 1
  367. cl3:
  368.         movs r1, r1
  369.         bpl cl4
  370.         adds r2, r2, # 1
  371.         mvns r1, r1
  372.         adds r1, r1, # 1
  373. cl4:
  374.         bl __chengfa
  375. @        bkpt #6
  376.         lsls r0, r0, # 17
  377.         lsrs r1, r1, # 15
  378.         orrs r1, r1, r0
  379.         cmp r2, # 1
  380.         bne cl5
  381.         mvns r1, r1
  382.         adds r1, r1, # 1
  383. cl5:
  384.         mov r0, r4
  385.         pop {r4-r7,pc}

  386. __fushu_chengfa:
  387.         @入口R0=Z1_R, R1=Z1_I,R2=Z2_R,R3=Z2_I
  388.         @出口R0=Z_R,R1=Z_I
  389.         push {r4-r7,lr}
  390.         mov r6, r0
  391.         mov r7, r1
  392. @        lsls r0, r0, # 15
  393. @        lsls r1, r1, # 15
  394.         bl __suan_atan2
  395.         mov r5, r0
  396.         mov r0, r2
  397.         mov r1, r3
  398. @        lsls r0, r0, # 15
  399. @        lsls r1, r1, # 15
  400.         bl __suan_atan2
  401. @        bkpt # 0
  402.         mov r1, r5
  403.         adds r0, r1, r0 @算角度差
  404.         ldr r1, = 11796480      @360*32768
  405.         cmp r0, r1
  406.         bcc __suan_chengfa_shangxiabi_fudu
  407.         subs r0, r0, r1
  408. __suan_chengfa_shangxiabi_fudu:
  409.         mov r5, r0      @保存角度和
  410. @      bkpt # 1
  411.         mov r0, r2
  412.         mov r1, r3
  413.         bl __ji_suan_fu_du
  414. @       bkpt # 2
  415.         mov r2, r0
  416.         mov r0, r6      @上臂R
  417.         mov r1, r7      @上臂I
  418.         bl __ji_suan_fu_du
  419. @        bkpt # 3
  420.         mov r1, r2
  421.         bl __chengfa
  422.         lsls r0, r0, # 17
  423.         lsrs r1, r1, # 15
  424.         orrs r0, r0, r1
  425.         mov r3, r0      @Z幅度
  426. @        bkpt # 4
  427.         mov r0, r5
  428.         bl __suan_cos_sin
  429. @      bkpt # 4
  430.         mov r4, r1
  431.         mov r1, r3
  432.         movs r2, # 0
  433.         movs r0, r0
  434.         bpl cf1
  435.         adds r2, r2, # 1
  436.         mvns r0, r0
  437.         adds r0, r0, # 1
  438. cf1:
  439.         movs r1, r1
  440.         bpl cf2
  441.         adds r2, r2, # 1
  442.         mvns r1, r1
  443.         adds r1, r1, # 1
  444. cf2:
  445.         bl __chengfa
  446. @       bkpt # 5
  447.         lsls r0, r0, # 17
  448.         lsrs r1, r1, # 15
  449.         orrs r1, r1, r0
  450.         cmp r2, # 1
  451.         bne __suan_chengfa_xubu
  452.         mvns r1, r1
  453.         adds r1, r1, # 1
  454. __suan_chengfa_xubu:
  455.         mov r0, r4
  456.         mov r4, r1      @实部
  457.         mov r1, r3
  458.         movs r2, # 0
  459.         movs r0, r0
  460.         bpl cf3
  461.         adds r2, r2, # 1
  462.         mvns r0, r0
  463.         adds r0, r0, # 1
  464. cf3:
  465.         movs r1, r1
  466.         bpl cf4
  467.         adds r2, r2, # 1
  468.         mvns r1, r1
  469.         adds r1, r1, # 1
  470. cf4:
  471.         bl __chengfa
  472. @       bkpt #6
  473.         lsls r0, r0, # 17
  474.         lsrs r1, r1, # 15
  475.         orrs r1, r1, r0
  476.         cmp r2, # 1
  477.         bne cf5
  478.         mvns r1, r1
  479.         adds r1, r1, # 1
  480. cf5:
  481.         mov r0, r4
  482.         pop {r4-r7,pc}
  483.         .ltorg
  484. __fu_shu_cheng_fa:
  485.         push {r4-r7,lr}
  486.         @r0=a,r1=b,r2=c,r3=d
  487.         mov r4, r0      @a
  488.         mov r5, r1      @b
  489.         mov r6, r2      @c
  490.         mov r7, r3      @d
  491.         muls r0, r0, r2 @a*c
  492.         muls r1, r1, r3 @b*d
  493.         subs r0, r0, r1 @ac-bd
  494.         muls r4, r4, r7 @a*d
  495.         muls r5, r5, r6 @b*c
  496.         adds r4, r4, r5 @ad+bc
  497.         mov r1, r4
  498.         pop {r4-r7,pc}
  499.         .ltorg
  500. __osm_jiaozhun:
  501.         @入口R0-R1=ZS,R2-R3=ZXM,R4-R5=ZSM,R6-R7=ZO
  502.         @出口R0=R,R1=I
  503.         push {r2-r7,lr}
  504.         mov r4, r8
  505.         mov r5, r9
  506.         mov r6, r10
  507.         mov r7, r11
  508.         push {r4-r7}
  509.         @       ldr r0, = -61           @zs
  510.         @       ldr r1, = 70
  511.         @       ldr r2, = 555           @zxm
  512.         @       ldr r3, = 81
  513.         @       ldr r4, = 555           @zsm
  514.         @       ldr r5, = 81
  515.         @       ldr r6, = -6864107      @zo
  516.         @       ldr r7, = -9872402
  517.         mov r8, sp
  518.         ldr r0, = 0x200000e0
  519.         mov sp, r0
  520.         pop {r0-r7}
  521.         mov sp, r8
  522.         mov r8, r0
  523.         mov r9, r1
  524.         subs r0, r0, r2         @zs-zxm
  525.         subs r1, r1, r3
  526.         mov r10, r0
  527.         mov r11, r1

  528.         mov r0, r8
  529.         mov r1, r9
  530.         subs r0, r0, r4         @zs-zsm
  531.         subs r1, r1, r5

  532.         subs r2, r2, r6         @zxm-zo
  533.         subs r3, r3, r7

  534.         subs r4, r4, r6         @zsm-zo
  535.         subs r5, r5, r7

  536.         
  537.         asrs r0, r0, # 4
  538.         asrs r1, r1, # 4
  539.         asrs r2, r2, # 4
  540.         asrs r3, r3, # 4
  541.         
  542.         bl __fushu_chengfa    @(zxm-zo)*(zs-zsm)
  543.         mov r2, r4
  544.         mov r3, r5

  545.         mov r4, r0
  546.         mov r5, r1

  547.         mov r0, r10
  548.         mov r1, r11
  549.         asrs r0, r0, # 4
  550.         asrs r1, r1, # 4
  551.         asrs r2, r2, # 4
  552.         asrs r3, r3, # 4
  553.         
  554.         
  555.         bl __fushu_chengfa    @(zs-zxm)*(zsm-zo)

  556.         mov r2, r4
  557.         mov r3, r5
  558.         
  559.         bl __fushu_chufa
  560.         pop {r4-r7}
  561.         mov r8, r4
  562.         mov r9, r5
  563.         mov r10, r6
  564.         mov r11, r7
  565.         pop {r2-r7,pc}

















本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| yjmwxwx 发表于 2022-2-6 22:50 | 显示全部楼层
叶春勇 发表于 2022-2-6 21:43
不好定点,就写浮点呀

浮点的虽然以前学过但是没写过运算的程序,调用官方提供的数学库也行,但是自己DIY折腾可玩性高,不成功才有继续下去的动力,要是一下成功了估计再也不会碰了这个了,速度要求快的地方还是定点的快,我实验了下MCU频率56MHZ的时候1000点DFT计算376微秒就够了,采样率2MHZ采集100KHZ能在采集完数据前计算完。
还是牺牲空间换速度,尽量少用循环




  1. cos_sin_biao_100k:
  2.         .int 0x00008000,0x00000000,0x0000678D,0xFFFFB4C4,0x0000278D,0xFFFF8644,0xFFFFD873,0xFFFF8644,0xFFFF9873,0xFFFFB4C4,0xFFFF8000,0x00000000,0xFFFF9873,0x00004B3C,0xFFFFD873,0x000079BC,0x0000278D,0x000079BC,0x0000678D,0x00004B3C,0x00008000,0x00000000,0x0000678D,0xFFFFB4C4,0x0000278D,0xFFFF8644,0xFFFFD873,0xFFFF8644,0xFFFF9873,0xFFFFB4C4,0xFFFF8000,0x00000000,0xFFFF9873,0x00004B3C,0xFFFFD873,0x000079BC,0x0000278D,0x000079BC,0x0000678D,0x00004B3C,0x12345678
  3.        

  4. __dft1:                @1000点用时376微秒
  5.         push {r2-r7,lr}
  6.         mov r5, r10
  7.         mov r6, r11
  8.         mov r7, r12
  9.         push {r3-r5}
  10.         ldr r0, = cossin
  11.         ldr r1, = dianyabiao
  12.         ldr r0, [r0]
  13.         movs r6, # 0
  14.         mov r7, r6
  15.         mov r12, sp
  16.         mov r11, r0
  17.         mov r10, r1
  18.         b __ji_suan_dft
  19.         .ltorg
  20. __ji_suan_dft:
  21.         @0
  22.         mov sp, r11
  23.         pop {r0-r3}
  24.         mov r11, sp
  25.         mov sp, r10
  26.         pop {r4}
  27.         mov r10, sp
  28.         mov r5, r4
  29.         lsls r4, r4, # 16
  30.         lsrs r4, r4, # 16
  31.         lsrs r5, r5, # 16
  32.         muls r0, r0, r4                @R
  33.         muls r1, r1, r4                @I
  34.         muls r2, r2, r5                @R
  35.         muls r3, r3, r5                @I
  36.         asrs r0, r0, # 6
  37.         asrs r1, r1, # 6
  38.         asrs r2, r2, # 6
  39.         asrs r3, r3, # 6
  40.         adds r0, r0, r2         @r
  41.         adds r1, r1, r3         @i
  42.         adds r6, r6, r0
  43.         adds r7, r7, r1

  44.         mov sp, r11
  45.         pop {r0-r3}
  46.         mov r11, sp
  47.         mov sp, r10
  48.         pop {r4}
  49.         mov r10, sp
  50.         mov r5, r4
  51.         lsls r4, r4, # 16
  52.         lsrs r4, r4, # 16
  53.         lsrs r5, r5, # 16
  54.         muls r0, r0, r4
  55.         muls r1, r1, r4
  56.         muls r2, r2, r5
  57.         muls r3, r3, r5
  58.         asrs r0, r0, # 6
  59.         asrs r1, r1, # 6
  60.         asrs r2, r2, # 6
  61.         asrs r3, r3, # 6
  62.         adds r0, r0, r2         @r
  63.         adds r1, r1, r3         @i
  64.         adds r6, r6, r0
  65.         adds r7, r7, r1

  66.         mov sp, r11
  67.         pop {r0-r3}
  68.         mov r11, sp
  69.         mov sp, r10
  70.         pop {r4}
  71.         mov r10, sp
  72.         mov r5, r4
  73.         lsls r4, r4, # 16
  74.         lsrs r4, r4, # 16
  75.         lsrs r5, r5, # 16
  76.         muls r0, r0, r4
  77.         muls r1, r1, r4
  78.         muls r2, r2, r5
  79.         muls r3, r3, r5
  80.         asrs r0, r0, # 6
  81.         asrs r1, r1, # 6
  82.         asrs r2, r2, # 6
  83.         asrs r3, r3, # 6
  84.         adds r0, r0, r2  @r
  85.         adds r1, r1, r3  @i
  86.         adds r6, r6, r0
  87.         adds r7, r7, r1

  88.         mov sp, r11
  89.         pop {r0-r3}
  90.         mov r11, sp
  91.         mov sp, r10
  92.         pop {r4}
  93.         mov r10, sp
  94.         mov r5, r4
  95.         lsls r4, r4, # 16
  96.         lsrs r4, r4, # 16
  97.         lsrs r5, r5, # 16
  98.         muls r0, r0, r4
  99.         muls r1, r1, r4
  100.         muls r2, r2, r5
  101.         muls r3, r3, r5
  102.         asrs r0, r0, # 6
  103.         asrs r1, r1, # 6
  104.         asrs r2, r2, # 6
  105.         asrs r3, r3, # 6
  106.         adds r0, r0, r2         @r
  107.         adds r1, r1, r3         @i
  108.         adds r6, r6, r0
  109.         adds r7, r7, r1
  110.         @1
  111. __dft1_fanhuile:
  112.         mov sp, r11
  113.         pop {r0-r3}
  114.         mov r11, sp
  115.         mov sp, r10
  116.         pop {r4}
  117.         mov r10, sp
  118.         mov r5, r4
  119.         lsls r4, r4, # 16
  120.         lsrs r4, r4, # 16
  121.         lsrs r5, r5, # 16
  122.         muls r0, r0, r4         @R
  123.         muls r1, r1, r4         @I
  124.         muls r2, r2, r5         @R
  125.         muls r3, r3, r5         @I
  126.         asrs r0, r0, # 6
  127.         asrs r1, r1, # 6
  128.         asrs r2, r2, # 6
  129.         asrs r3, r3, # 6
  130.         adds r0, r0, r2  @r
  131.         adds r1, r1, r3  @i
  132.         adds r6, r6, r0
  133.         adds r7, r7, r1

  134.         mov sp, r11
  135.         pop {r0-r3}
  136.         mov r11, sp
  137.         mov sp, r10
  138.         pop {r4}
  139.         mov r10, sp
  140.         mov r5, r4
  141.         lsls r4, r4, # 16
  142.         lsrs r4, r4, # 16
  143.         lsrs r5, r5, # 16
  144.         muls r0, r0, r4
  145.         muls r1, r1, r4
  146.         muls r2, r2, r5
  147.         muls r3, r3, r5
  148.         asrs r0, r0, # 6
  149.         asrs r1, r1, # 6
  150.         asrs r2, r2, # 6
  151.         asrs r3, r3, # 6
  152.         adds r0, r0, r2         @r
  153.         adds r1, r1, r3         @i
  154.         adds r6, r6, r0
  155.         adds r7, r7, r1

  156.         mov sp, r11
  157.         pop {r0-r3}
  158.         mov r11, sp
  159.         mov sp, r10
  160.         pop {r4}
  161.         mov r10, sp
  162.         mov r5, r4
  163.         lsls r4, r4, # 16
  164.         lsrs r4, r4, # 16
  165.         lsrs r5, r5, # 16
  166.         muls r0, r0, r4
  167.         muls r1, r1, r4
  168.         muls r2, r2, r5
  169.         muls r3, r3, r5
  170.         asrs r0, r0, # 6
  171.         asrs r1, r1, # 6
  172.         asrs r2, r2, # 6
  173.         asrs r3, r3, # 6
  174.         adds r0, r0, r2  @r
  175.         adds r1, r1, r3  @i
  176.         adds r6, r6, r0
  177.         adds r7, r7, r1

  178.         mov sp, r11
  179.         pop {r0-r3}
  180.         mov r11, sp
  181.         mov sp, r10
  182.         pop {r4}
  183.         mov r10, sp
  184.         mov r5, r4
  185.         lsls r4, r4, # 16
  186.         lsrs r4, r4, # 16
  187.         lsrs r5, r5, # 16
  188.         muls r0, r0, r4
  189.         muls r1, r1, r4
  190.         muls r2, r2, r5
  191.         muls r3, r3, r5
  192.         asrs r0, r0, # 6
  193.         asrs r1, r1, # 6
  194.         asrs r2, r2, # 6
  195.         asrs r3, r3, # 6
  196.         adds r0, r0, r2         @r
  197.         adds r1, r1, r3         @i
  198.         adds r6, r6, r0
  199.         adds r7, r7, r1
  200.         @2
  201.         mov sp, r11
  202.         pop {r0-r3}
  203.         mov r11, sp
  204.         mov sp, r10
  205.         pop {r4}
  206.         mov r10, sp
  207.         mov r5, r4
  208.         lsls r4, r4, # 16
  209.         lsrs r4, r4, # 16
  210.         lsrs r5, r5, # 16
  211.         muls r0, r0, r4         @R
  212.         muls r1, r1, r4         @I
  213.         muls r2, r2, r5         @R
  214.         muls r3, r3, r5         @I
  215.         asrs r0, r0, # 6
  216.         asrs r1, r1, # 6
  217.         asrs r2, r2, # 6
  218.         asrs r3, r3, # 6
  219.         adds r0, r0, r2  @r
  220.         adds r1, r1, r3  @i
  221.         adds r6, r6, r0
  222.         adds r7, r7, r1

  223.         mov sp, r11
  224.         pop {r0-r3}
  225.         mov r11, sp
  226.         mov sp, r10
  227.         pop {r4}
  228.         mov r10, sp
  229.         mov r5, r4
  230.         lsls r4, r4, # 16
  231.         lsrs r4, r4, # 16
  232.         lsrs r5, r5, # 16
  233.         muls r0, r0, r4
  234.         muls r1, r1, r4
  235.         muls r2, r2, r5
  236.         muls r3, r3, r5
  237.         asrs r0, r0, # 6
  238.         asrs r1, r1, # 6
  239.         asrs r2, r2, # 6
  240.         asrs r3, r3, # 6
  241.         adds r0, r0, r2         @r
  242.         adds r1, r1, r3         @i
  243.         adds r6, r6, r0
  244.         adds r7, r7, r1

  245.         ldr r1, = cossin
  246.         ldr r1, [r1]
  247.         mov r11, r1
  248. __panduan_dianyabiao:
  249.         ldr r0, = 0x200007b8
  250.         cmp r10, r0
  251.         bcs __dft1_fanhui
  252.         b __ji_suan_dft
  253. __dft1_fanhui:
  254.         ldr r0, = 0x200007d0
  255.         cmp r10, r0
  256.         beq __dft1_fanhui1
  257.         b __dft1_fanhuile
  258. __dft1_fanhui1:
  259.         mov r0, r6
  260.         mov r1, r7
  261.         asrs r0, r0, # 9
  262.         asrs r1, r1, # 9
  263.         mov sp, r12
  264.         pop {r2-r4}
  265.         mov r10, r2
  266.         mov r11, r3
  267.         mov r12, r4
  268.         pop {r2-r7,pc}
  269.         .ltorg


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

122

主题

2952

帖子

54

粉丝
快速回复 在线客服 返回列表 返回顶部

122

主题

2952

帖子

54

粉丝
快速回复 在线客服 返回列表 返回顶部