前言
学习单片机总要接触一些控制,比如电机调速,舵机驱动,步进电机驱动。这是必不可少需要用到一种控制机制———PWM(脉冲宽度调制)
提示:以下是本篇文章正文内容,下面案例可供参考
一、学习前需要掌握哪些内容?
1.掌握单片机定时器的使用方法
2.掌握c语言基础
二、开始
1.基操来一下
代码如下(示例):
#include <reg52.h>
typedef unsigned int u16;
typedef unsigned char u8; //声明变量
sbit PWM = P1^0; //定义PWM输出口
2.重头戏
以下代码就是具体实现方案
代码如下(示例):
u16 A = 0; //定义变量
u16 Speed;
void Time0Init() //初始化定时器
{
TMOD|=0x01; //配置定时器1
TH0 = (65536-1000)/256; //配置1ms定时
TL0 = (65536-1000)%256;
TR0 = 1;
ET0 = 1; //打开定时器中断
EA = 1; //打开总中断
}
//中断里面就是PWM具体实现的代码
void time()interrupt 1
{
TH0 = (65536-1000)/256; //配置1ms定时
TL0 = (65536-1000)%256;
A++; //A开始计数,每1毫秒加一
if(A > 1000) //A计数到1000就清零,也就是说每经过1s就是一个
{ //PWM周期,所以频率是1Hz
A = 0;
}
//该Speed出场了,speed作为比较器跟A比较,通过调Speed来调节占空比
if(Speed < A)
{
PWM = 1; //当Speed小于A时,PWM引脚输出高电平
}
else
{
PWM = 0; //否则就输出0
}
if(Speed>999)
{
Speed =999;
}
}
所以我们只要调节Speed 的值就可以调节占空比了
Speed的值应该比A小
总结
main函数里面也比较简单
void main()
{
Time0Init();
while(1);
}
原理方面就介绍到这了
来源:https://blog.csdn.net/linfengXBB/article/details/110950991
如果文章或资源对您有帮助,欢迎打赏作者。一路走来,感谢有您!
txttool.com 说一段 esp56物联 查询128 IP查询