0x01 > 授權(quán)信息
原貼地址 使用STM32CubeIDE編寫(xiě)EC11
0x02 >EC11 特性

EC11 特性
從上圖可以看出旋轉(zhuǎn)EC11時(shí),A相上升沿時(shí),B相高電平為順時(shí)針轉(zhuǎn)動(dòng),B相低電平則為逆時(shí)針轉(zhuǎn)動(dòng)。所以我們利用這一特性,使用STM32的定時(shí)器捕獲功能對(duì)A相進(jìn)行電平捕獲,然后與B相電平進(jìn)行比較從而判斷旋轉(zhuǎn)方向。
0x03 > 圖形化配置

IO配置
我們?cè)O(shè)定定時(shí)器TIM3_CH1通道為捕獲模式連接EC11的A相CLK引腳,PA7設(shè)置為IO輸入模式,連接EC11的B相DT引腳,PA5我設(shè)置為中斷模式連接SW引腳(如果不需要按下功能這個(gè)可以不進(jìn)行配置),

設(shè)置定時(shí)器通道——捕獲模式

配置定時(shí)器延時(shí)時(shí)間
配置一個(gè)1ms定時(shí)器,并設(shè)置為自動(dòng)清零模式,配置好后記得打開(kāi)定時(shí)器中斷。
0x04 > 代碼
首先要開(kāi)啟定時(shí)器TIM3,我們使用這個(gè) HAL_TIM_IC_Start_IT(htim, Channel);啟動(dòng)定時(shí)器。
MX_TIM3_Init();
HAL_TIM_IC_Start_IT(&htim3, TIM_CHANNEL_1);
使用定時(shí)器回調(diào)函數(shù)
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
在里面編寫(xiě)上面的程序,因?yàn)槲覀儗相接在PA7引腳,所以我們使用switch case語(yǔ)句進(jìn)行判斷引腳電平,如果單片機(jī)檢測(cè)到A相為高電平就會(huì)進(jìn)入這個(gè)中斷判斷B相電平,低電平為反轉(zhuǎn),高電平極為正轉(zhuǎn)(程序中的cnt為計(jì)數(shù)作用)。
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
if(hitm == &htim3)
{
switch()
{
case 0:
cnt-- ;//反轉(zhuǎn) 計(jì)數(shù)器減一
break;
case 1:
cnt++ ;//正轉(zhuǎn) 計(jì)數(shù)器加一
break;
}
}
}
0x05 > 測(cè)試

測(cè)試成功
經(jīng)測(cè)試通過(guò)串口打印數(shù)據(jù),EC11非常穩(wěn)定,也沒(méi)有出現(xiàn)丟步和亂跳的情況。