模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762
44---有刷直流马达速度位置控制实验:
硬件需求:PC机,PCM模块一个,microUSB线,L298N_电机驱动模块,12V/1A直流
电源,有刷直流电机1个,导线若干;
软件需求:PCM编译软件,app软件NeTorch TCP & UDP;
供电方式:12V电源供电给电机驱动模块,电机驱动模块输出的5V给PCM模块供 电;
连接电路:如图67
图67 有刷直流马达速度位置控制实验电路
图68 正交旋转编码器波形图
PCM模块有4个有刷直流马达控制通道,分别为马达1(A0,B0),马达2(A1,
B1),马达3(A2,B2),马达4(A3,B3). L298N_电机驱动模块可以同时驱动2个
马达。本实验使用A0,B0控制1个马达。
本实验使用的是一个小型直流减速马达,减速比为1:20.41。马达接了一个正交旋转
编码器,11线,即旋转一圈有11个脉冲输出,所以马达输出轴转一周就是
11*20.41=224.51个脉冲。
编码器有AB相输出,输出波形如图68所示。AB波形都是50%占空比的脉冲波形,2
个波形相位相差90度。利用这个特性,我们这样来判断正反向:当A相波形在上升沿
时,判断B相波形电平,如果为低电平,表示正转;如果为高电平,表示反转。
根据正交旋转编码器的这个特性,电路上,我们把A相接模块SIG0引脚,B相接模
块CTR0引脚。使用脉冲计数指令的运行模式4,如下表2:当SIG0出现上升沿,且CTR0
为低电平时,脉冲计数加1;当SIG0出现上升沿,且CTR0为高电平时,脉冲计数减1;
所以计数值就代表了马达当前的位置。
运行模式 |
ctr=0 |
ctr=1 |
||
上升沿 |
下降沿 |
上升沿 |
下降沿 |
|
4 |
+ |
N |
- |
N |
表2 脉冲计数运行模式4
编程思路:
设置脉冲计数的最大值中断,值为30000个脉冲,即脉冲正方向计数达到30000个
脉冲时会执行中断程序;设置脉冲计数的最小值中断,值为-30000个脉冲,即脉冲反方
向计数达到30000个脉冲时会执行中断程序;在中断程序中判断是最大值中断还是最小
值中断,并使用一个寄存器作为累加计数。
设置马达的PWM频率为10Khz.设置好PID的Kp,Ki,Kd值,此值要根据实际情况调
试。
使用一个定时器,设置为周期性定时,定时周期为0.001秒。在定时中断程序中读
取脉冲计数值,用此值减去上一个周期读取的脉冲值,差值就是一个周期马达移动的位
置,然后再除以周期值0.001秒,就是马达运行的速度。马达的运行位置及速度都有了,
使用2个pid指令,分别控制位置及速度就可以实现马达的位置及速度的闭环控制。
图69为手机端APP网络调试助手截图,采用HEX模式发送数据,数据的发送方式
是:速度,位置,速度,位置。。。;图示发送的是01 14 02 00 03 28 04 00共8个字
节,第一个字节01表示速度是1圈每秒,第二个字节14表示马达要转到第20圈,第3个字
节02表示速度是2圈每秒,第4个字节00表示马达要转到原点位置,第5个字节03表示速
度是3圈每秒,第6个字节28表示马达要转到第40圈位置,第7个字节04表示速度是4圈每
秒,第8个字节00表示马达又转回到原点位置,
实验程序如下:
1 intpro int1 //定时器中断程序,定时周期0.001秒
2 pcntread