[学习笔记] 【AutoChips 7801x MCU评测报告】四、正交解码

[复制链接]
1315|6
 楼主| lisingch 发表于 2020-6-20 13:44 | 显示全部楼层 |阅读模式
      在PWM1_CH6输出学习的基础上又尝试进行了PWM模块另一功能“正交解码”的学习。实验中使用了一只EC11编码开关模块,利用PWM0_CH0、PWM0_CH1通道连接EC11的"A"、"B"端,期望实现对EC11旋转方向及转动步数的解码。具体实验过程如下:

一、实验资源
1、AC7801x开发板;
2、AutoGen Studio 1.3.0;
3、KEIL 5.28.0.0;
4、ST-LINK2;
5、EC11编码开关

二、资源简介
      AC7801x的PWM模块具有许多非常实用的功能,正交解码就是其中的一项。
2020-06-20_122649.png
2020-06-20_122705.png
2020-06-20_122730.png
2020-06-20_122802.png
      正交解码有两种工作模式,通过“PWM_QDI”寄存器的“QUADMODE”位进行控制,当“QUADMODE=1”时工作模式为“计数和方向编码模式”;当“QUADMODE=0”时工作模式为“A向和B向编码模式”。根据EC11的器件特性实验中选择了“A向和B向编码模式”:
2020-06-20_130751.png
      在“A向和B向编码模式”中,当PWM计数器向上、向下计数溢出中断时“CNTOFDIR”状态不同,编写代码时对其状态进行判断用以确定EC11计步数的增、减。
2020-06-20_125527.png
2020-06-20_130537.png
2020-06-20_130558.png

三、代码实现
使用“AutoGen Studio”配置工程:
2020-06-20_124055.png

正交解码初始化参数:
  1. void ATC_PWM0_Init(void)
  2. {
  3.     PWM_ConfigType pwmConfig;
  4.     PWM_QuadDecodeConfigType initModeStruct;

  5.     MSP_PWM_Init(PWM0);

  6.     pwmConfig.mode = PWM_MODE_QUADRATURE_DECODER;
  7.     pwmConfig.clkSource = PWM_CLK_SOURCE_APB;
  8.     pwmConfig.clkPsc = 0;
  9.     pwmConfig.initValue = 0;
  10.     pwmConfig.maxValue = 0;
  11.     pwmConfig.overflowInterrupEn = ENABLE;
  12.     pwmConfig.cntOverflowFreq = 0;
  13.     pwmConfig.interruptEn = ENABLE;
  14.     pwmConfig.callBack = Quad_Decoder_Callback;

  15.     initModeStruct.quadEn = ENABLE;
  16.     initModeStruct.mode = PWM_QUAD_PHASE_ENCODE;
  17.     initModeStruct.phaseAConfig.polarity = PWM_QUAD_PHASE_NORMAL;
  18.     initModeStruct.phaseAConfig.filterEn = DISABLE;
  19.     initModeStruct.phaseBConfig.polarity = PWM_QUAD_PHASE_NORMAL;
  20.     initModeStruct.phaseBConfig.filterEn = DISABLE;
  21.     pwmConfig.initModeStruct = &initModeStruct;

  22.     PWM_Init(PWM0, &pwmConfig);

  23. }

四、实验结果
2020-06-20_133227.png

五、实验总结
      第一次使用“正交解码”解读EC11,实现的代码相较于之前的软件代码显得简洁并且高效,运行流畅也没有失步现象。实验代码还缺少EC11按键部分,也没有进行优化。准备后期与PWM输出模块相配合制作一个频率可调、占空比可调的PWM输出控制设备。

caizhiwei 发表于 2020-6-21 22:39 | 显示全部楼层
厉害了楼主!
我用过华大的高级定时器做正交解码,还不错效果。
 楼主| lisingch 发表于 2020-6-21 23:05 | 显示全部楼层
caizhiwei 发表于 2020-6-21 22:39
厉害了楼主!
我用过华大的高级定时器做正交解码,还不错效果。

以前用过软件方式的,没这个好用。第一次用这个硬件解码,感觉非常顺滑不丢步,好用
marginer 发表于 2020-6-23 14:11 | 显示全部楼层
LZ的Auto Gen用得很溜
 楼主| lisingch 发表于 2020-6-23 14:29 | 显示全部楼层
marginer 发表于 2020-6-23 14:11
LZ的Auto Gen用得很溜

谢谢领导表扬!关键还是AutoGen Studio简单易用、平易近人
TechHolder 发表于 2020-6-23 16:54 | 显示全部楼层
非常好的分享
 楼主| lisingch 发表于 2020-6-23 17:41 | 显示全部楼层

谢谢捧场!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

99

主题

15005

帖子

19

粉丝
快速回复 在线客服 返回列表 返回顶部