打印

最近做了个ADC采电压的手工小制作又失败了

[复制链接]
1579|37
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 yjmwxwx 于 2021-3-9 10:14 编辑

我是也业余爱好者小学文化水平喜欢做一些手工小制作,但是什么理论都不懂只会照着别人的电路焊接,最近做了一个旋转变压器的解码板,但是ADC采集的电压跳动太大了,静止不动都跳快20个字,采样率1M采100点取正负峰值相减,128个数据低通平均滤波,这个不能再加了,现在转速只有200转滤波器延迟都50度了,后面PI闭环补偿只能180度以内,不知道电路该怎么改? 现在这个我是没办法了,先放下这个去学学怎么用Z变换计算PID参数,不会用Ziegler-Nichols和Astrom-Hagglund方法。[size=13.3333px]

[size=13.3333px]电路图

Resolver.pdf (71.85 KB)

kicad.zip (716.51 KB)

程序

程序.zip (9.1 KB)

试验台视频,正时灯看旋转的转盘上的刻度,手指头加扰动看出没出现相移。



人生第一次学做PCB板子,但是还没用上,现在还用飞线做的来做试验。




和飞线的对比下




旋转变压器







试验台




角度采样率10K,静止状态采集512个数据,结果除100,跳动很大0.2度还多



不知道哪里来个干扰,512点计算下FFT,采样率10K




怎么有好几个峰








[size=13.3333px]

[size=13.3333px]

[size=13.3333px]

[size=13.3333px]





使用特权

评论回复

相关帖子

沙发
叶春勇| | 2021-3-9 20:46 | 只看该作者
看过你的帖子,10k激励,两个正交绕组接收信号。这个倒是可以用滑动离散傅里叶变换,把两个绕组的10k频率信号提取出来,跟锁相放大类似,其他频率的信号你不关心

使用特权

评论回复
板凳
yjmwxwx|  楼主 | 2021-3-9 21:18 | 只看该作者
本帖最后由 yjmwxwx 于 2021-3-9 21:21 编辑
叶春勇 发表于 2021-3-9 20:46
看过你的帖子,10k激励,两个正交绕组接收信号。这个倒是可以用滑动离散傅里叶变换,把两个绕组的10k频率信 ...

现在这个没用 DFT,只是用1M采样率采10K信号,正弦表100点同步触发采100点ADC值,取相差180度的两个点相减结果就是COS或者SIN,再用10K频率采集这两个值得到角度,前面的同步触发等于采直流,后面的随着转速变化频率也变化,转速越高滤波器造成延迟越大,COS和SIN用ATAN2计算后的角度和滤波器前面的角度相减算出角度差,把角度差进PI调节器结果计算出COS和SIN,再把这两个返回到滤波器前面旋转角度实现补偿。

现在就是不懂自动控制不知道怎么分析和计算,正想学学

使用特权

评论回复
地板
叶春勇| | 2021-3-9 21:53 | 只看该作者
本帖最后由 叶春勇 于 2021-3-9 21:57 编辑
yjmwxwx 发表于 2021-3-9 21:18
现在这个没用 DFT,只是用1M采样率采10K信号,正弦表100点同步触发采100点ADC值,取相差180度的两个点相减 ...

我觉得没必要呀,角度信息,在sin和cos的两个幅度上。
用滑动傅里叶直接提取幅度,代码很短的。这是窄带信号。
要不你软件同步检波,把adc采集的值,和你的正弦波表中的数值,对齐乘一遍,滤波。
滑动傅里叶,翻一下highgear的傅里叶变换揭秘,讲了一点

使用特权

评论回复
5
yjmwxwx|  楼主 | 2021-3-9 22:38 | 只看该作者
叶春勇 发表于 2021-3-9 21:53
我觉得没必要呀,角度信息,在sin和cos的两个幅度上。
用滑动傅里叶直接提取幅度,代码很短的。这是窄带信 ...

现在就是同步检波采集两组正负180度相减得到正交COS和SIN,采正负180度相减得到的COS和SIN范围-4096到4096,只是没和正弦表相乘,0.1毫秒进一次中断更新角度,计算太多速度跟不上,现在计算滤波器的两个128次累加就用掉快一半的时间,还要计算角度和补偿,不转静止的时候当然不需要补偿,转起来就不一样了,转速越高相移越大,不补偿不行,补偿要快和准确才能应付高速扰动,感觉这东西难点就在这里,所以不懂自动控制搞不下去了。

使用特权

评论回复
6
叶春勇| | 2021-3-9 22:59 | 只看该作者
yjmwxwx 发表于 2021-3-9 22:38
现在就是同步检波采集两组正负180度相减得到正交COS和SIN,采正负180度相减得到的COS和SIN范围-4096到409 ...

滑动傅里叶是迭代运算的,就两行代码,单片机来得及,不用滤波

使用特权

评论回复
7
yjmwxwx|  楼主 | 2021-3-9 23:43 | 只看该作者
本帖最后由 yjmwxwx 于 2021-3-9 23:49 编辑
叶春勇 发表于 2021-3-9 22:59
滑动傅里叶是迭代运算的,就两行代码,单片机来得及,不用滤波

以前做别的东西用过DFT,数据出来还是不稳还要加平均滤波,100次相乘累加用C语言写肯定超0.1毫秒。ADC1M采样率采100点,计算时候ADC采样不能停,现在这样可能最高只能500转以下,速度再快只能牺牲角度位数换速度了,看专用芯片和软件解决方案也是要补偿相位,我不怎么懂C语言不知道别人库怎么实现的。这单片机速度慢只有56MHZ,以前写的程序只和以前采样数据做256次累加都超0.1毫秒,中断都出不来,后来空间换时间不用判断跳转计算累加才把时间降下来。数据波动大感觉主要硬件问题,首先是虚地,还模拟地和数字地在一块,我这没有轨至轨运放,只有这两个型号的,只能用现有零件搭个电路才能学怎么控制,这个闭环如果能学会了以后学电机控制估计就容易了。

使用特权

评论回复
8
yjmwxwx|  楼主 | 2021-3-10 09:07 | 只看该作者
叶春勇 发表于 2021-3-9 22:59
滑动傅里叶是迭代运算的,就两行代码,单片机来得及,不用滤波

你提供的这个方法不错,按照你的方法写了个DFT程序,执行时间0.05毫秒,才用一半时间,可以满足要求,还能再优化下速度。
程序
dft.zip (8.98 KB)





使用特权

评论回复
9
yjmwxwx|  楼主 | 2021-3-10 09:42 | 只看该作者
yjmwxwx 发表于 2021-3-10 09:07
你提供的这个方法不错,按照你的方法写了个DFT程序,执行时间0.05毫秒,才用一半时间,可以满足要求,还 ...

为什么波形这样,因为采样率1M采10K信号,采样100点一个点就是10K,所以没滤掉低频,等改成100K采样率,信号的10倍应该就可以了,等下地打农药物回来再改。

使用特权

评论回复
10
叶春勇| | 2021-3-10 13:13 | 只看该作者
yjmwxwx 发表于 2021-3-10 09:42
为什么波形这样,因为采样率1M采10K信号,采样100点一个点就是10K,所以没滤掉低频,等改成100K采样率,信 ...

兄弟,今年下决心,把c语言学了。
汇编语言,以前学**,钻研过,但是汇编语言不是现在的主流语言。
你发出来的代码,没人可以交流,人的提高是要交流的。别被论坛里的夸奖给蒙蔽了,年轻的时候爬坡才是关键。汇编的库也很少,各个都要自己实现,会很累。c语言不算高级语言,是中级语言。
软件里还有很多很多东西值得学习。

使用特权

评论回复
11
yjmwxwx|  楼主 | 2021-3-10 14:48 | 只看该作者
DFT方案失败,因为要采集两个通道,等于一个通道500K采集10K的50点。而且ADC采集的是半个周期的正电压信号,另外半个是0,要采集完整的还要抬高电压,抬高电压ADC范围还少了一半

使用特权

评论回复
12
yjmwxwx|  楼主 | 2021-3-10 15:10 | 只看该作者
叶春勇 发表于 2021-3-10 13:13
兄弟,今年下决心,把c语言学了。
汇编语言,以前学**,钻研过,但是汇编语言不是现在的主流语言。
你发 ...

C语言我也会点,十年前学51的时候就是学的C语言,只是学了没怎么用就做过个数码管时钟,现在感觉语言不是问题,关键是算法不知道怎么搞。我用汇编写程序夸奖我的人很少,从好几年前就一片反对的声音,特别是R2D2,马甲被封好几个还坚定的反对,我写的汇编也很差,因为也没什么参照的例子可以学,只能自己摸索着胡乱写。
要调用库的话汇编和C语言是一样的,只是我喜欢所有程序都自己写不愿意用别人的程序,感觉用别人的东西没什么兴趣玩,只是汇编不容易阅读,所以没办法交流,我都是自己看书然后试验,我这等于闭门造车,有好处也有坏处,好处对别人没依赖,遇到问题能自己解决,坏处要不断试错,从一次次失败学东西。感觉交流也很浪费时间,昨天一天今天又快一天光交流了,什么也没干。
搞软件最后就是搞数学,但是我数学只有小学水平,太高级的东西搞不了,只能先用到什么学什么

使用特权

评论回复
13
yjmwxwx|  楼主 | 2021-3-10 15:29 | 只看该作者
本帖最后由 yjmwxwx 于 2021-3-10 15:35 编辑
叶春勇 发表于 2021-3-10 13:13
兄弟,今年下决心,把c语言学了。
汇编语言,以前学**,钻研过,但是汇编语言不是现在的主流语言。
你发 ...

信号采集这个先放下,现在想学学自动控制,网上找了个网络课程和一本书,以前也找过书但是太深看不懂,于是找了简单点的,帮忙看看行不行。

https://apmonitor.com/pdc/index.php
https://apm.byu.edu/prism/index.php/Site/OnlineCourses

[Tim_Wescott]_Applied_Control_Theory_for_Embedded_(z-lib.org).pdf (4.12 MB)



使用特权

评论回复
14
叶春勇| | 2021-3-10 16:55 | 只看该作者
yjmwxwx 发表于 2021-3-10 15:29
信号采集这个先放下,现在想学学自动控制,网上找了个网络课程和一本书,以前也找过书但是太深看不懂,于 ...

我以前在电厂做仪表专责,经常要整定pid,那时也是不懂,折腾几次就会了。
电子方面的pid,要深一些,自己写代码。

使用特权

评论回复
15
叶春勇| | 2021-3-10 16:58 | 只看该作者
yjmwxwx 发表于 2021-3-10 14:48
DFT方案失败,因为要采集两个通道,等于一个通道500K采集10K的50点。而且ADC采集的是半个周期的正电压信号 ...

你是通过pid去调整,10k的激励的相位吗?

使用特权

评论回复
16
yjmwxwx|  楼主 | 2021-3-10 17:23 | 只看该作者
叶春勇 发表于 2021-3-10 16:58
你是通过pid去调整,10k的激励的相位吗?

不是激励相位,是改变ADC采样后滤波器前面的相位,用来补偿因为转速变化引起的滤波器相移,不知道别人是怎么补偿的,TI有旋转变压器软件解码相关软件库,但是估计不懂原理也看不懂。

使用特权

评论回复
17
叶春勇| | 2021-3-10 18:03 | 只看该作者
yjmwxwx 发表于 2021-3-10 17:23
不是激励相位,是改变ADC采样后滤波器前面的相位,用来补偿因为转速变化引起的滤波器相移,不知道别人是 ...

看来还挺复杂,电机控制,我只会用绝对型编码器(格雷码输出)和相对型编码器,旋转变压器没见人用过

使用特权

评论回复
18
yjmwxwx|  楼主 | 2021-3-10 19:04 | 只看该作者
本帖最后由 yjmwxwx 于 2021-3-10 19:07 编辑
叶春勇 发表于 2021-3-10 18:03
看来还挺复杂,电机控制,我只会用绝对型编码器(格雷码输出)和相对型编码器,旋转变压器没见人用过 ...

我也是网上看别的网友说于是才想做做试试,我也不知道用在哪里的,也没见过实物,只是以前看过一个30多年前的科普片有介绍这种传感器的原理,可见这种传感器非常老,可能现在被光电的淘汰了吧。

TI介绍他的硬件解码和软件解码的产品,但是没具体介绍应该怎么自己做,这网站网址被屏蔽了
http://training.**/TI/show/course/4036




30多年前科普电影就有介绍原理




使用特权

评论回复
19
叶春勇| | 2021-3-16 11:43 | 只看该作者
本帖最后由 叶春勇 于 2021-3-16 11:53 编辑
yjmwxwx 发表于 2021-3-10 17:23
不是激励相位,是改变ADC采样后滤波器前面的相位,用来补偿因为转速变化引起的滤波器相移,不知道别人是 ...

今天看了你的滤波代码,怎么那么长。
移动平均,V=当前adc 加上 上一次原256个相加 减去 256个之前读的adc。看错了,我还以为你是移动平均呢。原来是fir滤波器/

使用特权

评论回复
20
yjmwxwx|  楼主 | 2021-3-16 14:27 | 只看该作者
叶春勇 发表于 2021-3-16 11:43
今天看了你的滤波代码,怎么那么长。
移动平均,V=当前adc 加上 上一次原256个相加 减去 256个之前读的adc ...

是用的移动平均,FIR那个试了下发现相位抖动就没用,我写的移动平均程序好像比较笨,老实的做了256次加法没循环,我不知道别人怎么写的这个程序,你这个方法只做一次256个相加就可以了么?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

117

主题

2693

帖子

45

粉丝