这一篇来进行PWM输出的实现与测试,后面我们会基于PWM进行音乐播放和打碟器的实现。使用示波器测量来确定占空比和频率的准确性。
在前面https://bbs.eeworld.com.cn/thread-1247060-1-1.html的基础上进行。
PWM初始化
cy_rslt_t pwm_initialize(void)
{
cy_rslt_t rslt;
rslt = cyhal_pwm_init(&pwm_led, P11_1, NULL);
if (CY_RSLT_SUCCESS == rslt)
{
rslt = cyhal_pwm_set_duty_cycle(&pwm_led,
50,
10000);
if (CY_RSLT_SUCCESS == rslt)
{
rslt = cyhal_pwm_start(&pwm_led);
}
}
return rslt;
}
设置占空比和频率
cy_rslt_t pwm_setduty(uint8_t duty, uint32_t freq)
{
cy_rslt_t rslt;
cyhal_pwm_stop(&pwm_led);
cyhal_pwm_set_duty_cycle(&pwm_led,duty,freq);
rslt = cyhal_pwm_start(&pwm_led);
return rslt;
}
测试代码main函数中
pwm_initialize();
pwm_setduty(50, 10000);
for (;;)
{
}
我们使用P11.1作为PWM输出测试。
设置50%占空比1000Hz
pwm_setduty(50, 1000);
实测50% 1.01KHz
设置50%占空比10000Hz
pwm_setduty(50, 10000);
实测49.99% 10.09KHz
设置80%占空比1000Hz
pwm_setduty(80, 1000);
实测80% 1.01KHz
设置80%占空比10000Hz
pwm_setduty(80, 10000);
实测79.98% 10.09KHz
考虑到测量误差,上述结果可以看到时间是准确的。
使用官方的库函数,HAL接口进行外设操作比较简单,PWM操作几个接口就完成了,非常方便。