模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762
60---步进电机运行指定距离实验:
硬件需求:PC机,PCM模块一个,microUSB线,5V/0.5A直流电源,12V/1A直流电
源,42步进电机1个,A4988步进电机驱动器一个,导线若干;
软件需求:PCM编译软件,串口调试助手;
供电方式:12V电源供电给+5V电源,+5V电源输出的5V给PCM模块供电;
连接电路:如图93(步进电机正反转实验)
本实验的硬件电路与步进电机正反转实验一样,此次使用steprundist指令让电机正
转3200个脉冲,即正转一圈,然后反转3200个脉冲,即反转一圈。在电机的运行过程
中,每秒显示一次电机的速度及运行距离。运行停止后显示总的运行距离。
实验程序如下:
1 intpro int0 //马达停止中断程序
2 stepgetdist 0 d3 //获取通道0马达运行的距离,保存到D3,单位脉冲数
3 prints "step moto stoped\r\n" //输出马达停止的信息
4 prints "total distance is %d pulses\r\n" d3 //打印马达运行的距离
5 mov 0 d0 //清零D0,
6 endint
7 subpro sub1 //子程序
8 mov 1 d0 //D0=1
9 while d0 //循环
10 stepgetspeed 0 f0 //获取通道0马达速度,单位弧度每秒
11 stepgetdist 0 d3 //获取通道0马达运行的距离,保存到D3,单位脉冲数
12 prints "speed is %f rad/s\r\n" f0 //打印马达运行的速度
13 prints "distance is %d pulse\r\n" d3 //打印马达运行的距离
14 delay 1000 //延时1S
15 endwhile
16 endsub
17 main
18 intinit s0 int0 //初始化马达停止中断
//步进马达初始化0通道,电机转一圈3200个脉冲,步进马达运行停止后会置位Sn
19 stepinit 0 3200 s0
//启动通道0步进电机,3200表示正转3200个脉冲,加减速时间都是1S,
//最大速度1.5弧度每秒,F10保存马达运行3200个脉冲需要的时间,单位S;
20 steprundist 0 3200 1 1.5 f10
21 prints "total run time is %fs\r\n" f10 //打印运行总时间
22 call sub1 //调用子程序
//启动通道0步进电机,-3200表示反转3200个脉冲,加减速时间都是1S,
//最大速度1.5弧度每秒,F10保存马达运行3200个脉冲需要的时间,单位S;
23 steprundist 0 -3200 1 1.5 f10
24 prints "total run time is %fs\r\n" f10 //打印运行总时间
25 call sub1 //调用子程序
26 endmain
程序第1-6行为步进马达停止中断程序,当马达运行停止时会执行此程序,在程序
中,先读取马达运行的距离,通过串口输出显示,然后清零D0寄存器;
第7-16行,为速度,位移显示子程序,当D0不为0,表示马达在运行,每秒显示一
次速度与位移;
第17-26行为主程序,主程序中使用steprundist指令让步进马达运行指定距离,当马
达到达指定距离后,马达会自动停止运行;
下图95为串口输出信息,可以看出当马达运行停止时,马达移动的距离为3200个脉
冲。
图95 步进电机运行指定距离实验串口输出