STM8如何测多路PWM的频率和脉宽
时间:10-02
整理:3721RD
点击:
STM8如何测多路PWM的频率和脉宽?刚接触这个功能,问问各位。
测频率可以用定时器的输入捕获功能,测出两个上升沿或两个下降沿之间的时间,然后计算出频率。
测脉宽是不是一定要用两个定时器的通道,一个测上升沿,一个测下降沿?
由于总共有四路PWM要测量,如果每个都要用两个通道,那通道不够用,能否只用一个定时器通道,就能实现脉宽的测量?如何测?
补充:
请看RM0016 STM8S技术参考手册V4 第17.5.3中说的,
PWM输入信号测量
该模式是输入捕获模式的一个特例,除下列区别外,操作与输入捕获模式相同:
●两个ICi信号被映射至同一个TIi输入。
●这两个ICi信号的有效边沿的极性相反。
●其中一个TIiFP信号被作为触发输入信号,而触发模式控制器被配置成复位触发模式。
例如,你可以用以下方式测量TI1上输入的PWM信号的周期(TIM1_CCR1寄存器)和占空比(TIM1_CCR2寄存器)。(具体取决于fMASTER的频率和预分频器的值)
1.选择TIM1_CCR1的有效输入:置TIM1_CCMR1寄存器的CC1S=01(选中TI1)。
2.选择TI1FP1的有效极性(用来捕获数据到TIM1_CCR1中和清除计数器):置CC1P=0(上升沿有效)。
3.选择TIM1_CCR2的有效输入:置TIM1_CCMR2寄存器的CC2S=10(选中TI1FP2)。
4.选择TI1FP2的有效极性(捕获数据到TIM1_CCR2):置CC2P=1(下降沿有效)。
5.选择有效的触发输入信号:置TIM1_SMCR寄存器中的TS=101(选择TI1FP1)。
6.配置触发模式控制器为复位触发模式:置TIM1_SMCR中的SMS=100。
7.使能捕获:置TIM1_CCER1寄存器中CC1E=1,CC2E=1。
以这种方式测量PWM时,输入信号接入到TIM1_CH1,但在测量过程中,却用到了TIM1_CCR1和TIM1_CCR2,这样就占用了两个通道,所以需要两个通道来完成一个PWM的测量。
这样定时器TIM1就只能测两个PWM,我需要测四个PWM,通道就不够了。(TIM2,TIM3我另有它用)。
有没另外的方式来实现对PWM占空比的测量?
如果采用RM0016 STM8S技术参考手册V4 第17.5.3中说的PWM输入信号测量的方式,好象STM8只能测一路PWM,因为这种方式使用到TIM1_SMCR中的TS(触发选择),而整个STM8单片机中只有TIM1定时器有这项功能,其它定时器都没有。这种方式是纯硬件测量,软件工作量最少。我试过可以采用TIM1的四个输入通道都设置为单纯的输入捕获方式,然后在中断中改变触发方式,这样通过软件的方式,也能做到测四路PWM,但当PWM频率比较高,或者脉宽比较小的时候,由于中断间隔时间太短,有些中断会丢掉,这样测不出来或测试结果不准确。
测频率可以用定时器的输入捕获功能,测出两个上升沿或两个下降沿之间的时间,然后计算出频率。
测脉宽是不是一定要用两个定时器的通道,一个测上升沿,一个测下降沿?
由于总共有四路PWM要测量,如果每个都要用两个通道,那通道不够用,能否只用一个定时器通道,就能实现脉宽的测量?如何测?
补充:
请看RM0016 STM8S技术参考手册V4 第17.5.3中说的,
PWM输入信号测量
该模式是输入捕获模式的一个特例,除下列区别外,操作与输入捕获模式相同:
●两个ICi信号被映射至同一个TIi输入。
●这两个ICi信号的有效边沿的极性相反。
●其中一个TIiFP信号被作为触发输入信号,而触发模式控制器被配置成复位触发模式。
例如,你可以用以下方式测量TI1上输入的PWM信号的周期(TIM1_CCR1寄存器)和占空比(TIM1_CCR2寄存器)。(具体取决于fMASTER的频率和预分频器的值)
1.选择TIM1_CCR1的有效输入:置TIM1_CCMR1寄存器的CC1S=01(选中TI1)。
2.选择TI1FP1的有效极性(用来捕获数据到TIM1_CCR1中和清除计数器):置CC1P=0(上升沿有效)。
3.选择TIM1_CCR2的有效输入:置TIM1_CCMR2寄存器的CC2S=10(选中TI1FP2)。
4.选择TI1FP2的有效极性(捕获数据到TIM1_CCR2):置CC2P=1(下降沿有效)。
5.选择有效的触发输入信号:置TIM1_SMCR寄存器中的TS=101(选择TI1FP1)。
6.配置触发模式控制器为复位触发模式:置TIM1_SMCR中的SMS=100。
7.使能捕获:置TIM1_CCER1寄存器中CC1E=1,CC2E=1。
以这种方式测量PWM时,输入信号接入到TIM1_CH1,但在测量过程中,却用到了TIM1_CCR1和TIM1_CCR2,这样就占用了两个通道,所以需要两个通道来完成一个PWM的测量。
这样定时器TIM1就只能测两个PWM,我需要测四个PWM,通道就不够了。(TIM2,TIM3我另有它用)。
有没另外的方式来实现对PWM占空比的测量?
如果采用RM0016 STM8S技术参考手册V4 第17.5.3中说的PWM输入信号测量的方式,好象STM8只能测一路PWM,因为这种方式使用到TIM1_SMCR中的TS(触发选择),而整个STM8单片机中只有TIM1定时器有这项功能,其它定时器都没有。这种方式是纯硬件测量,软件工作量最少。我试过可以采用TIM1的四个输入通道都设置为单纯的输入捕获方式,然后在中断中改变触发方式,这样通过软件的方式,也能做到测四路PWM,但当PWM频率比较高,或者脉宽比较小的时候,由于中断间隔时间太短,有些中断会丢掉,这样测不出来或测试结果不准确。
我看了STM32的资料,STM32有好几个定时器都有象STM8 TIM1的这种功能,都有类似TIM1_SMCR的这种寄存器。是否我要得到比较好的测量结果,得改用STM32了?
