• 134查看
  • 0回复

[芯片硬件] 基于编码器信号的PWM输出示例

[复制链接]

匿名  发表于 27-4-2024 09:51:11 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


有人问如果STM32定时器外接了正交编码器,该定时器的剩余通道是否可以做PWM输出呢?

其实,对于STM32芯片,编码输入信号就是定时器的计数时钟源之一。定时器外接了编码输入,若还有剩余通道的话,剩余通道依然可以实现输入捕获或输出比较功能。此时,该定时器的计数时钟就是由编码器信号提供的。编码器信号从定时器的通道1和通道2同时输入,计数器基于编码信号的边沿事件进行计数,可以有多种计数方式供选择。具体编码器计数方式参见下表。后面实验采用第三种方式。

基于编码器信号的PWM输出示例w2.jpg

下面使用STM32C0系列的Nucleo板,从定时器1的通道1、通道2接入正交编码信号,以TI1、TI2的有效跳变沿作为时钟源来实现PWM输出。

我先使用STM32C031芯片内部的TIM3产生两路正交编码信号的输出,然后将这两路输出接到TIM1的CH1、CH2,并令TIM1工作在编码模式,让其CH3输出PWM脉冲。

基于编码器信号的PWM输出示例w3.jpg

先看看TIM3的CubeMx配置。为了产生一对相差90°的正交编码信号,我用到了TIM3的三个通道,其中CH2没有做实际输出【当然,若用两个通道也行】。见下面配置。

基于编码器信号的PWM输出示例w4.jpg

基于编码器信号的PWM输出示例w5.jpg

下面波形就是基于上面配置的两路正交编码输出信号:

基于编码器信号的PWM输出示例w6.jpg

我们再来看看TIM1的CubeMx配置。工作在编码器模式,CH1、CH2作为编码信号输入,选择针对两路输入的跳变沿进行计数的方式。CH3、CH4做PWM输出。

基于编码器信号的PWM输出示例w7.jpg

基于编码器信号的PWM输出示例w8.jpg

在上图中可以看到,TIM1的PSC=0,ARR为19,计数器处于单向计数模式,即每计20个跳变沿就产生溢出。因为对TI1、TI2两路的跳变沿进行计数,在输入信号的1个周期内会做4次计数。这样算下来,TIM1的一个输出周期对应于正交编码输入信号的5个周期。

完成配置后创建工程,添加如下必要的用户代码。

基于编码器信号的PWM输出示例w9.jpg

稍作调试可以看到如下结果,蓝色的为TIM1-CH3的PWM输出,另外两路为正交编码信号。实验结果跟前面推理的一致。

基于编码器信号的PWM输出示例w10.jpg

不难理解,在前面TIM1时基参数不变的前提下,TIM1-CH3的输出频率由外来编码脉冲的频率决定,编码脉冲频率越高,TIM3-CH1的PWM输出频率也越高,反之亦然。【眼尖的人可能发现了此时计数器实际上是处于向下计数模式】

定时器基于编码脉冲作为计数时钟源时,使用CubeMx配置计数器的计数方向时,不要选择中心对齐计数模式,编码器时钟模式不支持该计数模式。至于选择向上计数模式还是向下计数模式无关紧要。因为编码器模式下,计数器是向上计数还是向下计数是硬件决定的,即根据TI1FP1和TI2FP2的相对电平以及所选择的计数方式决定。

好,本话题就分享到这里,权作参考。下次再聊。



快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 27-12-2024 11:02 , Processed in 0.198893 second(s), 27 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.