首页 > 编程知识 正文

stm32的pwm频率与占空比计算公式,stm32pwm调节占空比

时间:2023-05-04 11:23:33 阅读:206359 作者:207

测量方式:
1.
正点原子例程里使用的方式,定时器通道的相关引脚输入捕获上升沿触发中断,在中断函数里,检测到上升沿之后swdlq_SetCounter(swdlqX,0);将计数器的值置零重新开始计数,同时将定时器中断触发方式切换为下降沿触发,待到下降沿到来时触发中断,在中断函数中用swdlq_GetCaptureX(swdlqX);获得计数器的值,swdlq_GetCapture1,swdlq_GetCapture2,swdlq_GetCapture3,swdlq_GetCapture4,对应Channel1,Channel2,Channel3,Channel4。
由于占空比=高电平时间÷周期时长,所以在获取高电平前要先获取周期时长,方法和获取高电平时间类似,但是在第一次上升沿触发中断后不要切换中断触发方式,直接测量下一次上升沿到来时,两次上升沿之间的时间差。由此便可获得占空比。
2.
使用STM32硬件支持的PWM输入模式。这种方法较为简便,但每个定时器只可测量一路PWM信号,每个定时器上只有Channel1和Channel2可以用来测量PWM。Channel3和Channel4不支持。其中长度IC1(swdlqx_CCR1寄存器)和占空比IC2(swdlqx_CCR2寄存器)。具体可参考STM32参考手册14.3.6PWM输入模式章节。
3.
可以参考这位前辈的方法:
https://blog.csdn.net/crazy_kismet/article/details/102756206

项目过程中遇到的问题:
1.中断函数里不能使用串口打印函数,否则会造成中断函数里测量的PWM不准确,因为串口打印会占用一部分时间。
2.方法1在切换定时器通道时要将别的通道中断关闭(例如,swdlq_ITConfig(swdlq3,swdlq_IT_CC1,DISABLE);),否则通道之间会占用计数器,造成读取的值的紊乱。
3.不能像swdlq3_ICInitStructure.swdlq_Channel = swdlq_Channel_3|swdlq_Channel_1|swdlq_Channel_4|;这样子去同时初始化几个通道,只能一个一个初始化,否则会出现错误。
4.swdlq_IT_CC1,swdlq_IT_CC2,swdlq_IT_CC3,swdlq_IT_CC4;(通道输入捕获中断)
swdlq_GetCapture1(swdlqX);swdlq_GetCapture2(swdlqX);swdlq_GetCapture3(swdlqX);swdlq_GetCapture4(swdlqX);(获得计数器值)
swdlq_OC1PolarityConfig(swdlqX,swdlq_ICPolarity_Rising);swdlq_OC2PolarityConfig(swdlqX,swdlq_ICPolarity_Rising);swdlq_OC3PolarityConfig(swdlqX,swdlq_ICPolarity_Falling);swdlq_OC4PolarityConfig(swdlqX,swdlq_ICPolarity_Falling);(设置上升沿,或下降沿触发输入捕获中断)

代码在此:https://download.csdn.net/download/q245629111/13056057
如果实在没积分下载可以联系邮箱245629111@qq.com我发给你。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。