可控步进电机程序设计说明
1 工程文件下载:
2 程序工作过程设计
本程序采用的励磁方式是一相励磁,励磁表在程序中为0111、1011、1101、1110,程序连续不停地在不同口送入脉冲信号,即可使步进电机旋转,通过设定定时器的定时时间减慢步进电机的旋转速度。
实现解释:通过在P4.1、P4.2、P4.3、P4.4口每隔5ms*sudu的时间输入高电平(sudu值由Key1键进行确定,并在数码管最右端显示,分别为1-12这12个档位,数值越大,转速越慢),并结合Key2键确认旋转方向(按下按键则按相反方向进行旋转),再结合Key3键控制步进电机旋转还是停止

图1 28BYJ-48步进电机工作程序设计流程图
3 程序相关使用到的寄存器说明
3.1定时器0和1相关寄存器设置
AUXR= 0X00 //定时器0和定时器1 时钟1T模式
TMOD = 0X00 //设置定时器0和定时器1 16位自动重装模式
TL0 =(65536-250)%256 //设置定时0定时为 250μs
TH0 =(65536-250)/256
TH1 =(65536-5000*sudu)/256 //设置定时1定时为 5ms*sudu
TL1 =(65536-5000*sudu)%256
TCON = 0X50 //定时器0和1开始计时
IE =0x8A //定时器0和1开启中断,CPU开启中断
4 程序设计框架及关键实现说明
4.1 宏定义
#define uint unsigned int //无符号整型变量
#define NMAX_KEY 100 //100次读取按键值(用于按键消抖)
4.2全局变量
uinti=1 //控制步进电机不同IO口脉冲位置
uintKey1_count //周期中检测到Key1按到的次数
uintKey2_count //周期中检测到Key2按到的次数
uintKey3_count //周期中检测到Key3到的次数
uintKey_count //周期中检测到按键按到的总次数
uintsudu=1 //控制控制步进电机的速度
bit Key1_C //key1当前的状态
bit Key1_P //key1前一个状态
bit Key2_C //key2当前的状态
bit Key2_P //key2前一个状态
bit Key3_C=1 //key3当前的状态
bit Key3_P=1 //key3前一个状态
bit flag //标记步进电机转向
4.3函数
voidinit_sys() //系统设备初始化函数
voidTimer0() interrupt 1 //定时按键消抖+控制转向和速度以及位置
voidTimer1() interrupt 3 //定时器1的中断响应函数,控制脉冲频率
5.知识补充
5.1辅助特殊功能寄存器AUXR
该寄存器主要用来定义定时器0和1的运行频率。

5.2 定时器/计数器0/1控制寄存器TCON
TCON主要用于控制定时/计数器0和1的运行,以及是否允许接收与处理外部中断请求。

5.3定时器/计数器工作模式寄存器TMOD
TMOD在本程序中主要用于设置定时/计数器0的工作模式。


5.4定时器0和1的中断允许寄存器IE
IE主要用于控制定时/计数器0、1、外部中断、串行中断总中断是否被允许。


