STM32F334的ADC使用数组个数不对

2019-07-14 14:39发布

如图,这是最近做的全桥移相的一个实验板,只包含了控制和驱动还有功率管,主控是F334。比较业余板子做的不怎么样,勿喷。
前段时间开始写程序,先是遇到HRtiM的问题,后来摸索10来天,问题基本搞定,已经上电试过,没发现问题。现在开始写PID算法,算法写出个框架了,可是在写ADC采样程序的时候遇到了出乎意料的问题。
问题是这样的,
1、我想在每个周期的上升沿进行电流采样,每个周期的下降沿停止采样,来计算每个周期的有功功率和一些其它参数。由tim3更新事件来触发ADC转换,然后用中断(中断可以是来自HRTIM或者外部PWM的周期上下沿中断)来开启和关断TIM3。ADC的数值由ADC的中断读入到数组。由于在实际应用中频率是变化的,所以没办法使用DMA来确定每个周期需要采集的点数。其实用不用DMA都无所谓,主要是遇到一下问题。
TIM3的时钟是72M,周期为72,由它来驱动ADC,采样率应该是1M,当对40KHZ进行采样的时候,周期25us,所以对应的AD采样点也应是25个点才对,但是我的数组出来的个数是乱七八糟的,有时候多有时候少,更改TIM3的周期寄存器,也就是更改触发的速度,数组里的采样点的数量变化的也不对,反正就是对不上。
2、后来干脆去掉TIM3触发,由PWM上下沿中断直接软件启动和关闭ADC,同时在ADC的中断读取数值,奇怪的是,40K的PWM,总采样时间25us,但是得到的点数才10多个,难道ADC转换速度这么慢?不是能到到5M以上吗?还有就是我把PWM频率提升到65k,心想采样点数肯定变得更少,谁知道采样点数竟然变成24个,崩溃中呀,说白了,这个ADC采样点数和由TIM3触发时差不多,采样速度不受控制,有多有少。

以上就是大概遇到问题,之前用F103的时候就这么干过,就是采样频率没有这么高而已,本以为这次没问题的地方出来这么大问题希望各位同仁帮帮忙

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
林宇宣55
1楼-- · 2019-07-15 17:19
ctwewer 发表于 2019-1-10 14:10
其实你可以设置连续转换模式,无需PWM或TIM触发、DMA传送数据,DMA数据满进入中断。

不能这么着呀,我这个必须是这么触发。如果连续采样的话,要如何知道每一个周期内的电压变化情况呢?
林宇宣55
2楼-- · 2019-07-15 22:43
 精彩回答 2  元偷偷看……
林宇宣55
3楼-- · 2019-07-16 00:44
首次上交流220V测试。运行正常,实时根据输出相位来调节频率。核心程序写的差不多了,还得优化一下。剩下个功率PID,然后就是各种保护模块,人机交互现在只是简单一个频率和功率显示,还有一堆参数输入,串口通信。第一次做这样的项目,进度实在缓慢。
这次的优势在于用一个单片机代替了之前的各种比较器运放,锁相环,PWM芯片,保护电路等等,极大简化电路,估计也就之前的三分之一。控制的灵活性也非常突出,之前在调试模拟电路的时候,各种麻烦,不停的换电容电阻,现在改成敲代码,之前调试完成板子也就几乎报废了。嘿嘿。
在说说缺点,比如这次我只用了F334加一个运放,这样做只能满足低频率,低采样点数,因为我每个周期都采样,所以频率不能超过50K,点数也不能太多,目前保持在100点以内。再多的话或者频率在高的话,就不能每个周期都采样了,采了也处理不过来。但是我这个电源打算做到120K左右,而且也想把精度提高一些,所以我想到了加FPGA+adc,用FPGA做前端运算,F334只做PID算法,这样的话提到100K没有问题。要是F334的主频能到100M以上就完美了。

一周热门 更多>