news 2026/6/10 21:54:03

基于stm32的电机控制系统仿真设计 实现功能: 1、判断光照强度与设定值的大小 2、当此时光...

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于stm32的电机控制系统仿真设计 实现功能: 1、判断光照强度与设定值的大小 2、当此时光...

基于stm32的电机控制系统仿真设计 实现功能: 1、判断光照强度与设定值的大小 2、当此时光照强度小于设定值时,电机顺时针旋转(打开窗帘) 3、当此时光照强度大于设定值时,电机逆时针旋转(关闭窗帘) 包含仿真+源码 仿真软件:Proteus8.9 编程软件:Keil5 编程语言:C语言(标准库) 工程路径:基于STM32窗帘控制系统\\\\STM32程序\\\\Project\\\\LWl-F103.uvprojx

清晨六点半,实验室的咖啡机还在休眠,我盯着Proteus里抖动的光照曲线,突然意识到这个窗帘控制系统最骚的操作不是代码本身——而是怎么让倔强的L298N电机驱动模块和STM32的PWM信号和平共处。

选型清单里藏着魔鬼细节:STM32F103C8T6核心板(江湖人称蓝 pill),光敏电阻要选GL5528(实测线性度比5516强三档),重点在L298N的驱动逻辑。Proteus里直接拽出MOTOR模型,接上H桥瞬间,突然想起上个月烧过两个驱动芯片的血泪史。

硬件框图在草稿纸上潦草画完,转头打开Keil5新建工程。先搞ADC读取光照值,代码里藏着个骚操作:

// 光敏电阻ADC采集 uint16_t Get_Light(void) { ADC_SoftwareStartConvCmd(ADC1, ENABLE); while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)); // 死等转换完成 return ADC_GetConversionValue(ADC1); }

这写法其实在真实项目里会被锤——阻塞式采集在电机转动时可能卡住系统。但仿真环境下随便造,毕竟Proteus里的ADC不会像现实世界那样给你摆脸色。

电机控制才是重头戏,PWM波形的占空比设置藏着玄机:

// 电机转向控制 void Motor_Ctrl(int direction) { if(direction == OPEN) { TIM_SetCompare1(TIM2, 700); // 通道1输出PWM TIM_SetCompare2(TIM2, 0); // 通道2低电平 } else { TIM_SetCompare1(TIM2, 0); TIM_SetCompare2(TIM2, 700); // 反向电压 } }

TIM2的两个通道接到L298N的输入端,这里700的魔数不是拍脑袋来的——实测占空比70%能让仿真电机匀速转动,又不至于让Proteus里的电流显示爆红。

基于stm32的电机控制系统仿真设计 实现功能: 1、判断光照强度与设定值的大小 2、当此时光照强度小于设定值时,电机顺时针旋转(打开窗帘) 3、当此时光照强度大于设定值时,电机逆时针旋转(关闭窗帘) 包含仿真+源码 仿真软件:Proteus8.9 编程软件:Keil5 编程语言:C语言(标准库) 工程路径:基于STM32窗帘控制系统\\\\STM32程序\\\\Project\\\\LWl-F103.uvprojx

主逻辑看似简单却暗藏杀机:

while(1) { current_light = Get_Light(); if(abs(current_light - set_value) > HYSTERESIS) { // 滞回比较防抖 if(current_light < set_value) { Motor_Ctrl(OPEN); printf("窗帘正在打开...光照值%d\r\n", current_light); // 串口装逼必备 } else { Motor_Ctrl(CLOSE); printf("老子要关窗帘了!当前光照%d\r\n", current_light); } } Delay_Ms(500); // 别太频繁,电机遭不住 }

那个HYSTERESIS滞回区间是关键,没这玩意光照值在阈值边缘时电机能给你表演霹雳舞。仿真时故意把光照值调到设定值附近,看电机是否抽风——这是检验系统可靠性的土法子。

Proteus里运行起来后,突然发现电机有时反向转动延迟。一查原理图,原来L298N的使能端没接高电平,仿真模型和真实器件在这点上居然表现一致。赶紧补上EN脚接VCC的操作,电机立刻乖巧如初。

源码包里藏着个secret_menu.c文件,里面是手动校准光照值的彩蛋功能——长按开发板上的蓝色按键五秒,进入阈值设置模式。这玩意在答辩演示时能救命,毕竟评委老师就爱看这种花里胡哨的交互。

工程编译通过那瞬间,实验室的窗帘恰好被晨风吹开,真实阳光照在仿真运行的电脑屏幕上——这该死的赛博浪漫。

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

基于随机森林模型的轴承剩余寿命预测MATLAB实现!

一、研究背景 轴承是旋转机械设备的核心部件&#xff0c;其健康状况直接影响设备的可靠性和安全性。传统的定期维护存在"过度维护"或"维护不足"的问题&#xff0c;预测性维护通过实时监测轴承状态并预测剩余寿命&#xff0c;可实现&#xff1a; 减少非计划…

作者头像 李华
网站建设 2026/6/10 11:07:33

SQL 性能雷区揭秘:为何阿里等大厂严禁使用 ORDER BY RAND()?

在日常开发中&#xff0c;我们常遇到“随机取几条数据”的需求&#xff0c;比如首页推荐、抽奖系统或内容轮播。许多开发者会不假思索地写出如下 SQL&#xff1a; vbnet SELECT * FROM products ORDER BY RAND() LIMIT 5; 简洁、直观、看似完美——但正是这条语句&#xff0…

作者头像 李华
网站建设 2026/6/10 11:10:24

寒假集训8——数论

P1009 [NOIP 1998 普及组] 阶乘之和题目描述用高精度计算出 S1!2!3!⋯n!&#xff08;n≤50&#xff09;。其中 ! 表示阶乘&#xff0c;定义为 n!n(n−1)(n−2)⋯1。例如&#xff0c;5!54321120。输入格式一个正整数 n。输出格式一个正整数 S&#xff0c;表示计算结果。输入输出…

作者头像 李华