47 lines
1.6 KiB
C
47 lines
1.6 KiB
C
/*
|
||
* @Author: wujunchao wujunchao@wuxismart.com
|
||
* @Date: 2024-08-20 08:22:01
|
||
* @LastEditors: wujunchao wujunchao@wuxismart.com
|
||
* @LastEditTime: 2024-09-18 16:46:03
|
||
* @FilePath: \VOQC\users\Src\encoder.c
|
||
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
||
*/
|
||
#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[0] &= 0xFB; //初始化完成后线圈寄存器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[10] = (encode_num >> 16) & 0xffff; //32位int 拆分成两个 uint16_t,高16位
|
||
InputReg[11] = encode_num & 0xffff; //32位int 拆分成两个 uint16_t,低16位
|
||
}
|
||
|
||
|