news 2026/5/14 10:47:34

【51单片机】不止是调光!51 单片机 PWM 实战:呼吸灯 + 直流电机正反转 + 转速控制

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【51单片机】不止是调光!51 单片机 PWM 实战:呼吸灯 + 直流电机正反转 + 转速控制

🔥小龙报:个人主页
🎬作者简介:C++研发,嵌入式,机器人方向学习者
❄️个人专栏:《工科必装软件安装教程》《嵌入式的开端 ---- 51单片机》
永远相信美好的事情即将发生

文章目录

  • 前言
  • 一、什么是PWM
  • 二、PWM的频率与占空比
    • 2.1 PWM的频率
    • 2.2 占空比
  • 三、呼吸灯控制
  • 四、直流电机控制
    • 4.1 简单正反转驱动
    • 4.2 PWM速度控制
  • 总结与每日励志

前言

PWM(脉冲宽度调制)是51单片机嵌入式开发中核心控制技术之一,广泛应用于LED调光、电机控速、开关电源等场景。本文从PWM基础概念入手,通俗解析频率与占空比两大核心参数,结合实操案例,先通过IO口模拟实现LED呼吸灯效果,再讲解定时器精准生成PWM、控制直流电机正反转与转速,层层递进,帮助初学者吃透PWM原理,掌握其实际应用技巧,夯实嵌入式控制基础。

一、什么是PWM

PWM是脉冲宽度调制的缩写,它是一种通过调整脉冲信号的高电平和低电平时间比例来控制电路输出的技术。简单来说,PWM是一种控制电子设备输出电压或电流的方法,它可以通过调整脉冲信号的宽度来控制输出信号的平均电压或电流,常应用于电机控速,开关电源等领域。

二、PWM的频率与占空比

在PWM波形中有两个重要的参数,分别是:频率、占空比

2.1 PWM的频率

是指1秒钟内信号从高电平到低电平再回到高电平的次数(一个周期)
如果频率为1000Hz ,也就是说1秒内来回了1000次,那每次的时间就是1ms,那此信号一个周期就是1ms

2.2 占空比

是一个脉冲周期内,高电平的时间与整个周期时间的比例

注:调节占空比最终会反映到输出的电流、电压上,或者可以理解为输出的总能量变化,100%占空比时输出100%能量,50%占空比时,只会输出一半的能量,例如50%占空比控制LED会比较暗,控制电机力气会比较小。

三、呼吸灯控制

下面使用IO模拟的方式,实时修改占空比,控制LED的呼吸灯效果

#include <reg52.h>sbitled=P2^7;voidDelayus(intt)//@11.0592MHz{while(t--){unsignedchari;i=2;while(--i);}}voidmain(){inttime=0;led=0;while(1){for(time=0;time<300;time++){//从暗逐渐变亮的过程led=0;Delayus(time);led=1;Delayus(300-time);}for(time=0;time<300;time++){//从亮逐渐变暗的过程led=1;Delayus(time);led=0;Delayus(300-time);}}}

除了使用IO模拟的方式,我们也可以通过定时器功能,产生更加精确的PWM波形;设置定时器的溢出时间可以改变PWM的周期频率;设置比较值大小可以调节PWM的占空比;

四、直流电机控制

直流电机是指能将直流电能转换成机械能转动的设备。

直流电机的结构是由定子和转子组成。直流电机运动时,不动的部分称为定子,定子的主要作用是产生磁场。运行时转动的部分称为转子,其主要作用是产生电磁转矩和感应电动势。
直流电机没有正负之分,在两端加上直流电就能工作。交换电极可以改变电机旋转的方向;

51单片机作为一个开发板,起到的主要作用是控制,而直流电机作为一个较大功率的器件,当然不能通过51单片机的IO引脚进行驱动,需要使用一些驱动电路或者芯片进行驱动,板卡上用的是TC118S。

4.1 简单正反转驱动

#include <reg52.h>sbitdc_an2=P2^3;sbitdc_an1=P2^4;//带参延时函数voiddelay_ms(unsignedintxms)//@12MHz{unsignedinti,j;for(i=xms;i>0;i--){for(j=124;j>0;j--){}}}voidmain(){while(1){//正转2sdc_an2=0;dc_an1=1;delay_ms(2000);//停止2sdc_an2=0;dc_an1=0;delay_ms(2000);//反转2sdc_an2=1;dc_an1=0;delay_ms(2000);//停止2sdc_an2=0;dc_an1=0;delay_ms(2000);}}

4.2 PWM速度控制

#include <reg52.h>//约1ms溢出#defineTIMS(65536-922)sbitdc_an2=P2^3;sbitdc_an1=P2^4;unsignedcharspeed,compare;//延时ms函数,参数用来改变延时的具体时间voiddelay_ms(unsignedintxms)//@12MHz{unsignedinti,j;for(i=xms;i>0;i--){for(j=124;j>0;j--){}}}voidmain(){TMOD=0x01;//配置定时器0为16位定时器,TH0、TL0全用TH0=TIMS>>8;//设置定时初值高8位TL0=TIMS;//设置定时初值低8位ET0=1;//开启定时器0中断EA=1;//开启全局中断TR0=1;//定时器0开始计数//初始化电机,停止运行dc_an1=0;dc_an2=0;while(1){compare=10;delay_ms(5000);compare=30;delay_ms(5000);compare=60;delay_ms(5000);compare=90;delay_ms(5000);}}//1ms触发执行一次voidTimer0()interrupt1{//每次产生中断后重新设置下次定时器初值 - 1毫秒产生1次中断TH0=TIMS>>8;TL0=TIMS;//当compare为10时,输出10ms高电平,90ms低电平//当compare为60时,输出60ms高电平,40ms低电平//当compare为90时,输出90ms高电平,10ms低电平speed++;//定时计数器的计数值,1ms加1speed%=100;//限制speed在0-100内if(speed<compare)//计数值与比较值进行比较{dc_an2=1;}else{dc_an2=0;}}

总结与每日励志

✨本文完整覆盖PWM技术的核心知识点与实操应用,从概念解析到参数解读,再到呼吸灯、直流电机正反转及转速控制的代码实现,清晰呈现了PWM从理论到实践的全过程。嵌入式学习重在理解原理、勤练实操,每一次参数调试、每一次代码优化,都是成长的积累。✨ 不必急于求成,深耕每一个技术细节,循序渐进突破,你终将解锁更多嵌入式控制技能,在技术之路上稳步前行,不负每一份坚持与热爱!

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

AI Agent部署架构对比与选择:一篇搞定,建议收藏

AI Agent 的部署架构没有万能解法&#xff0c;选择对了能事半功倍&#xff0c;选择错了则可能付出高昂的性能或成本代价。不同架构会直接影响性能表现、成本结构、延迟体验和适用场景。目前主流的四种部署模式包括批量部署、流式部署、实时部署和边缘部署。 1.批量部署 Agent 以…

作者头像 李华
网站建设 2026/5/1 6:27:22

想让 Git 忽略这个文件夹怎么办 ---- .gitignore Git文件使用教程

通过idea里的快捷操作添加&#xff08;最直接&#xff09;idea中右键文件夹 “添加到 .gitignore” 的选项&#xff0c;直接点击它&#xff0c;这个文件夹就会被自动写入项目的 .gitignore 文件&#xff0c;Git 之后就不会再追踪它了。手动编辑 .gitignore 文件&#xff08;如果…

作者头像 李华
网站建设 2026/5/12 9:03:44

赶deadline必备! 10个AI论文网站深度测评:自考毕业论文+格式规范全攻略

在当前快节奏的学术环境中&#xff0c;无论是高校师生还是自考学员&#xff0c;都面临着论文写作时间紧、格式要求高、内容质量把控难等多重挑战。尤其是在临近毕业的关键阶段&#xff0c;如何高效完成一篇符合规范、逻辑严谨的论文&#xff0c;成为许多人的燃眉之急。为此&…

作者头像 李华
网站建设 2026/5/12 9:03:36

机械设计系统如何通过wangEditor控件导入三维模型截图?

《大三程序猿的CMS升级记&#xff1a;Word一键转存公式高清显示&#xff0c;99元预算搞大事&#xff01;》 一、背景 “师弟&#xff0c;你这CMS新闻系统能直接粘贴Word里的表格和公式吗&#xff1f;” “不能啊师姐&#xff0c;现在编辑器只能粘贴纯文本…” “那毕业论文里…

作者头像 李华