中级会员
- 积分
- 233
- 金钱
- 233
- 注册时间
- 2016-11-19
- 在线时间
- 30 小时
|
使用TIM2编码器模式检测电机旋转角度,串口输出打印角度,在上电初始位置转动编码器,当角度正负值切换过程中,会出现一个突变的角度;通过计算发现是发生了向下计数溢出中断,但是计数值读取到为0,所以计算出的角度会很大。下面是主函数
int16_t circle_count=0;
uint16_t encoder,last_encode;
int main(void)
{
int64_t total_encoder;
uint8_t dir;
float angle;
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_TIM2_Init();
MX_USART2_UART_Init();
__HAL_TIM_CLEAR_IT (&htim2,TIM_IT_UPDATE );
__HAL_TIM_ENABLE_IT (&htim2,TIM_IT_UPDATE );
HAL_TIM_Encoder_Start (&htim2,TIM_CHANNEL_ALL );
while (1)
{
// dir = __HAL_TIM_IS_TIM_COUNTING_DOWN (&htim2 );
encoder = __HAL_TIM_GET_COUNTER (&htim2 );
if(last_encode != encoder )
{
last_encode = encoder ;
total_encoder = encoder +(int64_t )circle_count * htim2.Init.Period ; //Period = 65535
angle = total_encoder * 360 / 2048.0f;
printf("Angle = %.3f\r\n",angle);
}
HAL_Delay (10);
}
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if (htim->Instance == TIM2)
{
if(__HAL_TIM_IS_TIM_COUNTING_DOWN (&htim2 ))
circle_count --;
else
circle_count ++;
}
if (htim->Instance == TIM1) {
HAL_IncTick();
}
}
|
-
串口打印编码器旋转角度
|