仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
本设计研究的是基于51单片机的步进电机控制系统。采用单片机AT89C51作为控制核心,通过五个按键控制步进电机的运行状态,即控制启停、正反转、加减速,并利用八位的数码管显示步进电机的速度等级。本设计的硬件部分主要由单片机、键盘控制模块、电机驱动模块、数码管显示模块以及电源模块五部分组成。
编程实现方式有两种,查询和中断。全部文件都在附件中上传了。
软件设计部分本控制算法分为查询方式和中断方式两种控制算法。相比于查询方式,中断方式按键响应延时更小。主要的思路是:主函数先初始化相关寄存器后,在while循环中不断执行键盘扫描函数,而步进电机控制函数在调用定时器中断来实现。以下是算法解析:
步进电机采用八拍控制,数码管显示0-9的数字。预先设定对应的16进制数,存入数组。
本设计研究的是基于51单片机的步进电机控制系统。采用单片机AT89C51作为控制核心,通过五个按键控制步进电机的运行状态,即控制启停、正反转、加减速,并利用八位的数码管显示步进电机的速度等级。本设计的硬件部分主要由单片机、键盘控制模块、电机驱动模块、数码管显示模块以及电源模块五部分组成。系统框图如图1所示
本设计主要实现的功能:
(1)5 个按键控制整个电路,对应功能分别是:启动 / 暂停、正转、反转、加速、减速。
(2)数码管显示电机转动速度的等级;
单片机源程序如下:
- uchar cw[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09}; //正转
- uchar acw[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //反转
- uchar a[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //共阳数码管段码
- 声明相关函数
- void Delay_ms(uint x); //延时函数
- void scan_key(); //键盘扫描
- void display(uchar num); //显示函数
- 定时器中断控制函数:index是一个循环系数,每次进入中断,系数自增一,当index到达预设的速度档位,就执行电机控制部分。
-
- void MOTOR_control() interrupt 3 //定时器1中断服务程序
- {
- TH1=(65536-10000)/256;
- TL1=(65526-10000)%256;
- index++;
- if(index >= loop) //循环系数
- {
- index=0;
- if(sw==1)
- {
- step++; //步进值
- if(step>8)
- {
- step=0;
- }
- else
- {
- if(flag==1)
- {
- P2=cw[step-1]; //正转
- }
- else
- {
- P2=acw[step-1]; //反转
- }
- }
- }
- else P2=0x00;}}
复制代码
全部资料51hei下载地址:
项目1.rar
(339.84 KB, 下载次数: 640)
|