本文主要是介绍[攻城狮计划(二)] —— 瑞萨 PWM 定时器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
🙌秋名山码民的主页
😂oi退役选手,Java、大数据、单片机、IoT均有所涉猎,热爱技术,技术无罪
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
获取源码,添加WX
目录
- 前言
- 通用 PWM 定时器
- PWM概述
- R7FA2E1单片机配置PWM波形输出
- 最后
前言
🚀🚀开启攻城狮的成长之旅!这是我参与的由 CSDN博客专家 架构师李肯和 瑞萨MCU 联合发起的「 致敬未来的攻城狮计划 」的第 2 篇,点击查看活动计划详情
👍首先作为一个穷学生来说,很感谢有这次的机会能带我领略除C51和STM32板子以外开发板的机会,让我在空闲的时间内不仅能吸取很多知识,更能听取李老师作为企业级架构师的手把手敲代码的教学。
通用 PWM 定时器
PWM概述
脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。
PWM 波形的基本信息如下图所示:
PWM常用信息:
- pwm的频率:
是指1秒钟内信号从高电平到低电平再回到高电平的次数(一个周期);
也就是说一秒钟PWM有多少个周期
单位: Hz
表示方式: 50Hz 100Hz
- pwm的周期:
T=1/f
周期=1/频率
50Hz = 20ms 一个周期
如果频率为50Hz ,也就是说一个周期是20ms 那么一秒钟就有 50次PWM周期
- 占空比:
是一个脉冲周期内,高电平的时间与整个周期时间的比例
单位: % (0%-100%)
表示方式:20%
R7FA2E1单片机配置PWM波形输出
- 首先需要确定PWM波形输出的引脚,在本例中,我们选择P14作为PWM输出引脚。因此在代码中定义引脚:
// 定义引脚
sbit PWM_OUT = P1^4;
- PWM波形的输出是由一个定时器和一个比较器共同完成的。首先,需要选择一个计数器作为定时器,并配置相应的工作模式。在这里,我们选择Timer2作为定时器,并配置为PWM波形输出模式。
void pwm_init(){// Timer2 配置T2CR = 0x08; // 16位自动重载模式// 重载值 = 定时周期 / 时钟周期T2DRH = 0x1F; // 定时周期高8位T2DRL = 0x40; // 定时周期低8位// PWM模式:重载值为占空比T2MR |= 0x0080; // TD2.7设置为1T2MR &= ~0x0040; // TD2.6设置为0
}
- 接下来,需要选择一个比较器,并配置相应的工作模式。在这里,我们选择Timer2的比较器,并将其配置为PWM波形输出模式。
void pwm_init(){// ...// Timer2 比较器配置TCRCR2 = 0x00; // 无需输入捕获// 输出模式:PWMTCDR2 = 0x0F; // 先设为最大值,占空比为0// 初次比较时间设为0TCMP2H = 0x00; TCMP2L = 0x00;// 触发比较事件TCRCR2 |= 0x02; // TD2CE2 设置为1
}
- 最后,需要设置占空比。在R7FA2E1单片机中,占空比的大小与比较值的大小成正比。在这里,我们通过手动修改比较寄存器来设置占空比。在循环中更改占空比的数值,从而实现PWM波形的动态调整。
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);}}
}
最后
如果本文对你有所帮助,还请三连支持一下博主!
这篇关于[攻城狮计划(二)] —— 瑞萨 PWM 定时器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!