经过上述分析,最终代码如下:
/* USER CODE BEGIN 2 */
// 开启AB相编码器定时器
HAL_TIM_Encoder_Start(&htim2, TIM_CHANNEL_1|TIM_CHANNEL_2);
// 开启定时器3中断
HAL_TIM_Base_Start_IT(&htim3);
/* USER CODE END 2 */
/* USER CODE BEGIN 4 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
static unsigned char i = 0;
// 3号定时器中断
if(htim == (&htim3))
{
// 设置测量频率为100Hz(10ms)
int rate = 100;
// 获取编码器信号数
short encoder = __HAL_TIM_GET_COUNTER(&htim2);
// 计算圈数rpm
float count = ((float)encoder) / 2 / 2 / 13 / 30;
// 编码器数据清零
__HAL_TIM_SET_COUNTER(&htim2, 0);
// 计算转速
float speed = count * rate;
// 扩大100倍输出
log("speed:%d", (int)(speed) * 100);
}
}
/* USER CODE END 4 */
|