了解編碼器,參考資料:https://blog.csdn.net/yx1302317313/article/details/80381001
編碼器模式的實作
編碼器模式默認使用定時器的通道1和通道2,通道3和通道4不能使用,以下為編碼器模式的配置,編碼器線數為1024,檢測雙通道的上升沿,



HAL_TIM_Encoder_Start(&htim5,TIM_CHANNEL_ALL);//編碼器模式啟動,寫ALL為開始該定時器(TIM5)的通道1和通道2(編碼器模式可自動計算),使用編碼器模式不用輸入捕獲
寫上之后連接好編碼器,電機轉動后監視TIMER5的暫存器即可看到TIM_CNT向上/向下計數,通過TIM5->CNT(編碼器線數)來提取計數器的值最終用CNT的值除以編碼器的解析度再乘以360來確定所轉動的角度,
輸入捕獲實作編碼器模式
原理:一個通道捕獲上升沿,一個通道做IO輸入,在上升沿捕獲中斷中進行上升沿的計數;檢測IO的電平高低,當檢測到上升沿,IO口電平為低時,正轉;檢測到上升沿,IO口電平為高時,反轉,

使用定時器4的3通道來進行輸入捕獲,PD15檢測另一波形的電平的HAL配置
定時器配置:

IO配置:

若是想要在檢測到上升沿時進行中斷計數,需要打開中斷

HAL_TIM_IC_Start_IT(&htim4, TIM_CHANNEL_3);//開啟輸入捕獲且捕獲后進入中斷
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)//1000線的編碼器//定時器捕獲中斷回呼函式
{
if(i == 0)//編碼器的零點
{
if( HAL_GPIO_ReadPin(GPIOD, GPIO_PIN_15) != GPIO_PIN_RESET)//讀取IO,正轉/反轉
{
i = 1000;
}
}
if( HAL_GPIO_ReadPin(GPIOD, GPIO_PIN_15) == GPIO_PIN_RESET)
{
i++;//正轉
}
else
{
i--;//反轉
}
if(i == 1000)
{
i = 0;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/224352.html
標籤:其他
