0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

利用非对称PWM模式体验编码器功能

茶话MCU 来源:茶话MCU 作者:茶话MCU 2023-05-04 10:01 次阅读

通常在STM32芯片的通用TIMER或高级TIMER都带编码器功能,支持基于1路或2路输入的编码脉冲计数。我们一般外接正交编码器,使用2路输入。TIMER硬件基于2路输入的相差特征来确定计数方向并依据方向对计数器做递增或递减操作。

b4f7da52-e83f-11ed-ab56-dac502259ad0.png

正交编码器一般使用5根线连接,分别为A、B、 Z信号线及VCC和GND电源线。其中,A、B两路是存在相差的同频信号。Z信号即零点信号,当编码器旋转到某位置时,它会发出一个脉冲表示约定的零位。VCC、GND分别是电源线和地线。至于编码器线数,是指旋转一圈A(B)端会输出的脉冲个数 ,二者转一圈所发出的脉冲数相同,但存在90°相差。编码器的线数越高代表其能够反应的位置精度越高。

b5145a88-e83f-11ed-ab56-dac502259ad0.png

关于STM32片内TIMER编码器接口工作原理,这里就不介绍了。更多细节请参考STM32的相应系列的参考手册。这里想重点分享的是,如果手头没有正交编码器实物,如何来验证或体验TIMER的编码器接口功能呢?

其实,TIMER编码器处理单元就是对外来的两路同频但输出具有前后时序差的脉冲信号进行方向辨认后做TIMER计数器的递增或递减计数。既然手头没有编码器实物,我们何不利用STM32片内的TIEMR产生2路带相差的同频信号,再接到另一个支持编码器接口的TIMER不就OK了吗?

当然,使用STM32的TIMER产生2路带相差的同频信号,有多种方法。比方通过2个定时器主从级联、单个定时器使用OC toggle模式加以DMA辅助、利用非对称PWM输出模式来实现。

其中,前2种方法在STM32芯片里通用性好,每个STM32系列都支持。而非对称PWM输出模式虽然可以非常方便地实现带相差的同频输出信号,但不是所有STM32系列支持。当然,不支持的主要是ST推出得比较早的STM32系列,比方STM32F1STM32F2STM32F4这些老旧的系列,后来推出的STM32系列,比方STM32L4,STM32G4,STM32C0、STM32U5、STM32F7、STM32H7、STM32H5等都支持非对称PWM输出模式。

我这里采用非对称PWM输出模式并使用STM32L4开发板来演示实现过程。先用TIM1结合非对称PWM输出模式输出2路带相差的同频信号,然后连接到TIM2的编码器接口。另外,我还用了个按键【接到PC13】动态调整TIM1两路输出相差的前后关系,以观察TIM2计数器的计数变化情况,即递增还是递减计数。

b5334cd6-e83f-11ed-ab56-dac502259ad0.png

我先配置TIM1的CH1/CH2,实现2路带相差的PWM输出。

b55357e2-e83f-11ed-ab56-dac502259ad0.png

基于CubeMx配置后生成初始化工程,添加2行上图中的代码就可以输出了。

我这里使用ARM MDK IDE自带的逻辑分析仪就可以看到下面波形。2路波形分别从GPIOA_PIN8/GPIOA_PIN9输出。

b56e7928-e83f-11ed-ab56-dac502259ad0.png

然后我将这两路输出分别连接到TIM2的编码器接口脚【GPIOA_PIN0、GPIOA_PIN1】。

我把有关TIM2编码器应用的CubeMx配置也截图出来供参考。【其中ARR可按需调整,为了便于查看效果,后来我将其改为1000了。这点不影响功能演示。】:

b5884e3e-e83f-11ed-ab56-dac502259ad0.png

然后,添加启动TIMER编码器功能的API函数。【API函数里启动了2个通道的输入捕获中断,我这里只保留通道1的而关闭了通道2的。即每次在TIM2通道1的捕获中断里读取其计数器的值。】

b5a0e854-e83f-11ed-ab56-dac502259ad0.png

编译、除错后运行,即可在IDE的逻辑分析仪上看到下面的结果。其中CNT_value就是TIM2的计数器动态值。目前看到的是TIM2的编码器接口针对当前2路输入信号进行周期计数。绿色和紫色是上面提到过的两路输入信号【因显示分辨率的关系下面相关图形变成单色方块了】。

b5bd8bb2-e83f-11ed-ab56-dac502259ad0.png

当然,我们可以通过按键来调整TIM1两路输出信号的相差时序,进而改变TIM2编码器计数的方向。不难看出下图中3个圆圈的地方就是切换计数方向的位置。

b5ce7062-e83f-11ed-ab56-dac502259ad0.png

我们还可以调整TIM1的参数改变输出给TIM2的信号频率。整个过程就是利用TIMER的非对称PWM输出模式构造2路带相差的编码器信号,从而让TIMER的编码器接口电路实现对外部编码输入信号的计数。实现这些基本功能之后,可以进一步研究应用中可能涉及的各种测量功能。

聊到这里,可能有人对上面逻辑分析仪的配置感兴趣。

这里的CNT_value连续记录TIM2计数器的值,这里为Analog量。

Level_PA8记录GPIOA_PIN8的电平情况,1或0两个值之一,为Bit量。

Level_PA9跟Level_PA8是完全相同的数据类型,不过显示的是GPIOA_PIN9的电平。显然,逻辑分析仪配置里关于Level_PA9的显示算式的屏蔽数应该是0x00000200,右移位为9。我目前是在SYSTICK的毫秒中断里读取GPIOA->IDR的值即管脚电平到变量Level_PA8和Level_PA9的。


审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编码器
    +关注

    关注

    41

    文章

    3361

    浏览量

    131555
  • PWM
    PWM
    +关注

    关注

    114

    文章

    4901

    浏览量

    209917
  • STM32
    +关注

    关注

    2240

    文章

    10674

    浏览量

    348790
  • 计数器
    +关注

    关注

    32

    文章

    2123

    浏览量

    92987
  • Vcc
    Vcc
    +关注

    关注

    2

    文章

    288

    浏览量

    34942

原文标题:利用非对称PWM模式体验编码器功能

文章出处:【微信号:stmcu832,微信公众号:茶话MCU】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    G473使用TIM1非对称模式做移相,用TIM8Combined PWM模式做对角的移相与门输出,为什么时序不对?

    G473使用TIM1非对称模式做移相,用TIM8Combined PWM模式做对角的移相与门输出,为啥占空比对了时序不对?
    发表于 03-14 07:49

    适合AMP同构非对称模式下的操作系统

    请问哪位知道代码开源的适合AMP,非对称模式下的操作系统,只需要简单的核间任务通信和资源同步就可以。
    发表于 12-11 17:38

    STM32F0系列单片机能否产生非对称PWM互补波形?

    如题,STM32F0 如何输出非对称PWM波形。如何设置的? 请教高手。目前正在高单电阻电流采样的SVPWM控制。
    发表于 08-03 08:56

    STM32增量式编码器接口模式解析

    mode”。当然,具体是哪一个TIM,可参看芯片对应的数据手册,可以一目了然。STM32提供的编码器接口模式主要针对的就是“正交编码器”,它可以利用定时
    发表于 05-28 08:00

    编码器测速原理及STM32编码器模式

    本问讲解了编码器测速原理及STM32编码器模式,文末有STM32编码器模式例程。
    发表于 08-11 06:06

    编码器模式的实现

    编码器模式的实现编码器模式默认使用定时的通道1和通道2,通道3和通道4不能使用。以下为编码器
    发表于 08-16 08:12

    STM32利用定时编码器模式处理带编码器直流电机

    STM32 Cubemax(五) —— STM32利用定时编码器模式处理带编码器直流电机文章目录系列文章目录前言一、pandas是什么?二
    发表于 09-03 07:38

    怎样利用STM32cubeMX库去配置编码器模式

    霍尔编码器测速原理是什么?怎样利用STM32cubeMX库去配置编码器模式
    发表于 09-10 07:32

    定时编码器模式分析

    回顾上一章节学习了PWM生成,刚好买的元器件也都到了。测试下代码,完美运行。这不又趁着周末,进行下一个环节—定时编码器模式。目的是为下一步PID控制做准备。遇到的问题周末学习
    发表于 01-14 08:08

    为什么STM32单片机的定时PWM输入捕获模式无法读取编码器

    为什么STM32单片机的定时PWM输入捕获模式无法读取编码器呢?怎样去解决STM32单片机的定时PW
    发表于 01-21 06:30

    如何利用STM32的正交编码器模式读取编码器的角度数据和速度?

    如何利用STM32的正交编码器模式读取编码器的角度数据和速度?
    发表于 02-11 07:01

    什么是非对称数字用户线(ADSL)

    什么是非对称数字用户线(ADSL) 概述 ADSL是DSL的一种非对称版本,它利用数字编码技术从现有铜质电话线上获取最大数据传输容量,同
    发表于 04-06 09:17 5988次阅读

    在Zynq SoC上实现双核非对称的多进程处理模式

    在我的上一篇博客中我介绍了利用Zynq SoC上的两个ARM Cortex-A9 MPCore处理器执行不同的任务程序,实现非对称的多进程处理模式的概念。
    发表于 02-11 10:08 1961次阅读
    在Zynq SoC上实现双核<b class='flag-5'>非对称</b>的多进程处理<b class='flag-5'>模式</b>

    STM32定时器非对称PWM输出模式应用示例

    所谓非对称PWM输出模式它是相对基于中心对称计数时的对称PWM输出而言的。当计数
    的头像 发表于 05-14 09:21 8990次阅读
    STM32定时器<b class='flag-5'>非对称</b><b class='flag-5'>PWM</b>输出<b class='flag-5'>模式</b>应用示例

    STM32——编码器测速原理及STM32编码器模式

    本问讲解了编码器测速原理及STM32编码器模式,文末有STM32编码器模式例程。
    发表于 11-26 11:36 268次下载
    STM32——<b class='flag-5'>编码器</b>测速原理及STM32<b class='flag-5'>编码器</b><b class='flag-5'>模式</b>