在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模块具有许多非常实用的功能,正交解码就是其中的一项。
正交解码有两种工作模式,通过“PWM_QDI”寄存器的“QUADMODE”位进行控制,当“QUADMODE=1”时工作模式为“计数和方向编码模式”;当“QUADMODE=0”时工作模式为“A向和B向编码模式”。根据EC11的器件特性实验中选择了“A向和B向编码模式”:
在“A向和B向编码模式”中,当PWM计数器向上、向下计数溢出中断时“CNTOFDIR”状态不同,编写代码时对其状态进行判断用以确定EC11计步数的增、减。
三、代码实现
使用“AutoGen Studio”配置工程:
正交解码初始化参数:
void ATC_PWM0_Init(void)
{
PWM_ConfigType pwmConfig;
PWM_QuadDecodeConfigType initModeStruct;
MSP_PWM_Init(PWM0);
pwmConfig.mode = PWM_MODE_QUADRATURE_DECODER;
pwmConfig.clkSource = PWM_CLK_SOURCE_APB;
pwmConfig.clkPsc = 0;
pwmConfig.initValue = 0;
pwmConfig.maxValue = 0;
pwmConfig.overflowInterrupEn = ENABLE;
pwmConfig.cntOverflowFreq = 0;
pwmConfig.interruptEn = ENABLE;
pwmConfig.callBack = Quad_Decoder_Callback;
initModeStruct.quadEn = ENABLE;
initModeStruct.mode = PWM_QUAD_PHASE_ENCODE;
initModeStruct.phaseAConfig.polarity = PWM_QUAD_PHASE_NORMAL;
initModeStruct.phaseAConfig.filterEn = DISABLE;
initModeStruct.phaseBConfig.polarity = PWM_QUAD_PHASE_NORMAL;
initModeStruct.phaseBConfig.filterEn = DISABLE;
pwmConfig.initModeStruct = &initModeStruct;
PWM_Init(PWM0, &pwmConfig);
}
四、实验结果
五、实验总结
第一次使用“正交解码”解读EC11,实现的代码相较于之前的软件代码显得简洁并且高效,运行流畅也没有失步现象。实验代码还缺少EC11按键部分,也没有进行优化。准备后期与PWM输出模块相配合制作一个频率可调、占空比可调的PWM输出控制设备。
|