当前位置: 首页 > ds >正文

基于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原理图、程序(含注释)、元件清单等。具体内容如下,全网最全! !

操作演示请观看前面演示视频!

点赞分享一起学习成长。

http://www.xdnf.cn/news/4913.html

相关文章:

  • HarmonyOS-hdc远程网络方式连接设备
  • PVP鼠标推荐(deepseek)
  • leetcode 242. Valid Anagram
  • 技术视界 | 青龙机器人训练地形详解(三):复杂地形精讲之台阶
  • cpp自学 day24(STL初步认识)
  • 73页最佳实践PPT《DeepSeek自学手册-从理论模型训练到实践模型应用》
  • 自研MCU芯片闪存驱动的实现:OpenOCD详细过程记录与操作指南
  • 2.1 点云数据存储格式——引言
  • 正则表达式实用指南:原理、场景、优化与引擎对比
  • 【LangChain基础系列】深入全面掌握文本加载器
  • PH热榜 | 2025-05-08
  • 安防多协议接入/视频汇聚平台EasyCVR助力工地/工程/建筑施工领域搭建视频远程监控系统
  • [git]如何关联本地分支和远程分支
  • 网络安全赛题解析
  • SEMI E40-0200 STANDARD FOR PROCESSING MANAGEMENT(加工管理标准)-(三)完结
  • 用于构建安全AI代理的开源防护系统
  • Java 基础知识点——数组相关
  • 使用Mathematica内置函数绘制Sierpinski地毯
  • rce-labs level 3,4,5
  • 3.2.3 掌握RDD转换算子 - 5. 合并算子 - union()
  • 飞云分仓操盘副图指标操作技术图文分解
  • 平板收银系统、国产系统,鸿蒙系统,小键盘的封装与应用—仙盟创梦IDE
  • 基于FPGA控制PCF8591开展ADC采样,以采样烟雾模块输出模拟电压为例(IIC通信)
  • OpenTelemetry 介绍
  • neo4j官方示例
  • 汽车为什么需要以太网?带宽?实时?
  • stable diffusion的attention-map:提取和可视化跨注意力图
  • CLR是什么
  • 【Linux网络】Socket-UDP相关函数
  • 一天学会Maven