要求:同时采样电机A,B两相绕组电流值,在ADC中断中将采样得到的电流值保存在currentA,currentB两个数组中。然后进行中值平均滤波,数据保存至current_A,current_B两个变量中。
参考资料:DSPIC33FJ32MC204芯片数据手册
注1:想要采样绕组电流的前提肯定是电机运行,所以我们需要先编写好步进电机驱动运行的程序。步进电机(含状态机)驱动运行,可以参考我之前的一篇文章,按键按下启动电机,再次按下停止电机。
这时我们ADC转换触发信号源不选择定时器3,而是选择MPWM间隔结束触发ADC转换。
注2:ADC在转换完成时,ADC模块会将转换结果写入模数转换结果缓冲区。ADC结果缓冲区为16字(1字=2字节=16位)的阵列,通过SFR空间进行访问。在缓冲区填满时产生中断。ADC模块支持16个结果缓冲区(ADC1BUF0~ADC1BUFF)。也就是说我们可以在ADC中断中读取缓冲区中的结果。
硬件思路:首先明确ADC采样引脚,从图中可知与绕组电流有关的引脚为IMOTOR1,IMOTOR2也就是AN0,AN1
SHUNT_1和SHUNT_2采样得到A,B下半桥臂下半管的电压值,经过电压抬升电路得到IMOTOR1(AN0)和IMOTOR2 (AN1)
也就是说AN0和AN1采样得到的是IMOTOR1和IMOTOR2处的电压值。将电压值储存到IMOTOR1[10]和IMOTOR2[10]数组中。然后根据GainADC反推出采样电流值(SHUNT),最后将电流值储存至currentA,currentB两个数组中。
程序编写思路:首先查看芯片手册中AN0和AN1属于ADC采样通道中的哪个通道内?
芯片手册ADC框图:
可以从图中得到AN0,AN1都被CH0通道控制,同时AN0可以由CH1通道控制,AN1可以由CH2通道控制。
这个时候我们有两种简单的选择方法:
一种是AN0和AN1都由CH0通道单独控制,如果由CH0单通道控制,那么可以采用通道扫描的方法对AN1和AN0进行转换。
通道扫描:
使用CH0扫描4个模拟输入(举例用):
另外一种是由AN0和AN1交替输入选择控制,dspic33f提供MUXA和MUXB两个多路开关完成交替输入选择控制。然后进一步选择顺序采样或者同时采样。
注3:顺序采样和同时采样的不同之处在于采样维持时间。
同时采样:
顺序采样: