news 2026/6/17 5:49:08

基于51单片机的步进电机控制系统—正/反转、加/减速

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于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; //定时10ms TL0=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--; else moterStep=0x07; } else if(moterDirect==0x02) //反转 { if(moterStep<0x07) moterStep++; else moterStep=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原理图、程序(含注释)、元件清单等。具体内容如下,全网最全! !

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

点赞分享一起学习成长。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/17 5:42:59

WEB应用技术第六次作业

一、复现上课的案例&#xff1a; springboot的请求和响应 &#xff08;一&#xff09;请求 1.接收简单参数 定义simpleParam接口方法&#xff0c;形参请求参数名 GetMapping只接收GET请求&#xff0c;在GET请求Params标签里填写请求参数并赋值 RequestMapping可以接收各种…

作者头像 李华
网站建设 2026/6/17 5:41:05

从 0 到 1 入门 Web 渗透测试 学习复盘精简总结

一、开篇第一课&#xff1a;守住渗透测试不可逾越的合规红线绝大多数网络安全新手入门时&#xff0c;最先忽略却最为关键的准则&#xff0c;便是渗透测试的合法性边界。课程开篇就明确了行业标准定义&#xff1a;渗透测试是在取得完整书面授权后&#xff0c;站在攻击者视角模拟…

作者头像 李华
网站建设 2026/6/17 5:20:10

Actor-Critic原理与实战:从Pong到工业AI的闭环决策系统

1. 项目概述&#xff1a;从“拍球”到“会思考的乒乓手”——为什么Actor-Critic不是又一个强化学习名词&#xff1f;你有没有试过教一个完全没打过乒乓球的人上手&#xff1f;一开始他连球拍都握不稳&#xff0c;发球不是下网就是出界&#xff1b;你站在旁边&#xff0c;一边喊…

作者头像 李华
网站建设 2026/6/17 5:17:59

GEO 生成式引擎优化 —— 抢占 AI 问答流量,开启搜索运营新赛道

GEO 生成式引擎优化 —— 抢占 AI 问答流量&#xff0c;开启搜索运营新赛道 随着豆包、文心一言、DeepSeek、Kimi 等 AI 大模型全面普及&#xff0c;用户搜索习惯从传统网页搜索转向 AI 问答交互&#xff0c;传统 SEO 效果持续下滑&#xff0c;GEO 生成式引擎优化成为企业布局…

作者头像 李华
网站建设 2026/6/17 5:07:53

ColdFire V5核心架构解析:双发射超流水线如何实现嵌入式SoC性能跃迁

1. 项目概述&#xff1a;从V4到V5&#xff0c;一次面向SoC的架构跃迁在嵌入式系统设计领域&#xff0c;尤其是网络设备、工业控制和消费电子这些对成本、功耗和实时性都极为敏感的领域&#xff0c;选择一颗合适的处理器核心往往决定了整个项目的成败。Motorola&#xff08;后来…

作者头像 李华
网站建设 2026/6/17 5:03:59

Ubuntu deb包深度解析:结构、状态机与工业级构建实践

1. 项目概述&#xff1a;为什么一个看似普通的“Ubuntu (deb packages)”标题值得深挖成万字干货“Ubuntu (deb packages)”——这六个单词&#xff0c;放在任何Linux技术社区的角落里都像一粒不起眼的米粒&#xff1a;没有炫酷界面&#xff0c;不带AI光环&#xff0c;不提云原…

作者头像 李华