打印

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

[复制链接]
楼主: yjmwxwx
手机看帖
扫描二维码
随时随地手机跟帖
181
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 的频率。


使用特权

评论回复
182
叶春勇| | 2021-8-26 13:54 | 只看该作者
Jack315 发表于 2021-8-26 12:58
审核的帖子还没出来,重新发一下……

F = 56 MHz 是时钟频率。

我已经写了个根据sin表生成spicie的pwl信号源,可以用于滤波器的初步测试。

使用特权

评论回复
183
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 也已经占满了

使用特权

评论回复
184
Jack315| | 2021-8-26 14:39 | 只看该作者
yjmwxwx 发表于 2021-8-26 14:13
这单片机官方资料只有16K FLASH,虽然后面还有16K但是好像官方不保证好坏,表太大了放不开。

我现在表不 ...

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

不过修改滤波器的设计也有难度的。
要硬件,软件两边都成了才行。
不然的话,可能最低只能做到 10KHz,甚至是几十K。
不知道这样是否能达到你的目的。

使用特权

评论回复
185
yjmwxwx|  楼主 | 2021-8-26 15:00 | 只看该作者
本帖最后由 yjmwxwx 于 2021-8-26 15:02 编辑
Jack315 发表于 2021-8-26 14:39
试试另外的 16K 能不能用,或者有多少能用。
如果有 10K 以上,那么再尝试修改滤波器的设计,
使得开关频 ...

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

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








使用特权

评论回复
186
Jack315| | 2021-8-26 16:24 | 只看该作者
yjmwxwx 发表于 2021-8-26 15:00
另外16K能用。
原来做的都有100K啊,精度要求不高能用就好

可能我没说清楚……
想知道的是另外 16K Flash 能不能用?
如果能用的话,有多少 Flash 能用?

使用特权

评论回复
187
yjmwxwx|  楼主 | 2021-8-26 16:37 | 只看该作者
Jack315 发表于 2021-8-26 16:24
可能我没说清楚……
想知道的是另外 16K Flash 能不能用?
如果能用的话,有多少 Flash 能用? ...

应该都能用,程序代码部分大概6K足够了,26K可以放各种查询表,但是不可能全都放正弦表,还有别的表

使用特权

评论回复
188
Jack315| | 2021-8-26 16:58 | 只看该作者
yjmwxwx 发表于 2021-8-26 16:37
应该都能用,程序代码部分大概6K足够了,26K可以放各种查询表,但是不可能全都放正弦表,还有别的表 ...

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

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

根据这个数据,看能不能再调整一下滤波器的幅频特性曲线,
使得 100Hz 这一档也能正常工作。

使用特权

评论回复
189
yjmwxwx|  楼主 | 2021-8-26 17:53 | 只看该作者
Jack315 发表于 2021-8-26 16:58
估计一下放正弦表的空间有多少?

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

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

使用特权

评论回复
评论
Jack315 2021-8-26 18:10 回复TA
收到 
190
yjmwxwx|  楼主 | 2021-8-26 19:23 | 只看该作者
叶春勇 发表于 2021-8-22 17:50
你只发了一个数据,还要分析数据的稳定性,这是自动量程的基础。
自动量程,大致是个状态机,参考做电梯 ...

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

shangbi_r = 200
shangbi_i = -100
xiabi_r = 20
xiabi_i= 30
shangbi_jiaodu = atan2(shangbi_i,shangbi_r)*180/3.1415927
xiabi_jiaodu = atan2(xiabi_i,xiabi_r)*180/3.1415927
shangbi_z = sqrt(shangbi_r ^ 2 + shangbi_i ^ 2)
xiabi_z = sqrt(xiabi_r ^ 2 + xiabi_i ^ 2)
z = shangbi_z / xiabi_z
z_jiaodu = shangbi_jiaodu - xiabi_jiaodu
z_r = z * cosd(z_jiaodu)
z_i = z * sind(z_jiaodu)


使用特权

评论回复
191
叶春勇| | 2021-8-26 19:58 | 只看该作者
Jack315 发表于 2021-8-26 12:58
审核的帖子还没出来,重新发一下……

F = 56 MHz 是时钟频率。

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

使用特权

评论回复
192
Jack315| | 2021-8-26 20:22 | 只看该作者
叶春勇 发表于 2021-8-26 19:58
他的spwm,分析了程序,如下图:

所以 100Hz 时候,PWM 开关信号就滤不干净了。
要重新设计滤波器,在 PWM 开关信号频率为 1MHz 的时候衰减 40dB 以上。
PWM 开关信号频率要设置成不小于 1MHz 。

使用特权

评论回复
193
叶春勇| | 2021-8-26 21:01 | 只看该作者
yjmwxwx 发表于 2021-8-26 19:23
我那复数除法容易溢出而且还只保留4位,下午想了想别的方式计算,不知道行不行

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

void cdiv(int32_t *a,int32_t *b,int32_t *result)
{
    int64_t D=(int64_t)b[0]*(int64_t)b[0]+(int64_t)b[1]*(int64_t)b[1];
    int64_t N0=(int64_t)a[0]*(int64_t)b[0]+(int64_t)a[1]*(int64_t)b[1];
    int64_t N1=(int64_t)a[1]*(int64_t)b[0]-(int64_t)a[0]*(int64_t)b[1];
    result[0]=N0*1000/D;
    result[1]=N1*1000/D;
    printf("%I64d,%I64d,%I64d\n",N0,N1,D);

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

    return 0;
}
方法2:你给出的方法复数的指数形式,后来没折腾了,用c数学库解决了。主要是我用了沃尔什变换,比dft快很多,节省了时间。
有√(a^2+b^2),这个a^2+b^2也是要考虑溢出的

使用特权

评论回复
194
yjmwxwx|  楼主 | 2021-8-26 21:11 | 只看该作者
叶春勇 发表于 2021-8-26 21:01
方法1:复数相除(a+bi)/(c+di),以前写过测试程序,用64位累加
方法2:你给出的方法复数的指数形式,后来 ...

感觉这方法适合单片机,只需要计算一个整数除法就行了,其他的那些计算都有快速计算的方法,不用算除法。这些程序以后校准程序也用的上。

使用特权

评论回复
195
叶春勇| | 2021-8-26 21:46 | 只看该作者
yjmwxwx 发表于 2021-8-26 21:11
感觉这方法适合单片机,只需要计算一个整数除法就行了,其他的那些计算都有快速计算的方法,不用算除法。 ...

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

使用特权

评论回复
196
yjmwxwx|  楼主 | 2021-8-26 22:08 | 只看该作者
叶春勇 发表于 2021-8-26 21:46
你涨价前,要是买几片stm32f103c8t6就好,那个时候才几块钱。这个单片机能双采。
如果有stm32f103v系列, ...

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


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





使用特权

评论回复
197
yjmwxwx|  楼主 | 2021-8-26 23:06 | 只看该作者
叶春勇 发表于 2021-8-26 21:46
你涨价前,要是买几片stm32f103c8t6就好,那个时候才几块钱。这个单片机能双采。
如果有stm32f103v系列, ...

其实我最早买的就是STM32F103C8T6,大概买了10片,我的两个JINLI OB就是这芯片焊的,我这现在还有几片STM32F100C8T6,103C8T6可能也能找出片来,但是没转接板数量少不值得玩,稍不注意烧了没代替的。

使用特权

评论回复
198
叶春勇| | 2021-8-26 23:12 | 只看该作者
yjmwxwx 发表于 2021-8-26 23:06
其实我最早买的就是STM32F103C8T6,大概买了10片,我的两个JINLI OB就是这芯片焊的,我这现在还有几片STM ...

开源的daplink弄了没,这个据说不错

使用特权

评论回复
199
yjmwxwx|  楼主 | 2021-8-26 23:56 | 只看该作者
叶春勇 发表于 2021-8-26 23:12
开源的daplink弄了没,这个据说不错

没做过那个

使用特权

评论回复
200
叶春勇| | 2021-8-27 09:45 | 只看该作者

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

使用特权

评论回复
发新帖 本帖赏金 59.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则