基于51单片机的步进电机控制系统—正/反转、加/减速
基于51单片机的步进电机控制
(仿真+程序+原理图)
功能介绍
具体功能:
1.由ULN2003A驱动步进电机;
2.LCD12864显示状态;
3.按键控制功能有正/反转、加/减速、停止;
演示视频:
基于51单片机的步进电机控制系统—正/反转、加/减速
添加图片注释,不超过 140 字(可选)
程序
/************************************************************
*实例名称:步进电机
*实例说明:实现步进电机的正反转以及加减速控制,并在LCD屏上实时显示步进电机的状态/***微信公众号:木子单片机****
************************************************************/
#include "target.h"
#include "key.h"/**************调节MOTER_SPEED_NORMAL 5的大小就可改变速度********/#define MOTER_SPEED_NORMAL 5 //电机正常运行上限
#define MOTER_SPEED_MIN 25 //电机低速运行下限
uchar timer0Count; //timer0中断溢出计数
uchar moterStep; //电机步数 (0x00~0x07)
uint moterSpeed; //速度值变化量 (0~moterSpeedMax)
uint moterSpeedMax; //速度最快值
uchar moterState; //电机运行状态
uchar moterDirect; //电机运转方向,静止/0x00;正转/0x01;反转/0x02
uchar moterAddReduce; //电机加速及减速量
uchar speedDirect; //0x01,电机加速;0x02,电机减速
bit display_is_ok; //显示屏是否需要更新
/**********************************************************
MOTER_STOP,停止;MOTER_FRONT_ADD,正转加速
MOTER_FRONT_REDUCE,正转减速;MOTER_FRONT_NORMAL,正转正常
MOTER_FRONT_LOWER,正转低速;MOTER_QUEEN_ADD,反转加速
MOTER_QUEEN_REDUCE,反转减速,MOTER_QUEEN_NOMAL,反转正常
MOTER_QUEEN_LOWER,反转低速
***********************************************************/
void main()
{uchar keyValueRead;target_init();moterState=MOTER_STOP;timer0Count=0x00;moterAddReduce=0x00;moterStep=0x00;moterSpeed=0x00; moterSpeedMax=0x00; //默认停止moterDirect=0x00; //默认停止moter_state_display(MOTER_STOP);display_is_ok=1;sei();while(1){keyValueRead=get_key_value();switch(keyValueRead){case KEY_FRONT: //正转{moterState=MOTER_FRONT_LOWER;moterDirect=0x01;moterSpeedMax=MOTER_SPEED_MIN;display_is_ok=0;//moter_state_display(MOTER_FRONT_LOWER);break; }case KEY_QUEEN: //反转{moterState=MOTER_QUEEN_LOWER;moterDirect=0x02;moterSpeedMax=MOTER_SPEED_MIN;display_is_ok=0;//moter_state_display(MOTER_QUEEN_LOWER);break;}case KEY_ADD: //加速{speedDirect=0x01;***//完整资料**//***微信公众号:木子单片机**** /**************调节moterAddReduce=10的大小就可改变速度********/moterAddReduce=5;display_is_ok=0;if(moterDirect==0x01) //正转moter_state_display(MOTER_FRONT_ADD);else if(moterDirect==0x02)moter_state_display(MOTER_QUEEN_ADD);break;}case KEY_REDUCE: //减速{speedDirect=0x02;moterAddReduce=100;display_is_ok=0;if(moterDirect==0x01) //正转moter_state_display(MOTER_FRONT_REDUCE);else if(moterDirect==0x02)moter_state_display(MOTER_QUEEN_REDUCE);break;}case KEY_STOP: //停止{moterState=MOTER_STOP;moterSpeedMax=0x00; //默认停止moterDirect=0x00; //默认停止moter_state_display(MOTER_STOP);display_is_ok=1;break;}default:break;}if(display_is_ok==0) //判断LCD内容是否需要更新{switch(moterSpeedMax){case MOTER_SPEED_NORMAL:{if(moterDirect==0x01)moter_state_display(MOTER_FRONT_NORMAL);else if(moterDirect==0x02)moter_state_display(MOTER_QUEEN_NOMAL);display_is_ok=1;break;}case MOTER_SPEED_MIN:{if(moterDirect==0x01)moter_state_display(MOTER_FRONT_LOWER);else if(moterDirect==0x02)moter_state_display(MOTER_QUEEN_LOWER);display_is_ok=1;break;}default:break;}}}
}
void timer0_overflow(void) interrupt 1 //timer0定时10ms
{TH0=0xEE; //定时10msTL0=0x00;if(timer0Count<moterAddReduce) //是否中断100次,moterAddReduce在加速减速处赋值timer0Count++;else{timer0Count=0x00;if(speedDirect==0x01) //如果为加速{if(moterSpeedMax>MOTER_SPEED_NORMAL)moterSpeedMax--; //最大加速到正常值else{moterAddReduce=0x00;speedDirect=0x00; //已经加速到正常值,不再加速}}else if(speedDirect==0x02){if(moterSpeedMax<MOTER_SPEED_MIN)moterSpeedMax++;else{moterAddReduce=0x00;speedDirect=0x00;}}}if(moterSpeed<moterSpeedMax)moterSpeed++;else{moterSpeed=0x00;if(moterDirect==0x01) //正转{if(moterStep>0x00)moterStep--;elsemoterStep=0x07;}else if(moterDirect==0x02) //反转{if(moterStep<0x07)moterStep++;elsemoterStep=0x00;}ground(moterStep);}}
硬件设计
使用元器件:
单片机:STC89C52;
(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)
液晶显示屏:LCD12864;
步进电机;晶振:12M;
排阻:10K;电位器:10K;
电机驱动芯片:ULN2003A;
电容:33P;按键;
导线:若干;
添加图片注释,不超过 140 字(可选)
设计资料
01仿真图
本设计使用Proteus7.8和Proteus8.9两个版本设计!具体如图!
添加图片注释,不超过 140 字(可选)
02原理图
本系统原理图采用Altium Designer19设计,具体如图!
添加图片注释,不超过 140 字(可选)
03程序
本设计使用Keil5版本编程设计!具体如图!
添加图片注释,不超过 140 字(可选)
04设计资料
资料获取请看前面演示视频,全部资料包括仿真源文件 、AD原理图、程序(含注释)、元件清单等。具体内容如下,全网最全! !
操作演示请观看前面演示视频!
点赞分享一起学习成长。