stm32 F103 tim3 Encoder mode 模式奇怪的问题?诡异

和如 2021-03-20 06:16:33
stm32 tim3 Encoder mode 模式奇怪的问题,这里按网上的配置,在STM32CubeMX配置了TIM3的编码器模式。编码器用的是EC11现在的情况是 编码器转动可以检测出来,数据也可以读取,但是显示的数据完全没有根据需要进行变化,数字完全是跳动的显示。而且没有规律,请前辈指导一下,
主程序里面的代码:
uwICValue2=LL_TIM_GetCounter(TIM3);
LCD_ShowIntNum(73, 60,uwICValue2,sizeof(uwICValue2),RED,BLACK, 24);

TIM3的初始化代码:
void MX_TIM3_Init(void)
{

/* USER CODE BEGIN TIM3_Init 0 */

/* USER CODE END TIM3_Init 0 */

LL_TIM_InitTypeDef TIM_InitStruct = {0};

LL_GPIO_InitTypeDef GPIO_InitStruct = {0};

/* Peripheral clock enable */
LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM3);

LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOA);
/**TIM3 GPIO Configuration
PA6 ------> TIM3_CH1
PA7 ------> TIM3_CH2
*/
GPIO_InitStruct.Pin = LL_GPIO_PIN_6|LL_GPIO_PIN_7;
GPIO_InitStruct.Mode = LL_GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;
LL_GPIO_Init(GPIOA, &GPIO_InitStruct);

/* USER CODE BEGIN TIM3_Init 1 */

/* USER CODE END TIM3_Init 1 */
LL_TIM_SetEncoderMode(TIM3, LL_TIM_ENCODERMODE_X4_TI12);
LL_TIM_IC_SetActiveInput(TIM3, LL_TIM_CHANNEL_CH1, LL_TIM_ACTIVEINPUT_DIRECTTI);
LL_TIM_IC_SetPrescaler(TIM3, LL_TIM_CHANNEL_CH1, LL_TIM_ICPSC_DIV1);
LL_TIM_IC_SetFilter(TIM3, LL_TIM_CHANNEL_CH1, LL_TIM_IC_FILTER_FDIV1_N2);
LL_TIM_IC_SetPolarity(TIM3, LL_TIM_CHANNEL_CH1, LL_TIM_IC_POLARITY_RISING);
LL_TIM_IC_SetActiveInput(TIM3, LL_TIM_CHANNEL_CH2, LL_TIM_ACTIVEINPUT_DIRECTTI);
LL_TIM_IC_SetPrescaler(TIM3, LL_TIM_CHANNEL_CH2, LL_TIM_ICPSC_DIV1);
LL_TIM_IC_SetFilter(TIM3, LL_TIM_CHANNEL_CH2, LL_TIM_IC_FILTER_FDIV1_N2);
LL_TIM_IC_SetPolarity(TIM3, LL_TIM_CHANNEL_CH2, LL_TIM_IC_POLARITY_RISING);
TIM_InitStruct.Prescaler = 3;
TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP;
TIM_InitStruct.Autoreload = 100;
TIM_InitStruct.ClockDivision = LL_TIM_CLOCKDIVISION_DIV1;
LL_TIM_Init(TIM3, &TIM_InitStruct);
LL_TIM_DisableARRPreload(TIM3);
LL_TIM_SetTriggerOutput(TIM3, LL_TIM_TRGO_RESET);
LL_TIM_DisableMasterSlaveMode(TIM3);
/* USER CODE BEGIN TIM3_Init 2 */

/* USER CODE END TIM3_Init 2 */

}

STM32CubeMX配置

视频地址:
https://v.youku.com/v_show/id_XNTEyNDM3MDE4MA==.html
...全文
631 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
hhhh63 2021-03-22
  • 打赏
  • 举报
回复
按我的经验,两种可能性,一是频率太高,不能正常计数;还有可能都是干扰信号。 先用单片机模拟一个正交信号输出到编码器试试。 STM32实战九 编码器 https://blog.csdn.net/hhhh63/article/details/93379527 STM32实战六 PWM加移相正交 https://blog.csdn.net/hhhh63/article/details/93372639
下载代码方式:https://pan.quark.cn/s/6be39e599cd6 ARM Cortex-M3内核所构成的STM32 F103系列单片机,在嵌入式系统构建中占据重要地位,特别是在驱动电机方面有着广泛的应用。当涉及到带有编码器的电机控制时,借助定时器的编码器功能模式,能够实现极为精确的速度与位置测量。接下来,我们将深入解析STM32 F103定时器的编码器功能模式及其具体应用。1. **定时器编码器功能模式详解** 编码器功能模式STM32定时器内置的一种操作模式,其核心目的在于为电机控制系统提供准确无误的位置和速度数据。在此模式下,定时器设备可以通过识别编码器的脉冲信号,从而精确计算电机的运行速度和具体位置。STM32 F103系列提供了多个编码器接口,包括TIM1、TIM2、TIM3以及TIM4,并且支持两种编码器功能模式模式1(即A/B通道输入)和模式2(即A/B/Z通道输入)。2. **编码器功能模式1(A/B通道输入)** 在模式1的应用场景下,定时器设备会依据A通道和B通道的上升沿或下降沿变化来捕获相关事件,进而进行计数处理。通过分析A与B通道之间的相对相位关系,可以判定电机的旋转方向,同时根据计数值的差异来评估电机的转速。3. **编码器功能模式2(A/B/Z通道输入)** 模式2在原有A/B通道的基础上增加了Z通道的输入功能,通常用于标示零点或参考点位置。一旦Z信号状态发生改变,定时器会自动重置其计数器,以此完成绝对位置检测的任务。此外,Z信号还可以用于校准速度测量过程,确保电机启动时能够获得精确的初始值。4. **配置编码器功能模式** 将定时器设备配置为编码器功能模式通常需要遵循以下步骤: - 确定合适的定时器:依据项目...

27,519

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧