前言
🚀🚀开启攻城狮的成长之旅!这是我参与的由 CSDN博客专家 架构师李肯和 瑞萨MCU 联合发起的「 致敬未来的攻城狮计划 」的第 2 篇,点击查看活动计划详情
👍首先作为一个穷学生来说,很感谢有这次的机会能带我领略除C51和STM32板子以外开发板的机会,让我在空闲的时间内不仅能吸取很多知识,更能听取李老师作为企业级架构师的手把手敲代码的教学。
脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。
PWM 波形的基本信息如下图所示:
PWM常用信息:
// 定义引脚
sbit PWM_OUT = P1^4;
void pwm_init(){
// Timer2 配置
T2CR = 0x08; // 16位自动重载模式
// 重载值 = 定时周期 / 时钟周期
T2DRH = 0x1F; // 定时周期高8位
T2DRL = 0x40; // 定时周期低8位
// PWM模式:重载值为占空比
T2MR |= 0x0080; // TD2.7设置为1
T2MR &= ~0x0040; // TD2.6设置为0
}
void pwm_init(){
// ...
// Timer2 比较器配置
TCRCR2 = 0x00; // 无需输入捕获
// 输出模式:PWM
TCDR2 = 0x0F; // 先设为最大值,占空比为0
// 初次比较时间设为0
TCMP2H = 0x00;
TCMP2L = 0x00;
// 触发比较事件
TCRCR2 |= 0x02; // TD2CE2 设置为1
}
void main(){
// 初始化
pwm_init();
PWM_OUT = 0;
// 动态调整占空比
while(1){
for(unsigned char i = 1; i <= 15; ++i){
TCMP2H = 0x00;
TCMP2L = i << 8;
// 延迟一段时间,保证PWM波形输出稳定
delay(1000);
}
}
}
如果本文对你有所帮助,还请三连支持一下博主!