acdt/users/Src/encoder.c

39 lines
1.1 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "encoder.h"
//编码器相关参数
int last_encode_num = 0;
int curr_encode_num = 0;
uint32_t encode_num = 0;
int cnt_update = 152;
void encoder_init(void)
{
HAL_TIM_Encoder_Stop(&htim1, TIM_CHANNEL_ALL); //定时器1编码器关闭
__HAL_TIM_SetCounter(&htim1, 0x9718); //编码器初始值一千万
HAL_TIM_Encoder_Start(&htim1, TIM_CHANNEL_ALL); //定时器1编码器启动
last_encode_num = 0;
curr_encode_num = 0;
encode_num = 0;
cnt_update = 152;
CoilState[3] &= 0x7F; //初始化完成后线圈寄存器0x28置零
}
void encoder_run(void)
{
//编码器
last_encode_num = curr_encode_num;
curr_encode_num = __HAL_TIM_GET_COUNTER(&htim1);
if((curr_encode_num - last_encode_num) < -50000) //向上溢出检测o(65535)->o(0)
cnt_update++;
else if((curr_encode_num - last_encode_num) > 50000) //向下溢出检测, o(0)->o(65535)
cnt_update--;
encode_num = curr_encode_num + cnt_update * 0xFFFF; //编码器,返回计数脉冲值
InputReg[20] = (encode_num >> 16) & 0xffff; //32位int 拆分成两个 uint16_t高16位
InputReg[21] = encode_num & 0xffff; //32位int 拆分成两个 uint16_t低16位
}