|
用定時(shí)器中斷對(duì)編碼器進(jìn)行掃描
下面是兩站編碼器的波形圖,前面這張是編碼器反轉(zhuǎn)的,后面這張是編碼器正轉(zhuǎn)的。在圖中可以看到,編碼器反轉(zhuǎn)時(shí),A的下降沿對(duì)應(yīng)B的高電平,編碼器正轉(zhuǎn)時(shí),A的下降沿對(duì)應(yīng)B的低電平。利用外部中斷可以對(duì)編碼器進(jìn)行讀取,但是編碼器在旋轉(zhuǎn)的過(guò)程中,編碼器可能存在抖動(dòng),為了在讀取編碼器的同時(shí)消除抖動(dòng),可以采用定時(shí)器中斷的方法對(duì)編碼器進(jìn)行讀取。
編碼器反轉(zhuǎn).png (131.2 KB, 下載次數(shù): 41)
下載附件
2022-12-28 08:39 上傳
編碼器正轉(zhuǎn).png (135.54 KB, 下載次數(shù): 33)
下載附件
2022-12-28 08:39 上傳
利用定時(shí)器中斷,我們可以對(duì)編碼器進(jìn)行采樣,即每間隔一定的時(shí)間對(duì)編碼器兩個(gè)引腳進(jìn)行讀取。編碼器引腳A和引腳PA11相連,編碼器引腳B和PA10相連,首先將引腳A的狀態(tài)保存在一個(gè)變量中,然后刷新引腳A的狀態(tài),通過(guò)比較A引腳前后兩次的狀態(tài)來(lái)決定是否對(duì)B引腳進(jìn)行讀取。
采樣.PNG (137.94 KB, 下載次數(shù): 39)
下載附件
2022-12-28 08:45 上傳
定時(shí)器中斷函數(shù):
- void TIM2_IRQHandler(void)//定時(shí)器2中斷函數(shù)
- {
- if(TIM_GetITStatus(TIM2,TIM_IT_Update))
- {
- Pin11_LastStatus=Pin11_NowStatus;//保存上一次A引腳狀態(tài)
- Pin11_NowStatus=GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11);//刷新A引腳狀態(tài)
- if(Pin11_LastStatus==1 && Pin11_NowStatus==0)//如果引腳上一次為高電平,這一次為低電平
- {
- if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_10)==0)//判斷引腳B的狀態(tài)
- {
- i++;
- if(i>20)i=0;
- }else if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_10)==1)//判斷引腳B的狀態(tài)
- {
- i--;
- if(i<0)i=20;
- }
- }
- }
- TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
- }
復(fù)制代碼
|
-
-
數(shù)碼管&編碼器.7z
2022-12-28 09:38 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
1.06 MB, 下載次數(shù): 33, 下載積分: 黑幣 -5
|