AVR單片機步進電機_第1頁
AVR單片機步進電機_第2頁
AVR單片機步進電機_第3頁
AVR單片機步進電機_第4頁
AVR單片機步進電機_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、-PAGE 1. z -. - 考試資料基于AVR單片機的步進電機控制組長: 王勝杰10005041組 員: 輪11071050組 員: 少維 38072128 組 員: 冶西原 38072130班級:110716-. z-. z-. z-. z基于AVR單片機的步進電機控制摘 要這篇文章主要是講步進電動機的開展,國的現狀和步進電動機未來的開展前景。步進電機主要由采用AVR單片機作為主控單元,L298作為驅動芯片。詳細介紹了本調速控制系統(tǒng)的工作原理、光電編碼器接口電路、驅動接口電路和相應的各種控制軟件設計。繪制了原理圖和PCB板圖,撰寫了程序源代碼。這期間主要使用protel99軟件繪制原理圖

2、和制板。最后通過硬件的調試驗證程序代碼的實際功能,完成對控制器的設計。實驗結果說明,設計的調速控制器具有良好的工作性能。關鍵詞AVR單片機 步進電動機 控制器目 錄TOC o 1-3 h z uHYPERLINK l _Toc387875626第一章、背景知識1HYPERLINK l _Toc3878756271.1步進電機開展 PAGEREF _Toc387875627 h 1HYPERLINK l _Toc3878756281.2步進電機的應用前景 PAGEREF _Toc387875628 h 1HYPERLINK l _Toc3878756291.3設計容 PAGEREF _Toc38

3、7875629 h 1HYPERLINK l _Toc387875630第二章、任務 PAGEREF _Toc387875630 h 2HYPERLINK l _Toc3878756312.1設計任務 PAGEREF _Toc387875631 h 2HYPERLINK l _Toc3878756322.2 任務分工 PAGEREF _Toc387875632 h 2HYPERLINK l _Toc387875633第三章、單片機資源設置 PAGEREF _Toc387875633 h2HYPERLINK l _Toc3878756343.1 硬件設置 PAGEREF _Toc38787563

4、4 h 2HYPERLINK l _Toc3878756363.2 ICCAVR 向導對程序進展初始化 PAGEREF _Toc387875636 h 3HYPERLINK l _Toc387875637第四章、程序編寫 PAGEREF _Toc387875637 h 3HYPERLINK l _Toc3878756384.1程序流程圖 PAGEREF _Toc387875638 h 3HYPERLINK l _Toc3878756414.2源代碼 PAGEREF _Toc387875641 h 4HYPERLINK l _Toc387875642第五章、實驗結果 PAGEREF _Toc38

5、7875642 h 4HYPERLINK l _Toc3878756435.1調試過程 PAGEREF _Toc387875643 h 4HYPERLINK l _Toc3878756445.2實驗現象 PAGEREF _Toc387875644 h 4HYPERLINK l _Toc387875645學習心得 PAGEREF _Toc387875645 h 5HYPERLINK l _Toc387875646參考文獻 PAGEREF _Toc387875646 h 6第一章、背景知識1.1步進電機開展步進電動機已成為除直流電動機和交流電動機以外的第三類電動機。傳統(tǒng)電動機作為機電能量轉換裝置,

6、在人類的生產和生活進入電氣化過程中起著關鍵的作用。為適應這些要求,開展了一系列新的具備控制功能的電動機系統(tǒng),其中較有自己特點,且應用十分廣泛的一類便是步進電動機。步進電動機的開展與計算機工業(yè)密切相關。自從步進電動機在計算機外設備中取代小型直流電動機以后,使其設備的性能提高,很快地促進了步進電動機的開展。1.2步進電機的應用前景當前最有開展前景的當屬混合式步進電動機,而混合式電動機又向以下四個方免開展:開展趨勢之一,是繼續(xù)沿著小型化的方向開展。隨著電動機本身應用領域的拓寬以及各類整機的不斷小型化,要求與之配套的電動機也必須越來越小,在57、42機座號的電動機應用了多年后,現在其機座號向39、35

7、、30、25方向向下延伸。瑞士ESCAP公司最近還研制出外徑僅10mm的步進電動機。開展趨勢之二,是改圓形電動機為方形電動機。由于電動機采用方型構造,使得轉子有可能設計得比圓形大,因而其力矩體積比將大為提高。同樣機座號的電動機,方形的力矩比圓形的將提高3040。開展趨勢之三,對電動機進展綜合設計。即把轉子位置傳感器,減速齒輪等和電動機本體綜合設計在一起,這樣使其能方便地組成一個閉環(huán)系統(tǒng),因而具有更加優(yōu)越的控制性能。開展趨勢之四,向三相步進電機方向開展。目前廣泛應用的二相和四相電動機,其振動和噪聲較大,而三相步進電機具有明顯的優(yōu)勢性,而價格和二四相步進電機相當。 開展趨勢之五,向多元化方向開展。

8、為滿足多元化的市場需求而研發(fā)出新型步進電機使得步進電機的應用圍更廣泛,應用更簡便。以運控公司為代表,自2004年開發(fā)出正齒輪減速偏心軸步進電機后,又陸續(xù)開發(fā)出斜齒輪減速步進電機,精細行星減速步進電機、標準行星減速步進電機、普通行星減速步進電機,2007年又開發(fā)出直線步進電機、防水步進電機、配剎車的步進電機,2021年又推出配編碼器的步進電機,2021年即將推出防爆步進電機。開展趨勢之六,向低價格高品質方向開展。2003年以前步進電機價格相對較高,于是步進電機企業(yè)紛紛分家,眾多步進電機廠家如雨后春筍般成立,其中一些廠商為爭取客戶,不惜降低品質,壓低價格,導致2005年到2021年期間步進電機市場

9、平均品質下降。經過市場經濟幾年來的的優(yōu)勝劣汰,和用戶對步進電機品質的認識,使得運控等高品質的步進電機和驅動器廠商得到市場的高度認可。隨著高品質步進電機及驅動器的大規(guī)模標準化生產以降低生產本錢,未來的假設干年高品質步進電機及驅動器會持續(xù)占領主導地位。1.3設計容在各類機電系統(tǒng)中,隨著社會的快速開展,步進電機已廣泛運用于工業(yè)控制、日常生活領域的各個方面。因此設計一種新的步進電機控制器,它具有調速精度高、響應速度快和耗損低等特點。本設計由AVR單片機、L298 驅動器及液晶顯示構成的步進電機控制器。本設計具有擴展功能:具有通信能力,可接收其他數據設備發(fā)來的命令,或將結果傳送到其他數據設備,可具備與上

10、位機的通信能力,控制更給直觀、簡便。第二章、任務2.1設計任務(1)根本容按鍵切換控制電機正反轉,數碼管顯示電機轉速,電位計控制電機轉速。(2)擴展容按鍵切換控制電機正反轉,電機通電方式為四相雙四拍,運行方式為位置控制,LED為速度快慢,數碼管顯示電機轉速2.2任務分工(1)根本容程序的編寫調試以及實驗報告的撰寫負責人員:少維 王勝杰 (2)擴展容程序的編寫及調試負責人員:輪 冶西原第三章、單片機資源設置3.1硬件設置采用AVR單片機作為主控單元,L298作為驅動芯片。L298是ST公司生產的一種高電壓、大電流電機驅動芯片。該芯片的主要特點是工作電壓高,最高工作電壓可達46V;輸出電流大,瞬間

11、峰值電流可達3A,持續(xù)工作電2A;含兩個H橋的高電壓大電流全橋式驅動器,可以用來驅動直流電動機和步進電動機、繼電器、線圈等感性負載;采用標準TTL邏輯電平信號控制;具有兩個使能控制端,在不受輸入信號影響的情況下允許或制止器件工作;有一個邏輯電源輸入端,使部邏輯電路局部在低電壓下工作;可以外接檢測電阻,將變化量反應給控制電路。步進電機驅動電路如圖,3.2 ICCAVR 向導對程序進展初始化第四章、程序編寫4.1程序流程圖下列圖是整個系統(tǒng)的軟件流程4.2源代碼/ICC-AVR application builder : 2021/5/15 16:56:58/ Target : M8/ Crysta

12、l: 11.059Mhz*include *include *includeg7289.h*define AB() (PORTB = 0B00001010)*define BC() (PORTB = 0B00001100)*define CD() (PORTB = 0B00010100)*define DA() (PORTB = 0B00010010)*define PCA() (PORTC = 0B11111110) /定義電機運行的8個通電相序*define PCB() (PORTC = 0B11111101)*define PCC() (PORTC = 0B11111011)*defin

13、e PCD() (PORTC = 0B11110111)*define PCAB() (PORTC = 0B11111100)*define PCBC() (PORTC = 0B11111001)*define PCCD() (PORTC = 0B11110011)*define PCDA() (PORTC = 0B11110110)int temp,a,dir_mot=0,step=0,sum=0,step1=0;int c,b=0;void port_init(void) PORTB = 0*00; DDRB = 0*1E; PORTC = 0*00; /m103 output only

14、DDRC = 0*0F; PORTD = 0*00; DDRD = 0*E0;/TIMER0 initialize - prescale:1024/ desired value: 100Hz/ actual value: 100.933Hz (0.9%)void timer0_init(void) TCCR0 = 0*00; /stop a=10799.8*2/temp; TT0 = 256-a; /set count TCCR0 = 0*05; /start timer*pragma interrupt_handler timer0_ovf_isr:iv_TIM0_OVFvoid timer

15、0_ovf_isr(void) a=10799.8*2/temp; TT0 = 256-a;/reload counter value b=4*temp; if(cb) c+; if(dir_mot = 0)/電機正轉 sum=1732;if(step = 0) AB();else if(step = 1) BC(); else if(step =2) CD(); else if(step = 3) DA(); else if(dir_mot = 1)/電機反轉sum=0732;if(step = 0) AB();else if(step = 1) DA(); else if(step =2)

16、 CD(); else if(step = 3) BC(); step+;if(step = 4) step = 0;else if( c = b)sum=0000;G7289_SendByte(0*a4); Show_num(sum);/TIMER1 initialize - prescale:1024/ WGM: 0) Normal, TOP=0*FFFF/ desired value: 5Hz/ actual value: 5.002Hz (0.0%)void timer1_init(void) TCCR1B = 0*00; /stop TT1H = 0*F7; /setup TT1L

17、= 0*91; OCR1AH = 0*08; OCR1AL = 0*6F; OCR1BH = 0*08; OCR1BL = 0*6F; ICR1H = 0*08; ICR1L = 0*6F; TCCR1A = 0*00; TCCR1B = 0*05; /start Timer*pragma interrupt_handler timer1_ovf_isr:iv_TIM1_OVFvoid timer1_ovf_isr(void) /TIMER1 has overflowed TT1H = 0*F7; /reload counter high value TT1L = 0*91; /reload

18、counter low value if(dir_mot = 0)/電機正轉 if(step1 = 0) PCA(); else if(step1= 1) PCAB(); else if(step1 = 2) PCB(); else if(step1= 3) PCBC(); else if(step1= 4) PCC(); else if(step1= 5) PCCD(); else if(step1= 6) PCD(); else if(step1= 7) PCDA(); else if(dir_mot = 1)/電機反轉 if(step1= 0) PCDA(); else if(step1

19、 = 1) PCD(); else if(step1 = 2) PCCD(); else if(step1 = 3) PCC(); else if(step1 = 4) PCBC(); else if(step1 = 5) PCB(); else if(step1= 6) PCAB(); else if(step1 = 7) PCA(); step1+; if(step1=8)step1=0;/ADC initialize/ Conversion time: 150uSvoid adc_init(void) ADCSR = 0*00; /disable adc ADMU* = 0*07; /s

20、elect adc input 0ACSR = 0*80; ADCSR = 0*EF;*pragma interrupt_handler adc_isr:iv_ADCvoid adc_isr(void) /conversion plete, read value (int) using. / value=ADCL; /Read 8 low bits first (important) / value|=(int)ADCH 8; /read 2 high bits and shift into top byte temp=ADCL; temp|=(int)ADCH8;*pragma interr

21、upt_handler int0_isr:iv_INT0void int0_isr(void) /e*ternal interupt on INT0dir_mot=0; c=0;*pragma interrupt_handler int1_isr:iv_INT1void int1_isr(void) /e*ternal interupt on INT1 dir_mot=1; c=0;/call this routine to initialize all peripheralsvoid init_devices(void) /stop errant interrupts until set u

22、p CLI(); /disable all interrupts port_init(); timer0_init(); timer1_init(); adc_init(); MCUCR = 0*0A; GICR = 0*C0; TIMSK = 0*05; /timer interrupt sources SEI(); /re-enable interrupts /all peripherals are now initialized/void main(void) init_devices(); /insert your functional code here.*include *incl

23、ude *includeg7289.h /驅動數碼管顯示程序*includedelay.h /延時程序*define ADC_Filter_Num 10 /濾波次數*define A() (PORTB = 0B00000010) /定義電機運行的8個通電相序*define B() (PORTB = 0B00001000)*define C() (PORTB = 0B00000100)*define D() (PORTB = 0B00010000)*define AB() (PORTB = 0B00001010)*define BC() (PORTB = 0B00001100)*define C

24、D() (PORTB = 0B00010100)*define DA() (PORTB = 0B00010010)int dir_flag =0; /轉向標志認為0為正轉,1為反轉char step = 0; /電機通電相序的控制量unsigned int digtemp,temp; /用于存儲ADC的10位數字量int num=0;float sum=0;float f=0;char count=0;void port_init(void) /端口初始化,由軟件直接生成 PORTB = 0*00; DDRB = 0*1E; PORTC = 0*00; /m103 output only DD

25、RC = 0*0F; PORTD = 0*00; DDRD = 0*E0;/TIMER1 initialize - prescale:1024/ WGM: 0) Normal, TOP=0*FFFF/ desired value: 50Hz/ actual value: 50.232Hz (0.5%)void timer1_init(void)/定時器1的初始化 TCCR1B = 0*00; /stop TT1H = 0*FF; /setup TT1L = 0*29; OCR1AH = 0*00; OCR1AL = 0*D7; OCR1BH = 0*00; OCR1BL = 0*D7; ICR

26、1H = 0*00; ICR1L = 0*D7; TCCR1A = 0*00; TCCR1B = 0*05; /start Timer*pragma interrupt_handler timer1_ovf_isr:iv_TIM1_OVFvoid timer1_ovf_isr(void)/定時中斷程序 TT1H = 0*FF; /reload counter high value TT1L = count; /reload counter low value if(dir_flag = 0)/電機正轉 if(step = 0) A(); else if(step = 1) AB(); else

27、 if(step = 2) B(); else if(step = 3) BC(); else if(step = 4) C(); else if(step = 5) CD(); else if(step = 6) D(); else if(step = 7) DA(); else if(dir_flag = 1)/電機反轉 if(step = 0) DA(); else if(step = 1) D(); else if(step = 2) CD(); else if(step = 3) C(); else if(step = 4) BC(); else if(step = 5) B();

28、else if(step = 6) AB(); else if(step = 7) A(); step+;if(step = 8) step = 0;/ADC initialize/ Conversion time: 75uSvoid adc_init(void)/ADC初始化 ADCSR = 0*00; /disable adc ADMU* = 0*07; /select adc input 7ACSR = 0*80; ADCSR = 0*EE;*pragma interrupt_handler adc_isr:iv_ADCvoid adc_isr(void) digtemp=ADCL; d

29、igtemp|=(int)ADCH8; /conversion plete, read value (int) using. / value=ADCL; /Read 8 low bits first (important) / value|=(int)ADCH 800)/旋轉電位計輸出大小對應LED燈亮滅個數PORTC=0*f0;else if(digtemp600)PORTC=0*01;else if(digtemp400)PORTC=0*03;else if(digtemp200)PORTC=0*07;elsePORTC=0*ff; *pragma interrupt_handler in

30、t0_isr:iv_INT0void int0_isr(void)/電機正轉 dir_flag =0;/e*ternal interupt on INT0*pragma interrupt_handler int1_isr:iv_INT1void int1_isr(void)/電機反轉 dir_flag =1;/e*ternal interupt on INT1/call this routine to initialize all peripheralsvoid init_devices(void) /stop errant interrupts until set up CLI(); /disable all interrupts port_init(); timer1_init(); adc_init(); MCUCR = 0*0A; GICR = 0*C0; TIMSK = 0*04; /timer interru

溫馨提示

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

評論

0/150

提交評論