微信后台网站建设宁波网站建设设计报告
微信后台网站建设,宁波网站建设设计报告,企业查询宝官网,专门做985招聘信息的网站51单片机正反转可控的直流电机设计 C程序、proteus仿真、报告#xff01;
支持按键设置直流电机的正转、反转、急停。这个暑假折腾了个好玩的——用51单片机做个能正反转带急停的直流电机控制器。别看功能简单#xff0c;里面按键消抖、PWM调速、电机驱动这些坑一个没少踩 // 电机控制端A sbit MOTOR_B P1^1; // 电机控制端B void Key_Scan(){ static uint8_t key_up 1; if((KEY_FORWARD0 || KEY_REVERSE0 || KEY_STOP0) key_up){ DelayMs(10); // 消抖延时 key_up 0; if(KEY_FORWARD 0) Motor_Ctrl(FORWARD); else if(KEY_REVERSE 0) Motor_Ctrl(REVERSE); else if(KEY_STOP 0) Motor_Ctrl(STOP); }else if(KEY_FORWARD KEY_REVERSE KEY_STOP){ key_up 1; } }这个状态机结构的按键扫描比直接if判断可靠得多。注意static变量key_up用来记录按键释放状态配合10ms延时消抖实测在proteus里能稳定识别动作。遇到按键失灵别急着怀疑硬件先检查引脚定义有没有和仿真图对应上。电机驱动函数才是重头戏L293D的逻辑控制其实很简单void Motor_Ctrl(uint8_t mode){ switch(mode){ case FORWARD: MOTOR_A 1; MOTOR_B 0; // 正转 break; case REVERSE: MOTOR_A 0; MOTOR_B 1; // 反转 break; default: MOTOR_A 0; // 急停 MOTOR_B 0; } // 启动PWM调速 PWM_Init(); }重点在于正反转时A、B两个控制端的电平组合。有个坑要注意——急停时如果直接断开使能端电机可能因为惯性继续转动所以这里采用短路制动两个输出端同时置低实测制动效果明显比单纯断电好。51单片机正反转可控的直流电机设计 C程序、proteus仿真、报告 支持按键设置直流电机的正转、反转、急停。PWM调速用的是定时器0中断实现占空比调节void Timer0_Init(){ TMOD | 0x01; // 16位定时器模式 TH0 0xFC; // 1ms定时 TL0 0x18; ET0 1; EA 1; TR0 1; } void Timer0_ISR() interrupt 1{ static uint8_t pwm_count 0; pwm_count; if(pwm_count 100) pwm_count 0; if(pwm_count duty){ // duty是占空比变量 ENA 1; // 使能端 }else{ ENA 0; } // 重装初值 TH0 0xFC; TL0 0x18; }这里把PWM周期设为100级可调通过修改duty变量0-100就能改变转速。调试时发现电机启动瞬间电流很大后来在程序初始化时加了软启动——让占空比从30%逐渐增加到设定值解决了电机抖动问题。Proteus仿真有个小技巧在L293D的VSS逻辑电源和VS电机电源之间记得接个10uF的电容否则仿真时可能出现驱动芯片逻辑紊乱。仿真效果和实物基本一致急停时电机大约0.5秒内就能完全停止。最后说下硬件保护实际做实物时一定要在单片机IO口和L293D之间加光耦隔离我在实验室烧过两个芯片才明白这个道理。另外程序里可以加个堵转检测当电流持续超过阈值时自动急停这个功能正在完善中。完整代码和仿真文件已上传Github需要报告模板的兄弟可以私信。下期准备做无线遥控版本打算用NRF24L01实现有兴趣的可以持续关注。