做镊子LCR表又失败,帮忙参谋怎么改

[复制链接]
60583|308
Jack315 发表于 2021-8-26 12:58 | 显示全部楼层
yjmwxwx 发表于 2021-8-25 23:01
开关频率高了一个周期点数就少了

审核的帖子还没出来,重新发一下……

F = 56 MHz 是时钟频率。
N = 20 是正弦数据表数据点数。
P = 27 不是振幅,实际上是时钟的分频数 (P + 1)。

SPWM 的开关频率为: fpwm = F / (P + 1)
正弦信号的频率为:fsin = fpwm / N
下面是新的内容……

这是重新设计的滤波器波特图:

这意味着 SPWM 的开关频率不能小于 4MHz,即:
fpwm = F/(p+1) >= 4MHz
求得 p <= 56 / 4 - 1 = 13

要得到指定频率的正弦信号,只能改变正弦数据表的大小 N 。
下表是计算的结果:

100Hz 需要 40000 个正弦表的数据点,看起来有点难度了。
173 楼的波形,时间轴是不是 1 us/div 档?

@叶春勇
能帮忙检查上面这个表计算是不是有错误?
比如看下 SPWM 的频率。


本帖子中包含更多资源

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

×
叶春勇 发表于 2021-8-26 13:54 | 显示全部楼层
Jack315 发表于 2021-8-26 12:58
审核的帖子还没出来,重新发一下……

F = 56 MHz 是时钟频率。

我已经写了个根据sin表生成spicie的pwl信号源,可以用于滤波器的初步测试。
 楼主| yjmwxwx 发表于 2021-8-26 14:13 | 显示全部楼层
本帖最后由 yjmwxwx 于 2021-8-26 14:16 编辑
Jack315 发表于 2021-8-26 12:58
审核的帖子还没出来,重新发一下……

F = 56 MHz 是时钟频率。

这单片机官方资料只有16K FLASH,虽然后面还有16K但是好像官方不保证好坏,表太大了放不开。

我现在表不是很大固件都16K了,程序里面还没有计算电容、电感、相位、校准什么的程序。
RAM只有4K 也已经占满了
Jack315 发表于 2021-8-26 14:39 | 显示全部楼层
yjmwxwx 发表于 2021-8-26 14:13
这单片机官方资料只有16K FLASH,虽然后面还有16K但是好像官方不保证好坏,表太大了放不开。

我现在表不 ...

试试另外的 16K 能不能用,或者有多少能用。
如果有 10K 以上,那么再尝试修改滤波器的设计,
使得开关频率的要求变成 fpwm >= 1 MHz
看看这样软件上是不是就成了。

不过修改滤波器的设计也有难度的。
要硬件,软件两边都成了才行。
不然的话,可能最低只能做到 10KHz,甚至是几十K。
不知道这样是否能达到你的目的。
 楼主| yjmwxwx 发表于 2021-8-26 15:00 | 显示全部楼层
本帖最后由 yjmwxwx 于 2021-8-26 15:02 编辑
Jack315 发表于 2021-8-26 14:39
试试另外的 16K 能不能用,或者有多少能用。
如果有 10K 以上,那么再尝试修改滤波器的设计,
使得开关频 ...

另外16K能用。
原来做的都有100K啊,精度要求不高能用就好

原来滤波电路100K时候的波形








本帖子中包含更多资源

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

×
Jack315 发表于 2021-8-26 16:24 | 显示全部楼层
yjmwxwx 发表于 2021-8-26 15:00
另外16K能用。
原来做的都有100K啊,精度要求不高能用就好

可能我没说清楚……
想知道的是另外 16K Flash 能不能用?
如果能用的话,有多少 Flash 能用?
 楼主| yjmwxwx 发表于 2021-8-26 16:37 | 显示全部楼层
Jack315 发表于 2021-8-26 16:24
可能我没说清楚……
想知道的是另外 16K Flash 能不能用?
如果能用的话,有多少 Flash 能用? ...

应该都能用,程序代码部分大概6K足够了,26K可以放各种查询表,但是不可能全都放正弦表,还有别的表
Jack315 发表于 2021-8-26 16:58 | 显示全部楼层
yjmwxwx 发表于 2021-8-26 16:37
应该都能用,程序代码部分大概6K足够了,26K可以放各种查询表,但是不可能全都放正弦表,还有别的表 ...

估计一下放正弦表的空间有多少?

先估计下可用的空间是多少?
然后根据自己的判断,乘以一个安全系数,比如 0.8 或 0.9,得出用于放正弦表的空间。

根据这个数据,看能不能再调整一下滤波器的幅频特性曲线,
使得 100Hz 这一档也能正常工作。
 楼主| yjmwxwx 发表于 2021-8-26 17:53 | 显示全部楼层
Jack315 发表于 2021-8-26 16:58
估计一下放正弦表的空间有多少?

先估计下可用的空间是多少?

空间估计最多16K吧,代码6K DFT查询表、校准表什么的10K。

评论

收到  发表于 2021-8-26 18:10
 楼主| yjmwxwx 发表于 2021-8-26 19:23 | 显示全部楼层
叶春勇 发表于 2021-8-22 17:50
你只发了一个数据,还要分析数据的稳定性,这是自动量程的基础。
自动量程,大致是个状态机,参考做电梯 ...

我那复数除法容易溢出而且还只保留4位,下午想了想别的方式计算,不知道行不行

  1. shangbi_r = 200
  2. shangbi_i = -100
  3. xiabi_r = 20
  4. xiabi_i= 30
  5. shangbi_jiaodu = atan2(shangbi_i,shangbi_r)*180/3.1415927
  6. xiabi_jiaodu = atan2(xiabi_i,xiabi_r)*180/3.1415927
  7. shangbi_z = sqrt(shangbi_r ^ 2 + shangbi_i ^ 2)
  8. xiabi_z = sqrt(xiabi_r ^ 2 + xiabi_i ^ 2)
  9. z = shangbi_z / xiabi_z
  10. z_jiaodu = shangbi_jiaodu - xiabi_jiaodu
  11. z_r = z * cosd(z_jiaodu)
  12. z_i = z * sind(z_jiaodu)


叶春勇 发表于 2021-8-26 19:58 | 显示全部楼层
Jack315 发表于 2021-8-26 12:58
审核的帖子还没出来,重新发一下……

F = 56 MHz 是时钟频率。

他的spwm,分析了程序,如下图:

本帖子中包含更多资源

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

×
Jack315 发表于 2021-8-26 20:22 | 显示全部楼层
叶春勇 发表于 2021-8-26 19:58
他的spwm,分析了程序,如下图:

所以 100Hz 时候,PWM 开关信号就滤不干净了。
要重新设计滤波器,在 PWM 开关信号频率为 1MHz 的时候衰减 40dB 以上。
PWM 开关信号频率要设置成不小于 1MHz 。
叶春勇 发表于 2021-8-26 21:01 | 显示全部楼层
yjmwxwx 发表于 2021-8-26 19:23
我那复数除法容易溢出而且还只保留4位,下午想了想别的方式计算,不知道行不行

方法1:复数相除(a+bi)/(c+di),以前写过测试程序,用64位累加
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdint.h>
  4. #include <complex.h>
  5. int32_t a[2]={1234567,1234567};
  6. int32_t b[2]={312345,932323};
  7. int32_t t[2]={0,0};

  8. void cdiv(int32_t *a,int32_t *b,int32_t *result)
  9. {
  10.     int64_t D=(int64_t)b[0]*(int64_t)b[0]+(int64_t)b[1]*(int64_t)b[1];
  11.     int64_t N0=(int64_t)a[0]*(int64_t)b[0]+(int64_t)a[1]*(int64_t)b[1];
  12.     int64_t N1=(int64_t)a[1]*(int64_t)b[0]-(int64_t)a[0]*(int64_t)b[1];
  13.     result[0]=N0*1000/D;
  14.     result[1]=N1*1000/D;
  15.     printf("%I64d,%I64d,%I64d\n",N0,N1,D);

  16. }
  17. int main()
  18. {
  19.     double complex A=a[0]+a[1]*I;
  20.     double complex B=b[0]+b[1]*I;
  21.     cdiv(a,b,t);
  22.     printf("%d,%di\n",t[0],t[1]);
  23.     printf("%lf,%lfi\n",creal(A/B),cimag(A/B));

  24.     return 0;
  25. }
方法2:你给出的方法复数的指数形式,后来没折腾了,用c数学库解决了。主要是我用了沃尔什变换,比dft快很多,节省了时间。
有√(a^2+b^2),这个a^2+b^2也是要考虑溢出的
 楼主| yjmwxwx 发表于 2021-8-26 21:11 | 显示全部楼层
叶春勇 发表于 2021-8-26 21:01
方法1:复数相除(a+bi)/(c+di),以前写过测试程序,用64位累加
方法2:你给出的方法复数的指数形式,后来 ...

感觉这方法适合单片机,只需要计算一个整数除法就行了,其他的那些计算都有快速计算的方法,不用算除法。这些程序以后校准程序也用的上。
叶春勇 发表于 2021-8-26 21:46 | 显示全部楼层
yjmwxwx 发表于 2021-8-26 21:11
感觉这方法适合单片机,只需要计算一个整数除法就行了,其他的那些计算都有快速计算的方法,不用算除法。 ...

你涨价前,要是买几片stm32f103c8t6就好,那个时候才几块钱。这个单片机能双采。
如果有stm32f103v系列,就有dac。那个时候都不贵。
这个算法用c语言复数库很容易算,且计算量跟1000个数的dft计算量相比很小,不是首先优化的目标。
你是非要用stm32f030,我是没办法。dsp电桥本来就是电路比较精简,被你搞的硬件特复杂,还要分时采集。
等以后stm32降价了,别再一个单片机上吊着。
 楼主| yjmwxwx 发表于 2021-8-26 22:08 | 显示全部楼层
叶春勇 发表于 2021-8-26 21:46
你涨价前,要是买几片stm32f103c8t6就好,那个时候才几块钱。这个单片机能双采。
如果有stm32f103v系列, ...

我主要是一边玩一边学东西,当时我买STM32F030F4P6时候才两元多一片,要是买C8T6就不能买这么多了,做一些简单东西用不到那么强的功能,再说我主要没钱折腾,我要一个月有2000元工资我也不会去这么算计。
我想改那复数除法是因为那个写的太差了,想换个别的计算方式试试,你说是复数的指数形式我才百度搜搜才知道中学时候数学就讲了,比较尴尬我上初一时候就被班主任放弃了没学过这些东西。。


降价我也没钱玩,2元多感觉还行,再贵就心疼了,毕竟我是玩,这个只有投入不可能有回报,而我还在啃老不可能拿太多钱玩这些没用的东西。





 楼主| yjmwxwx 发表于 2021-8-26 23:06 | 显示全部楼层
叶春勇 发表于 2021-8-26 21:46
你涨价前,要是买几片stm32f103c8t6就好,那个时候才几块钱。这个单片机能双采。
如果有stm32f103v系列, ...

其实我最早买的就是STM32F103C8T6,大概买了10片,我的两个JINLI OB就是这芯片焊的,我这现在还有几片STM32F100C8T6,103C8T6可能也能找出片来,但是没转接板数量少不值得玩,稍不注意烧了没代替的。
叶春勇 发表于 2021-8-26 23:12 | 显示全部楼层
yjmwxwx 发表于 2021-8-26 23:06
其实我最早买的就是STM32F103C8T6,大概买了10片,我的两个JINLI OB就是这芯片焊的,我这现在还有几片STM ...

开源的daplink弄了没,这个据说不错
 楼主| yjmwxwx 发表于 2021-8-26 23:56 | 显示全部楼层
叶春勇 发表于 2021-8-26 23:12
开源的daplink弄了没,这个据说不错

没做过那个
叶春勇 发表于 2021-8-27 09:45 | 显示全部楼层

你这个月,免费的两次机会,把电路模块化了。
那个可调增益放大器,可以模块化,说不定以后能用上。把电源接口留出,单片机接口留出,这样就有成本低的pga
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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