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

【开源-Proteus8.9仿真】基于51单片机的四相步进电机控制(ULN2003 + StepMotor + LCD1602)

项目开源链接以及作者信息

参数
VX公众号少年潜行(可关注回复A003步进电机在对应文中获得网盘链接免费开源
Proteus8.9链接:https://pan.baidu.com/s/1kkgFmRBlh268m_ESl83weg 提取码:9bde 复制这段内容后打开百度网盘手机App,操作更方便哦

📖 欢迎交流 如果对你有帮助,希望可以帮我点个赞👍和收藏,谢谢

📖 有问题请于公众号后台回复,博客不常查看

V1.1 (2025_07_05更新)

更新内容

1、在V1.0基础上优化了LCD显示延时,使得LCD的显示更加迅速。
2、如果有问题,大家可以继续提出。大家就不要去下资源绑定里面的内容了,那个不能实时更新。

LCD显示优化

在实际仿真使用的时候LCD刷新会比较慢,使用实物的时候可以用原来的代码,仿真的时候可以把延时注释了,使用下面的函数,开头要加个1ms的延时,因为没有忙检测。

voidLcdWriteCom(uint8_tcom)//写入命令{Lcd1602_Delay1ms(1);LCD1602_E=0;//使能LCD1602_RS=0;//选择发送命令LCD1602_RW=0;//选择写入LCD1602_DATAPINS=com;//放入命令// Lcd1602_Delay1ms(1); //等待数据稳定LCD1602_E=1;//写入时序// Lcd1602_Delay1ms(5); //保持时间LCD1602_E=0;}voidLcdWriteData(uint8_tdat)//写入数据{Lcd1602_Delay1ms(1);LCD1602_E=0;//使能清零LCD1602_RS=1;//选择输入数据LCD1602_RW=0;//选择写入LCD1602_DATAPINS=dat;//写入数据// Lcd1602_Delay1ms(1);LCD1602_E=1;//写入时序// Lcd1602_Delay1ms(5); //保持时间LCD1602_E=0;}

V1.0 基础内容

项目说明

该设计是一个简易的基于51单片机的四相步进电机控制系统,功能说明:

  1. 使用LCD1602实时显示当前的步进电机的转动方式。
  2. 可以通过按键调节步进电机的转动1步进的时间,可以调节正转和反转的。

硬件设计


硬件设计如图,主要使用LCD屏幕展示电机正反转的模式以及步进一步的毫秒数。可以使用按键控制是正转还是反转,可以控制步进一次的时间。

软件设计

按键的扫描在while中实现,界面显示放置在while循环中,使用的晶振是12MHz。使用定时器定时了1ms的时间,然后在定时器中确定每次步进需要的时间,计数值到了后再清零。

#include"reg52.h"#include"step_motor.h"#include"bsp_key.h"#include"LCD1602.h"#include"stdio.h"voidTimer0_Init(void);u8 MotorRunMode=STOP;intStepMs=100;intmain(){u8 keyValue=0;u8 lcdShowBuff[16]={0};EA=0;// 失能全部中断Timer0_Init();KeyInit();LcdInit();sprintf((char*)lcdShowBuff,"Mode : STOP ");LcdShowStr(0,0,lcdShowBuff);sprintf((char*)lcdShowBuff,"StepMs : %4d ",StepMs);LcdShowStr(0,1,lcdShowBuff);EA=1;// 使能全部中断while(1){keyValue=KeyScan(0);if(keyValue==1){MotorRunMode=CW;sprintf((char*)lcdShowBuff,"Mode : CW ");LcdShowStr(0,0,lcdShowBuff);}elseif(keyValue==2){MotorRunMode=CCW;sprintf((char*)lcdShowBuff,"Mode : CCW ");LcdShowStr(0,0,lcdShowBuff);}elseif(keyValue==3){StepMs+=100;if(StepMs>1000)StepMs=1000;sprintf((char*)lcdShowBuff,"StepMs : %4d ",StepMs);LcdShowStr(0,1,lcdShowBuff);}elseif(keyValue==4){StepMs-=100;if(StepMs<0)StepMs=0;sprintf((char*)lcdShowBuff,"StepMs : %4d ",StepMs);LcdShowStr(0,1,lcdShowBuff);}}}voidTimer0_Init(void)//1毫秒@12.000MHz{TMOD&=0xF0;//设置定时器模式TMOD|=0x01;//设置定时器模式TL0=0x18;//设置定时初始值TH0=0xFC;//设置定时初始值TF0=0;//清除TF0标志TR0=1;//定时器0开始计时ET0=1;//使能定时器0}// 1ms定时器中断voidTimer0()interrupt1{staticintcounts=0;TL0=0x18;//设置定时0初始值TH0=0xFC;//设置定时0初始值counts++;if(counts>StepMs)// 定时大于指定MS数的时候,运动一步进{MotorTurn(MotorRunMode);counts=0;}}

调试效果

1、显示当前的转动方式和电机转动

2、电机按键调节转动速度

http://www.jsqmd.com/news/486125/

相关文章:

  • OpenEBS LocalPV-ZFS 终极故障排除指南:解决8大常见问题
  • 2026年精密螺杆阀厂家实力推荐榜:伺服/导热/耐磨/防腐蚀/AB胶/氟胶螺杆阀,专业点胶解决方案与技术创新深度解析 - 品牌企业推荐师(官方)
  • 终极指南:如何基于Apache PredictionIO构建智能用户画像系统
  • Apache PredictionIO高可用架构设计:构建零单点故障的机器学习服务
  • py12306监控告警系统:节点存活检测与性能指标分析终极指南
  • 【开源-Proteus8.9仿真】基于51单片机的超声波测距(HC-SR04+ LCD1602)
  • 数据结构算法个人理解汇总
  • 2026年阿里企业邮箱购买咨询电话,最新价格套餐详解 - 品牌2026
  • 光学像差与泽尼克多项式
  • Redux-Form错误状态管理终极指南:同步错误、异步错误与提交错误详解
  • DroneSecurity:揭秘DJI OcuSync 2.0无人机ID协议的终极嗅探工具
  • 掌握DVA框架TypeScript类型定义:从基础到高级泛型实践指南
  • 大家的社保手册:一篇讲清,从此不求人
  • 终极Apache PredictionIO插件开发指南:10个高效扩展机器学习平台功能的实用技巧
  • 2026年白俄罗斯留学哪家机构靠谱?优质实力机构详解及选型参考 - 深度智识库
  • 终极指南:如何用deej打造你的专属硬件音量控制器
  • 终极指南:ramsey/uuid与WordPress插件开发中的UUID应用技巧
  • Umi性能优化终极指南:从代码分割到PWA的极致加速方案
  • Win10 将未分配的磁盘空间合并到C盘该怎么做?一文教你3种方法
  • 2026年科威特建材展 Kuwait Build Design Week - 新天国际会展 - 中国总代理 - 新天国际会展
  • 阿里企业邮箱2026年最新收费标准,中小企业选购费用明细与优惠 - 品牌2026
  • 深入探索Apache Answer前端架构:React组件设计与Zustand状态管理实践指南
  • 如何利用entr实现数据科学工作流的实时自动化:完整指南
  • React-PDF文本对齐完整指南:创建专业PDF文档排版
  • Apache PredictionIO多语言支持终极指南:Java、Scala、Python SDK深度对比
  • 笔记本新机「开荒」完全攻略:从拆封验机到系统配置,《你缺失的那门计算机课》教你步步避坑
  • 如何使用Mapper库快速实现Swift对象的JSON解析?新手入门指南
  • Jimp WebAssembly终极优化指南:快速提升图像处理性能的10个技巧
  • 突破日志大数据瓶颈:OpenObserve批量导入工具的分片与断点续传技术全解析
  • 终极Zabbix插件开发指南:从零开始扩展企业级监控能力