登录  | 立即注册

游客您好!登录后享受更多精彩

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[寒假笔记] 51单片机之利用定时器写PWM

[复制链接]
发表于 2023-1-31 16:17:48 | 显示全部楼层 |阅读模式
学习笔记
学习科目: 51单片机
学习安排: 利用定时器写PWM
开始时间: 2023-01-10
结束时间: 2023-01-10
本帖最后由 郑中源 于 2023-1-31 16:20 编辑

看这节笔记,你必须学完定时器,附上节链接(点击右侧文字跳转):定时器详解
学完定时器后,我们可以利用定时器写PWM,以达到对直流电机的调速或者是制作呼吸灯等

一、对于PWM的理解
    PWM实际上相当于一个调控系统,以直流电机为例,电池给他一定的电压让他转,这个转动的速度是固定的,因为给的电压是固定的,那么有没有什么办法让它转的慢点呢?有的,先引入一个情景,假设有个开关,按下去就会改变通电或者断电,你先让电机转2s,停2s,那你就会看到电机先转后停,慢慢地,你可以让电机转1s,停1s,那停的那一秒可能会因为前一秒在转的惯性而有一定的转动,然后让电机转1ms,停1ms,一直循环,你看到的就是一直在转的电机,转动速度也变成了原来的50%,转1ms停2ms就是原来速度的1/3.只要你在足够短的时间(以us计量)多次开关,就能达到类似于控制它的转动速度的效果。

二、利用程序构建一个PWM
1.png
假设你有一个每秒100转的直流电机,你想让他变成每秒30转,应该怎么做呢?
我们先介绍几个概念:
1.设定值 :x(这个值往往和占空比有关)
2.一次PWM的周期:n*你设定的定时器时间(n是一个PWM周期进入定时器中断的次数,往往为100,此处以100举例,设定的定时器时间以100us举例)
3.占空比=一个PWM周期中通电的时间/一个PWM周期的总时间
4.cnt:计数器,记录你进了几次中断
那么大体的思路是,假设一次PWM的时间为T,在这一个周期中,你要进入100次中断,其中第30次进入的时候,你要使电机停下来,第100次进入中断的时候cnt清零,新的PWM周期开始。
这里以灯的亮度代码举例,原理是一样的,效果就是让灯达到原来30%的亮度。
2.png
程序如图,记得加一句sbit led =P00;(使led这个变量代表P00这个引脚)
程序中的T0count就是上面说的计数器cnt,记录你进了多少次中断每记录100次就清零,定义时用static unsigned int,保证出中断函数之后不会丢失
图中30这个数字就是上面说的x,那占空比就是30/100=30%
最后记得设置定时器初值,PWM就写好了,想要其他亮度,把30改成其他你想要的亮度就行

end.



好懒~~不想说~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表