STM32控制编码器

STM32编码器控制详解

一、编码器

1.概述

编码器是一种将角位移或者角速度转换成一连串电数字脉冲的旋转式传感器。

可以用来测量位置,测量速度。

2.原理

这里写图片描述

3. 编码器软件四倍频技术

这里写图片描述
四倍频的方法是测量A相和B相的上升沿和下降沿

二、stm32控制编码器

stm32控制编码器可以采用Timer的编码器模式,Tim1~8的CH1和CH2分别对应A相和B相

1.TIMx的编码器接口模式

选择编码器接口模式的方法是:如果计数器只在TI2的边沿计数,则置TIMx_SMCR寄存器中的
SMS=001;如果只在TI1边沿计数,则置SMS=010;如果计数器同时在TI1和TI2边沿计数,则
置SMS=011。

通过设置TIMx_CCER寄存器中的CC1P和CC2P位,可以选择TI1和TI2极性;如果需要,还可以
对输入滤波器编程。

两个输入TI1和TI2被用来作为增量编码器的接口。假定计数器已经启动(TIMx_CR1
寄存器中的CEN=’1’),计数器由每次在TI1FP1或TI2FP2上的有效跳变驱动。

配置范例:

CC1S=01’ (TIMx_CCMR1寄存器, IC1FP1映射到TI1)
CC2S=01’ (TIMx_CCMR2寄存器, IC2FP2映射到TI2)
CC1P=0’ (TIMx_CCER寄存器, IC1FP1不反相, IC1FP1=TI1)
CC2P=0’ (TIMx_CCER寄存器, IC2FP2不反相, IC2FP2=TI2)
SMS=011’ (TIMx_SMCR寄存器,所有的输入均在上升沿和下降沿有效).
CEN=1’ (TIMx_CR1寄存器,计数器使能)

2.硬件连接

实验采用一款安装了编码盘的直流电机,如图:

STM32 控制编码器电机的关键在于理解如何通过硬件和软件协同工作来精确控制电机的速度、位置和其他特性。以下是几个重要的要点: ### 1. 编码器的选择及连接 首先需要选择适合应用需求的编码器,通常分为增量式编码器和绝对值编码器。对于大多数应用场景来说,增量式编码器更为常见,并且容易与 STM32 配合使用。 - **接线**:将编码器A/B相脉冲信号接入到 STM32 的定时器通道上(例如 TIMx_CH1 和 TIMx_CH2),以便能够捕捉旋转方向以及转过的角度信息。 ### 2. 定时器配置 利用 STM32 内置的高级定时器如TIM8等可以方便地处理来自编码器的位置反馈数据。设置定时器为编码器模式(Encoder Interface Mode),它能自动检测 A 相和 B 相之间的相对变化并计算出当前的角度或位移量。 ```c // 示例代码片段用于初始化TIM作为编码器输入 void MX_TIM_Config(void){ // 省略其他无关部分... htim.Instance = TIM8; htim.Init.Prescaler = 0; // 根据实际频率调整预分频系数 htim.Init.CounterMode = TIM_COUNTERMODE_UP; htim.Init.Period = 65535; sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIM_Encoder_Init(&htim, &sConfig) != HAL_OK) Error_Handler(); } ``` ### 3. 中断服务程序(ISR) 为了及时响应编码器状态的变化,在发生特定事件时触发中断是非常有帮助的。比如每当计数值溢出或者达到了设定的目标点数时都可以发起一次ISR调用,然后在这个函数体内更新速度PID控制器的状态变量或是通知主循环采取进一步行动。 ```c void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){ static int32_t lastPosition = 0; /* 获取当前位置 */ int32_t currentPosition = __HAL_TIM_GET_COUNT(htim); /* 计算位移差值 */ int32_t deltaPositon = currentPosition - lastPosition; /* 更新上次记录的位置 */ lastPosition = currentPosition; // 进行必要的处理... } ``` ### 4. PID 调节算法 根据从编码器获取的数据来进行闭环控制系统设计至关重要。一个典型的例子就是采用比例积分微分(PID)调节策略,基于目标位置减去实际测量所得误差不断修正输出PWM占空比直到两者趋于一致为止。 --- --
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值