@[TOC]目錄
ABZ編碼器 4096線
買的是這個(gè)
AB相代表計(jì)數(shù)方向,Z代表過零點(diǎn)
cubemx配置
定時(shí)器Encoder
也可以選上DMA
中斷
Z相GPIO中斷
找一個(gè)空閑管腳
打開對應(yīng)中斷
代碼
不用DMA
int main(void)
{
short Enc_cnt = 0;
HAL_TIM_Encoder_Start_IT(&htim4,TIM_CHANNEL_1|TIM_CHANNEL_2); //開啟定時(shí)器的編碼器模式中斷
while (1)
{
Enc_cnt = (short)__HAL_TIM_GET_COUNTER(&htim4);
float angle = 360.0/4.0/4096.0*(float)Enc_cnt;
}
}
//GPIO中斷,過零點(diǎn)清零
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
if(GPIO_Pin == GPIO_PIN_13){/* KEY */
/* 翻轉(zhuǎn)LED */
HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
// __HAL_TIM_SET_COUNTER(&htim4, 0);
if(__HAL_TIM_IS_TIM_COUNTING_DOWN(&htim4)){
htim4.Instance->CNT+=16384; //4*4096
}
else{
htim4.Instance->CNT-=16384;
}
}
}
用DMA文章來源:http://www.zghlxwxcb.cn/news/detail-854769.html
int main(void)
{
short Enc_cnt = 0;
uint32_t encoderValue[2];
HAL_TIM_Base_Start(&htim4);
HAL_TIM_Encoder_Start_DMA(&htim4,TIM_CHANNEL_1|TIM_CHANNEL_2,&encoderValue[0],&encoderValue[1],2);
while (1)
{
Enc_cnt = (short)__HAL_TIM_GET_COUNTER(&htim4);
float angle = 360.0/4.0/4096.0*(float)Enc_cnt;
}
}
//GPIO中斷,過零點(diǎn)清零
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
if(GPIO_Pin == GPIO_PIN_13){/* KEY */
/* 翻轉(zhuǎn)LED */
HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
// __HAL_TIM_SET_COUNTER(&htim4, 0);
if(__HAL_TIM_IS_TIM_COUNTING_DOWN(&htim4)){
htim4.Instance->CNT+=16384;
}
else{
htim4.Instance->CNT-=16384;
}
}
}
效果
過機(jī)械零點(diǎn)就+/-360文章來源地址http://www.zghlxwxcb.cn/news/detail-854769.html
到了這里,關(guān)于stm32 HAL庫 4096線ABZ編碼器的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!