软件设计:
时钟频率是12MHz,机器周期是1us,采用定时器T0定时,定时周期设为1000×1us=1ms,此时,T0的初值为T0初值=216-1000=64536=0xFC18。若已知转子齿数为10,步进电机工作于双四拍方式,则步距角=360/(10×4)=9°。Tmd表示步进间隔,nr表示步进电机转速,n0表示计时因数,则:
nr?6096091500 ????Tmd360n0?0.001360n0各档转速对应的计时因数分别如下:
1500 =25rpm,n=60,步进间隔为60×1ms=0.06s;
1档:步进电机的转速nr= 0
n02档:步进间隔为 3档:步进间隔为 4档:步进间隔为 启动档:步进间隔为0.2s。
程序:
预处理(定义变量):定义步进相序变量、速度档位变量以及方向、启停开关变量。
主程序
初始化:P0、P3口输入准备,P1口输出高电平使步进电机的所有相断电;设定外部中断0和外部中断1的触发方式(下降沿触发);开外部中断和定时器0中断;定时器0的模式和初值设置,开定时器0。
循环检测档位信号:
如果P0=0xfe(P0.0=0),设定速度档位变量为1档(n0=60),P2口输出档位信号; 如果P0=0xfd(P0.1=0),设定速度档位变量为2档(n0=90),P2口输出档位信号; 如果P0=0xfb(P0.2=0),设定速度档位变量为3档(n0=120),P2口输出档位信号; 如果P0=0xf7(P0.3=0),设定速度档位变量为4档(n0=150),P2口输出档位信号; 否则,循环检测档位信号。
外部中断0服务程序(启停开关) 启停变量step的值加1; 如果step>=2,step=0。(限定值为0或1)
外部中断1服务程序(正反转开关) 方向变量flag的值加1; 如果flag>=2,flag=0。(限定值为0或1)
定时器0中断服务程序(步进间隔为T0×n0) 重装定时器T0的初值
如果启停变量step=1,则转下一步,否则停止步进电机(计时变量n清0); 如果计时变量n>=档位变量n0,即步进间隔时间到,
如果转向变量flag=0,则根据步进相序变量index的值输出正转相序;否则根据步进相序变量index的值输出反转相序。(注意:index加1,n清0)
在step=1的情况下,每次定时器T0中断,n的值加1。
10
主程序和定时器0中断服务程序的流程图如下:
开 始步进电机初始化:P1口输出高电平使步进电机的所有相断电;系统初始化:P0、P3口输入准备;设定外部中断0和外部中断1的触发方式;开外部中断和定时器0中断;定时器0的模式和初值设置,开定时器0。P0=0xfe(P0.0=0)?否是n0=60;P2=1;//1档P0=0xfd(P0.1=0)?否是n0=90;P2=2;//2档否P0=0xfb(P0.2=0)?是n0=120;P2=3;//3档否P0=0xf7(P0.3=0)?是n0=150;P2=4;//4档结 束主函数流程图
11
项目3 单个步进电机的控制实习
一、实习目的
掌握步进电机的单双节拍控制方法、正反转以及加减速控制方法。
二、实习器材
﹙5﹚ 计算机一台;
﹙6﹚ HC6800E单片机开发板一套(含接线与步进电机)。
三、项目要求
采用HC6800E开发板控制单个步进电机转动,用开发板上M1-M5五个接口中的某一个接口外接一个步进电机,步进电机驱动芯片ULN2003D的输入端口与单片机的P1管脚连接。项目3分为4个子项目,各个子项目的要求如下:
1、绕组为四相八拍工作方式A-AB-B-BC-C-CD-D-DA-A,采用switch语句或相序数组输出各相的状态,查询工作方式。步进电机逆时针旋转(正转),转速为125rpm。
2、绕组为四相双四拍工作方式AB-BC-CD-DA,中断工作方式。步进电机逆时针旋转(正转),转速为125rpm。
3、编程实现让电机正转2圈,而后反转2圈,然后停止,并要求步进电机满足下面两个要求:① 单双八拍方式A-AB-B-BC-C-CD-D-DA;② 正反转时,步进电机的转速为125rpm。
4、编程实现让电机在1圈内加速到625rpm,然后以625rpm的转速匀速转动5圈,接着在1圈内从625rpm减速,然后停止,并要求步进电机满足下面两个要求:① 单双八拍方式A-AB-B-BC-C-CD-D-DA;② 加速、匀速、减速的过程中,步进电机始终向一个方向转动。
将以上4个子项目依次命名为单双八拍控制、双四拍控制、正反转控制、加减速控制。
四、实习方法与步骤
项目3的仿真模型如下:
图3-1 项目3的仿真模型
HC6800E开发板步进电机控制电路的原理见图3-2,接线方法见图3-3。
12
图3-2
图3-3
13
3.1 单双八拍控制实习
项目要求:绕组为四相八拍工作方式A-AB-B-BC-C-CD-D-DA,采用switch语句或相序数组输出各相的状态,查询工作方式。步进电机逆时针旋转(正转),转速为125rpm。 软件原理:
四相八拍工作方式的正转相序为:FFZ[8]={0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xf7,0xf6}。 已知转子齿数为12,步进电机工作于单双八拍方式A-AB-B-BC-C-CD-D-DA,则步距角=360/(12×8)= 3.75 度。
若步进间隔为Tstepms,步进电机的转速为:
60?1000ms3.75?625Vn = ×= rpm ?TstepTstep360Vn =125rpm,Tstep=5ms
时钟频率是11.0592MHz,设定定时周期为5ms,T0工作于方式1即16位定时器方式,则
1T0初值为:5ms/(12×11.0592)=4608,T0初值=216-4608=60928=EE00H MHz程序思想:
预处理:定义步进相序变量MotorStep、计时查询变量TIM。 主程序
步进电机初始化:P1口输出高电平使步进电机的所有相断电;
系统初始化:定时器0的模式和初值设置,开定时器0中断,开定时器0。 循环检测计时查询变量TIM:
如果TIM=1,则根据步进相序变量MotorStep的值输出步进电机相序; 调整MotorStep的值;
否则,循环检测计时查询变量TIM。 定时器0中断服务程序 重装定时器T0的初值; 计时查询变量TIM置1。
思考题:
① 改为中断工作方式应该如何编写程序?
② 如何使步进电机顺时针旋转(反转)?
③ 试画出主程序的程序流程图。
④ 如何将步进电机设为四相四拍工作方式AB-BC-CD-DA?
14