基于STM32c8t6的5路pwm占空比测量实验总结

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

项目过程中遇到的问题:
1.中断函数里不能使用串口打印函数,否则会造成中断函数里测量的PWM不准确,因为串口打印会占用一部分时间。
2.方法1在切换定时器通道时要将别的通道中断关闭(例如,TIM_ITConfig(TIM3,TIM_IT_CC1,DISABLE);),否则通道之间会占用计数器,造成读取的值的紊乱。
3.不能像TIM3_ICInitStructure.TIM_Channel = TIM_Channel_3|TIM_Channel_1|TIM_Channel_4|;这样子去同时初始化几个通道,只能一个一个初始化,否则会出现错误。
4.TIM_IT_CC1,TIM_IT_CC2,TIM_IT_CC3,TIM_IT_CC4;(通道输入捕获中断)
TIM_GetCapture1(TIMX);TIM_GetCapture2(TIMX);TIM_GetCapture3(TIMX);TIM_GetCapture4(TIMX);(获得计数器值)
TIM_OC1PolarityConfig(TIMX,TIM_ICPolarity_Rising);TIM_OC2PolarityConfig(TIMX,TIM_ICPolarity_Rising);TIM_OC3PolarityConfig(TIMX,TIM_ICPolarity_Falling);TIM_OC4PolarityConfig(TIMX,TIM_ICPolarity_Falling);(设置上升沿,或下降沿触发输入捕获中断)

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值