模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762
61---步进电机按指定时间运行指定距离实验:
硬件需求:PC机,PCM模块一个,microUSB线,5V/0.5A直流电源,12V/1A直流电
源,42步进电机1个,A4988步进电机驱动器一个,导线若干;
软件需求:PCM编译软件,串口调试助手;
供电方式:12V电源供电给+5V电源,+5V电源输出的5V给PCM模块供电;
连接电路:如图93(步进电机正反转实验)
在第60个实验步进电机运行指定距离实验中,使用指令steprundist指令让电机以1.5
弧度每秒的最大速度运行3200个脉冲,如果增大运行速度,电机走3200个脉冲的时间就
会变少,如果减小速度,电机走3200个脉冲的时间就会变大。
如果想让电机走3200个脉冲,并且用7秒时间走完,该如何操作呢?本实验就是介
绍如何使用stepcalspeed指令先计算出,用7秒时间走完3200个脉冲应该运行的最大速
度。
指令stepcalspeed,通过距离,加减速时间,总运行时间,可以计算出马达运行的
最大速度,然后通过指令steprundist就可以让马达在指定的时间运行到指定的位置。
实验程序如下:
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
20 mov 3200 d2 //d2=3200
21 mov 1 f7 //f7=1
22 mov 7 f8 //f8=7
//此指令通过距离D2,加减速时间F7,总运行时间F8,计算出最大速度,保存到F9
23 stepcalspeed 0 d2 f7 f8 f9
24 prints "max speed is %fs\r\n" f9 //打印最大速度
//启动通道0步进电机,d2=3200表示正转3200个脉冲,f7为加减速时间1S,
//f9是最大速度,F10保存马达运行3200个脉冲需要的时间,单位S;
25 steprundist 0 d2 f7 f9 f10
26 prints "total run time is %fs\r\n" f10 //打印运行总时间
27 call sub1 //调用子程序
28 sub 0 d2 d2 //d2=-3200
//启动通道0步进电机,d2=-3200表示反转3200个脉冲,f7为加减速时间1S,
//f9是最大速度,F10保存马达运行3200个脉冲需要的时间,单位S;
29 steprundist 0 d2 f7 f9 f10
30 prints "total run time is %fs\r\n" f10 //打印运行总时间
31 call sub1 //调用子程序
32 endmain
此实验程序与第60个实验不同之处在于,在使用steprundist指令之前,先使用
stepcalspeed指令根据脉冲数,加减速时间,总运行时间,计算出最大速度,然后再使
用steprundist指令时使用此最大速度,这样步进马达就会在指定时间内移动指定的距
离。
下图96为串口输出的信息。
图96 步进电机按指定的时间运行指定距离实验串口输出