本帖最后由 stm1024 于 2025-6-22 09:47 编辑
今日继续评测一下关于CH585中定时器的部分,这次是PWM输出部分。
先大概看一下PWM部分,除了定时器提供的 4 路 26 位 PWM 输出之外,系统还提供了 8 路 8 位 PWM 输出(PWM4~PWM11)或6 路 16 位 PWM 输出(PWM4~PWM9),占空比可调,PWM 周期固定可选 8 种周期,操作很简单。
在以前8051之类没有PWM专用模块的MCU上,虽然我们可以通过类似上次的评测类似的操作,通过定时器给GPIO翻转,也可以实现PWM功能,但对于有专用PWM外设的MCU,最好的做法还是使用该外设,具有配置、修改简单的优势。
不过,PWM输出针脚不能向定时器翻转GPIO那样随便选择,需要有特定的通道,例如:
因此,在使用时需要注意配置相应的针脚。
直接进入正题,上代码: 重点说说pwm1_config函数,这个函数中,用到了PA10针脚作为PWM1输出通道1,同时,设置了PWM的一些基本参数,例如有效极性,通常我们使用高电位,以及周期,占空比,注意占空比配置的时候,是先乘以30再除以10,这样可以避免进行浮点数运算,当然如果占空比比较特殊非得使用浮点数的话,这个地方就需要注意强制类型转换一下。最后是使能Timer1的PWM,以及使能Timer1外设。 运行后,使用逻辑分析仪抓取一下数据: 可以看到,极性,周期,占空比都是正常的。
如果把代码中第10行修改为TMR1_PWMInit(Low_Level, PWM_Times_1);则逻辑分析仪会显示占空比为70%(因为逻辑分析仪都是将高电位作为极性)。 不过测试把参数中的PWM_Times_1修改为PWM_Times_4,输出并没有发生什么变化,这个参数对PWM输出的影响目前还不明确。至于周期,占空比都好理解。 另外一个问题是,PWM频率最高能拉到多少? 测试了一下T_pwm的值,首先根据手册,这个值必须要大于2: 然后我测试了使用3,发现没有波形,改为4以后,有输出了,不过PWM的占空比和周期都不太稳定了: 结果1
结果2
结果3
可以看到,频率大概在14.28~16.67MHz之间,占空比变为了42%~50%不等。因此对于太高频率的PWM需求就不适用了,好在我们通常使用的PWM都在几百或者几千之间,因此总的来说还是够用的,例如配置为常见的120Hz控制的外设,波形如下:
OK,关于PWM的评测就到这里。 |