編碼器速和方向檢測電機方向與速檢測stm編碼器接口模式_第1頁
編碼器速和方向檢測電機方向與速檢測stm編碼器接口模式_第2頁
編碼器速和方向檢測電機方向與速檢測stm編碼器接口模式_第3頁
編碼器速和方向檢測電機方向與速檢測stm編碼器接口模式_第4頁
編碼器速和方向檢測電機方向與速檢測stm編碼器接口模式_第5頁
已閱讀5頁,還剩3頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、編碼器是什么玩意呢,它可是一個好玩的東西,做小車測速必不可少的玩意,下面,我將從編碼器的原理講起,一直到用stm32的編碼器接口模式,測出電機轉速與方向。1.編碼器碼盤示意圖.gif (15.77 KB, 下載次數: 36)下載附件  保存到相冊 2014-3-5 08:19 上傳圖1 編碼器示意圖      圖1為編碼器的示意圖,中間是一個帶光柵的碼盤,光通過光柵,接收管接收到高電平,沒通過,接收到低電平。電機旋轉一圈,碼盤上有多少光柵,接受管就會接收多少個高電平。371電機中的碼盤就是這樣的,他是334線碼盤,具有較高的測速精度,也就是電機

2、轉一圈輸出334個脈沖,芯片上已集成了脈沖整形觸發電路,輸出的是矩形波,直接接單片機IO就OK。             增量式旋轉編碼器通過內部兩個光敏接受管轉化其角度碼盤的時序和相位關系,得到其角度碼盤角度位移量增加(正方向)或減少(負方向)。下圖為編碼器的原理圖:編碼器.jpg (2.85 KB, 下載次數: 32)下載附件  保存到相冊 2014-3-4 20:16 上傳圖2 增量式旋轉編碼器A,B兩點對應兩個光敏接受管,A,B兩點間距為 S2 ,碼盤的光柵間距分別為S0和S1

3、。S0+S1的距離是S2的四倍。這樣保證了A,B波形相位相差90度。旋轉的反向不同,鋸齒波A,B先到達高電平的順序就會不同,如上圖左側所示,順序的不同,就可以得到旋轉的方向。2.stm32編碼器接口模式(寄存器)        stm32的編碼器接口模式在STM32中文參考手冊中有詳細的說明,在手冊273頁,14.3.12節。程序是完全按照 下圖方式,設置寄存器的。      請到本文尾下載STM32中文參考手冊        stm32編碼器.jpg (

4、67.34 KB, 下載次數: 98)下載附件  保存到相冊 2014-3-4 20:33 上傳圖3         從圖3中可以看出,TI1波形先于TI2波形90°時,每遇到一個邊沿變化是,計數器加1(可以通過寄存器設置加減),可以看出一個光柵,被計數了4次。TI1波形后于TI2波形90°時 ,每遇到一次邊沿變化,計數器減1。 1. /TIM2_Encoder_Init,Tim2_CH1(PA0);Tim2_CH2(PA1)2. /arr:自動重裝值 0XFFFF3. /psc:時鐘預分頻數 

5、       ,不分頻4. void TIM2_Encoder_Init(u16 arr,u16 psc)5. 6.     RCC->APB1ENR|=1<<0;       /TIM2時鐘使能7.         RCC->APB2ENR|=1<<2;       /使能PORTA時鐘8.       

6、60; 9.     GPIOA->CRL&=0XFFFFFF00;   /PA0、PA1 清除之前設置10.     GPIOA->CRL|=0X00000044;   /PA0、PA1 浮空輸入11.             12.     TIM2->ARR=arr;            /設定

7、計數器自動重裝值 13.     TIM2->PSC=psc;            /預分頻器14.15.         TIM2->CCMR1 |= 1<<0;          /輸入模式,IC1FP1映射到TI1上16.         TIM2->CCMR1 |= 1<&

8、lt;8;          /輸入模式,IC2FP2映射到TI2上17.         TIM2->CCER |= 0<<1;                  /IC1不反向18.         TIM2->CCER |= 0<<5;  

9、0;        /IC2不反向19.         TIM2->SMCR |= 3<<0;                  /所用輸入均在上升沿或下降沿有效20.         TIM2->CR1 |= 1<<0;    

10、             /使能計數器21. 復制代碼3 硬件用到的模塊有STM32核心板、L298電機驅動、371帶編碼器電機(1:34)。這里主要介紹一下電機,1:34指的是電機軸轉動34圈,電機輸出1圈。1:X,X值越小,電機的輸出轉速也就越快,扭矩也就越小;反之,X值越大,電機的輸出轉速越慢,扭矩也越大。電機實物圖.jpg (53.17 KB, 下載次數: 32)下載附件  保存到相冊 2014-3-5 09:27 上傳圖4 電機實物圖左邊兩根黃線是電機兩極。綠線和白線是脈沖輸出線,分別

11、接編碼器的接收管A、B,用一根可以測得速度,兩根同時用可測出電機速度與轉向。紅線和黑線是編碼器電源接線,紅正黑負,電壓3.3V-5V,不不可接反。4 控制代碼工作指示燈、電機方向與速度控制代碼。1. /LED IO 初始化 端口PD.2  運行指示燈2. void LED_Init(void)3.                     4.         RCC->A

12、PB2ENR|=1<<5;      /使能PORTD時鐘         5.         GPIOD->CRL&=0XFFFFF0FF;6.         GPIOD->CRL|=0X00000300;  /PD.2推挽輸出7.         GPIOD-

13、>ODR|=1<<2;        /PD.2輸出高 8. 9. /電機旋轉方向控制信號端口初始化10. /PC10推挽輸出,輸出高11. void M_Init(void)12. 13.         RCC->APB2ENR|=1<<4;      /使能PORTC時鐘14.         GPIOC->CRL&=0X

14、FFFFFF00;15.         GPIOC->CRL|=0X00000033;  /PC10推挽輸出16.         GPIOC->ODR|=0XF<<0;             /PC10輸出高電平17. 18.19. /定時器TIM3,PWM輸出初始化,CH1(PA6)20. /arr:自動重裝值21. /psc:時鐘預分頻數22.

15、 /設置自動重裝值為900,那么PWM頻率=72000/900=8Khz23. /見STM32參考手冊,14.3.9PWM模式。24. void TIM3_PWM_Init(u16 arr,u16 psc) /arr設定計數器自動重裝值   25.                                     /psc預分頻器不

16、分頻,psc=026. 27.         RCC->APB1ENR|=1<<1;       /TIM3時鐘使能    28.                   29.         GPIOA->CRL&=0XF0FFFFFF;/PA6輸出30. 

17、0;       GPIOA->CRL|=0X0B000000;/復用功能輸出           31.         GPIOA->ODR|=1<<6;/PA6上拉        32.33.         TIM3->ARR=arr;/設定計數器自動

18、重裝值 34.         TIM3->PSC=psc;/預分頻器不分頻35.         36.         TIM3->CCMR1|=6<<4;  /CH1 PWM1模式        高電平有效         37.   &#

19、160;     TIM3->CCMR1|=1<<3; /CH1預裝載使能38.39.         TIM3->CCER|=1<<0;   /OC1 輸出使能   40.41.         TIM3->CR1=0x0080;   /ARPE使能 42.         

20、TIM3->CR1|=0x01;    /使能定時器3 43. 44.45. /電機方向與速度控制,速度調節范圍為-100+10046. /大于0時,正轉,小于0時,反轉47. / 占空比低于0.4時電機不轉48. /(占空比是指高電平在一個周期之內所占的時間比率)49. /TIM3->CCR1的設定范圍為0900(因為arr=900)50. /見STM32參考手冊,14.3.9PWM模式。51. void Motor_Speed_Control(s16 motorSpeed)         52.

21、53.     s16 speed = 0 ;        54.         55.     if(motorSpeed>100)  speed = 100;56.             else if (motorSpeed<-100)  speed = -100;57.   

22、0;                     else  speed = motorSpeed;58.         if(speed = 0)59.         60.                 M_1 =

23、 0;61.                 M_2 = 0;62.         63.             else if(speed > 0)64.                 65.       

24、                  M_1 = 0;66.                         M_2 = 1;67.                      

25、60;  TIM3->CCR1 = speed * 9;68.                 69.                         else70.                   

26、      71.                                 M_1 = 1;72.                            

27、;     M_2 = 0;73.                                 TIM3->CCR1 = -speed * 9;74.                     

28、0;   75. 76.復制代碼電機速度與方向檢測代碼1. /TIM2_Encoder_Init,Tim2_CH1(PA0);Tim2_CH2(PA1)2. /arr:自動重裝值 0XFFFF3. /psc:時鐘預分頻數        ,不分頻4. /見STM32中文手冊 14.3.12編碼器接口模式5. void TIM2_Encoder_Init(u16 arr,u16 psc)6. 7.     RCC->APB1ENR|=1<<0;    

29、   /TIM2時鐘使能8.         RCC->APB2ENR|=1<<2;       /使能PORTA時鐘9.         10.     GPIOA->CRL&=0XFFFFFF00;   /PA0、PA1 清除之前設置11.     GPIOA->CRL|=0X00000044;   /PA

30、0、PA1 浮空輸入12.             13.     TIM2->ARR=arr;            /設定計數器自動重裝值 14.     TIM2->PSC=psc;            /預分頻器15.16.        

31、0;TIM2->CCMR1 |= 1<<0;          /輸入模式,IC1FP1映射到TI1上17.         TIM2->CCMR1 |= 1<<8;          /輸入模式,IC2FP2映射到TI2上18.         TIM2->CCER |= 0<<1;  

32、60;               /IC1不反向19.         TIM2->CCER |= 0<<5;           /IC2不反向20.     TIM2->SMCR |= 3<<0;            

33、;      /所用輸入均在上升沿或下降沿有效21.         TIM2->CR1 |= 1<<0;                  /使能計數器22. 23. /計數寄存器賦值24. void TIM2_Encoder_Write(int data)25. 26.     TIM2->CNT = data;27. 28. /

34、讀計數個數29. int TIM2_Encoder_Read(void)30. 31.     TIM2_Encoder_Write(0);        /計數器清032.         delay_ms(10);          /檢測時間,可調節33.     return (int)(s16)(TIM2->CNT);     &#

35、160;     /數據類型轉換34.                              /記錄邊沿變化次數(一個柵格被記錄4次)35. 復制代碼這里我們只顯示邊沿變化次數,沒有具體的算出速度。主函數1. int main(void)2. 3. /        motorSpeed的范圍為

36、-100 +100;4.         s16 motorSpeed = 100; 5.         Stm32_Clock_Init(9); /系統時鐘設置6.         delay_init(72);             /延時初始化7.         ua

37、rt_init(72,9600);  /串口1初始化8.         LED_Init();                         /初始化與LED連接的硬件接口9.         M_Init();                           /初始化電機運行方向控制端口10.    

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論