




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 機(jī)電控制工程技術(shù)作 業(yè)AVR單片機(jī)步進(jìn)電機(jī)實(shí)驗(yàn)姓名班級(jí)目錄 TOC o 1-3 h z u 一、實(shí)驗(yàn)?zāi)康?PAGEREF _Toc388138515 h 1二、實(shí)驗(yàn)任務(wù) PAGEREF _Toc388138516 h 1三、實(shí)驗(yàn)設(shè)備 PAGEREF _Toc388138517 h 1四、實(shí)驗(yàn)思路及過(guò)程 PAGEREF _Toc388138518 h 14.1實(shí)驗(yàn)箱中基本的器件及其控制方式: PAGEREF _Toc388138519 h 14.2程序流程圖 PAGEREF _Toc388138520 h 24.3代碼編寫(xiě) PAGEREF _Toc388138521 h 3五、程序調(diào)試 PAG
2、EREF _Toc388138522 h 5六、感想 PAGEREF _Toc388138523 h 7七、項(xiàng)目分工 PAGEREF _Toc388138524 h 7八、附錄 PAGEREF _Toc388138525 h 7實(shí)驗(yàn)?zāi)康膶W(xué)習(xí)使用單片機(jī)編程軟件ICCV7 for AVR以及燒寫(xiě)軟件progisp了解并使用ATmega8單片機(jī)及其外圍電路實(shí)驗(yàn)任務(wù)通過(guò)電位計(jì)控制電機(jī)轉(zhuǎn)速,按鍵控制轉(zhuǎn)向,并在數(shù)碼管上穩(wěn)定的顯示當(dāng)前轉(zhuǎn)速 實(shí)驗(yàn)設(shè)備機(jī)電控制工程實(shí)驗(yàn)教學(xué)平臺(tái)實(shí)驗(yàn)箱PC一臺(tái)實(shí)驗(yàn)思路及過(guò)程實(shí)驗(yàn)箱中基本的器件及其控制方式:實(shí)驗(yàn)箱中單片機(jī)開(kāi)發(fā)板如下圖:圖表 SEQ 圖表 * ARABIC 1 單片機(jī)開(kāi)
3、發(fā)板硬件圖解硬件介紹該實(shí)驗(yàn)中用到了,ATmega8的最小系統(tǒng)(晶振(11.059MHZ),濾波電路,復(fù)位電路,ISP下載,電源),以及外圍器件(4位數(shù)碼管及其驅(qū)動(dòng)芯片ZLG7289,4個(gè)LED燈,2個(gè)中斷按鈕,1個(gè)旋轉(zhuǎn)電位計(jì),以及24BYJ48A 型步進(jìn)電機(jī)和L298芯片)外圍器件的工作原理簡(jiǎn)介4位數(shù)碼管由ZLG7289芯片驅(qū)動(dòng),采用的驅(qū)動(dòng)方式為動(dòng)態(tài)顯示,ATmega8通過(guò)PD57管腳與ZLG7289之間進(jìn)行數(shù)據(jù)傳送。4個(gè)LED燈與PC03管腳相連,當(dāng)管腳輸出低電平時(shí),LED點(diǎn)亮。2個(gè)中斷開(kāi)關(guān)與PD2、PD3相連,其中斷方式可以為電平觸發(fā)和沿觸發(fā)旋轉(zhuǎn)電位計(jì)輸出電壓為05V,與ADC7相連,通過(guò)
4、ATmega8中ADC模塊可以得到10位精度的電壓數(shù)字量值。24BYJ48A 型步進(jìn)電機(jī)為4相直流步進(jìn)電機(jī),其工作電壓為12V,由L298芯片控制,L298芯片與ATmega8通過(guò)PA14相連。該步進(jìn)電機(jī)的通電方式為四相單雙八拍。其步距角=5.625/64其轉(zhuǎn)速計(jì)算公式為n=605.625/64f360r/min程序流程圖圖表 SEQ 圖表 * ARABIC 2 程序流程圖否是初始化IO初始化定時(shí)器開(kāi)中斷采集AD計(jì)算電機(jī)頻率f顯示f計(jì)算定時(shí)器初值T1溢出中斷T1重裝載初值是否正轉(zhuǎn)正轉(zhuǎn)脈沖反轉(zhuǎn)脈沖外部中斷0外部中斷1改變方向標(biāo)志改變方向標(biāo)志開(kāi)始代碼編寫(xiě)利用ICCV7 for AVR軟件編寫(xiě)單片機(jī)
5、程序新建一個(gè)project,在project中新建一個(gè)c程序。利用Application Builder按鈕輔助建立C程序。CPU設(shè)置:選擇M8,晶振選11.059MHZ,選擇INT0和INT1,選擇下降沿中斷;端口設(shè)置:port B 14,port C03,portD57改為輸出(O),值默認(rèn)為零時(shí)間計(jì)數(shù)器:選擇Time1,計(jì)數(shù)溢出中斷,初始計(jì)時(shí)時(shí)間選擇50HZADC模塊設(shè)置:?jiǎn)⒂肁DC模塊,ADC模塊使能,選用開(kāi)始轉(zhuǎn)換和連續(xù)轉(zhuǎn)換以及ADC 轉(zhuǎn)換結(jié)束中斷使能,10位精度,右對(duì)齊最后在設(shè)置中添加主函數(shù)即Include”main”()將其他控制代碼添入程序,完整程序見(jiàn)附錄程序控制的基本思路為,由
6、AD7采集電位計(jì)電量并進(jìn)行模數(shù)轉(zhuǎn)換后得到value,該value由對(duì)應(yīng)的函數(shù)公式轉(zhuǎn)換為定時(shí)計(jì)數(shù)器初值TCNT1H和TCNT1L,即改變定時(shí)長(zhǎng)短,然后在定時(shí)計(jì)數(shù)溢出中斷程序中,執(zhí)行電機(jī)換相指令,即可以完成由電位器控制電機(jī)轉(zhuǎn)速任務(wù);電機(jī)正反轉(zhuǎn)控制由外部中斷INT0和INT1改變標(biāo)志變量,進(jìn)而電機(jī)換相方向即可;數(shù)碼管顯示由頭文件中對(duì)應(yīng)程序完成。程序調(diào)試在基礎(chǔ)實(shí)驗(yàn)第一次運(yùn)行時(shí),不管怎么調(diào)電位計(jì),電機(jī)的運(yùn)行頻率有變化,但是電機(jī)怎么都不轉(zhuǎn)。后來(lái)查程序發(fā)現(xiàn):當(dāng)變量count1求得高八位并賦值給TCNT1H后,電機(jī)不轉(zhuǎn),當(dāng)直接給TCNT1H賦值為0 xFF時(shí),電機(jī)轉(zhuǎn)動(dòng)。在調(diào)試擴(kuò)展實(shí)驗(yàn)的時(shí)候,發(fā)現(xiàn)不管怎么調(diào)節(jié)電
7、位計(jì),數(shù)碼管所顯示的始終為0000,仔細(xì)檢查發(fā)現(xiàn)了問(wèn)題所在:計(jì)算角度的關(guān)系中,由于360/2048這兩個(gè)數(shù)均為整型,相除后得零,應(yīng)該改為0.087890625*2,。改后,單片機(jī)運(yùn)行出現(xiàn)問(wèn)題。當(dāng)旋轉(zhuǎn)電位計(jì)到一定值后,按下按鍵電機(jī)方向反向,數(shù)碼管顯示的角度一直減小到負(fù)值,同時(shí)在正向轉(zhuǎn)動(dòng)時(shí),電位計(jì)旋轉(zhuǎn)到最大值的時(shí)候,數(shù)碼管也不顯示360。這種現(xiàn)象有時(shí)候出現(xiàn),有時(shí)候則正常,我們反復(fù)檢查程序也沒(méi)發(fā)現(xiàn)錯(cuò)誤。經(jīng)過(guò)思考,我們發(fā)現(xiàn),如果當(dāng)電機(jī)沒(méi)有轉(zhuǎn)到電位計(jì)AD值所對(duì)應(yīng)的角度時(shí),按下反向鍵就會(huì)產(chǎn)生這樣的問(wèn)題。因此在操作過(guò)程中,我們要避免電機(jī)還沒(méi)停止的時(shí)候按下反向按鍵。之后程序一切正常。感想程序中容易出現(xiàn)一些不起
8、眼的小錯(cuò)誤,比如漏掉分號(hào),或者變量的類型不匹配導(dǎo)致賦值不成功;兩個(gè)int變量相除時(shí)應(yīng)該先轉(zhuǎn)換為float型或者直接賦值;還有電機(jī)運(yùn)行頻率有一定范圍,太小電機(jī)就不轉(zhuǎn)了。程序最終調(diào)試成功,還是有一定成就感的,雖然程序在我們的獨(dú)立思考和助教的幫助下,并沒(méi)有那么難,但是畢竟是第一次接觸單片機(jī),能夠調(diào)試成功還是付出了一番努力的。因?yàn)閱纹瑱C(jī)對(duì)工科生很重要,我想,我在以后的工作和學(xué)習(xí)中還會(huì)再接觸到它,我應(yīng)該再接再勵(lì),在以后有機(jī)會(huì)的時(shí)候更加深入研究它,也讓自己的能力有進(jìn)一步的提高項(xiàng)目分工賀英杰:配置,基礎(chǔ)實(shí)驗(yàn)電位計(jì)控制轉(zhuǎn)速,擴(kuò)展實(shí)驗(yàn)電位計(jì)控制轉(zhuǎn)角崔家浩:基礎(chǔ)實(shí)驗(yàn)數(shù)碼管顯示轉(zhuǎn)速,擴(kuò)展實(shí)驗(yàn)數(shù)碼管顯示角度孫汶慧:基
9、礎(chǔ)作業(yè)四相八拍,擴(kuò)展作業(yè)四相雙四拍陳柯宇:LED燈顯示速度快慢熊宇飛:基礎(chǔ)實(shí)驗(yàn)正反轉(zhuǎn),擴(kuò)展實(shí)驗(yàn)正反轉(zhuǎn)附錄基礎(chǔ)實(shí)驗(yàn)/ICC-AVR application builder : 2014/5/11 23:58:19/ Target : M8/ Crystal: 11.059Mhz#include #include #include g7289.h#include delay.h#define A() (PORTB = 0B00000010) #define B() (PORTB = 0B00001000) #define C() (PORTB = 0B00000100) #define D() (
10、PORTB = 0B00010000) #define AB() (PORTB = 0B00001010) #define BC() (PORTB = 0B00001100) #define CD() (PORTB = 0B00010100) #define DA() (PORTB = 0B00010010)int step=0;int dir_flag=1;int speed=0;int num=0;float sum=0;float f=0;int temp;int value;char count1=0,count2=0;char count=0;void port_init(void)
11、 PORTB = 0 x00; DDRB = 0 x1E; PORTC = 0 x00; /m103 output only DDRC = 0 x0F; PORTD = 0 x00; DDRD = 0 xE0;/TIMER1 initialize - prescale:1024/ WGM: 0) Normal, TOP=0 xFFFF/ desired value: 50Hz/ actual value: 50.232Hz (0.5%)void timer1_init(void) TCCR1B = 0 x00; /stop TCNT1H = 0 xFF; /setup TCNT1L = 0 x
12、29; OCR1AH = 0 x00; OCR1AL = 0 xD7; OCR1BH = 0 x00; OCR1BL = 0 xD7; ICR1H = 0 x00; ICR1L = 0 xD7; TCCR1A = 0 x00; TCCR1B = 0 x05; /start Timer#pragma interrupt_handler timer1_ovf_isr:iv_TIM1_OVFvoid timer1_ovf_isr(void) /TIMER1 has overflowed TCNT1H = 0 xFF; /reload counter high value TCNT1L = count
13、2; /reload counter low value if(dir_flag = 1) /正轉(zhuǎn) if(step = 0) A(); else if(step = 1) AB(); else 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 = 0) /反轉(zhuǎn) if(step = 0) A(); else if(step = 1) DA();
14、 else if(step = 2) D(); else if(step = 3) CD(); else if(step = 4) C(); else if(step = 5) BC(); else if(step = 6) B(); else if(step = 7) AB(); step+; if(step = 8) step = 0;/ADC initialize/ Conversion time: 150uSvoid adc_init(void) ADCSR = 0 x00; /disable adc ADMUX = 0 x07; /select adc input 0 ACSR =
15、0 x80; ADCSR = 0 xEF;#pragma interrupt_handler adc_isr:iv_ADCvoid adc_isr(void) value=ADCL; value|=(int)ADCH 800)/旋轉(zhuǎn)電位計(jì)輸出大小對(duì)應(yīng)LED燈亮滅個(gè)數(shù)PORTC=0 xf0;else if(value600)PORTC=0 x01;else if(value400)PORTC=0 x03;else if(value200)PORTC=0 x07;elsePORTC=0 xff;/conversion complete, read value (int) using. / valu
16、e=ADCL; /Read 8 low bits first (important) / value|=(int)ADCH 8; /read 2 high bits and shift into top byte#pragma interrupt_handler int0_isr:iv_INT0void int0_isr(void) dir_flag=0;/external interupt on INT0#pragma interrupt_handler int1_isr:iv_INT1void int1_isr(void) dir_flag=1;/external interupt on
17、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 x0A; GICR = 0 xC0; TIMSK = 0 x04; /timer interrupt sources SEI(); /re-enable interrupts /all peripherals a
18、re now initialized/void main(void) init_devices(); while(1) temp=value; if(num10) sum+=temp; num+; else num=0; sum=sum/10; f=50.0+(450.0/1023.0)*sum; /count=255-10799.8/f; /count1=(int)(65535-10799.8/f)/256; count2=(int)(65535-10799.8/f)%256; sum=0; speed=100*60*f/(2*4*8*64); /速度放大100倍 G7289_SendByt
19、e(0 xa4); Show_num(speed); delay(300); /insert your functional code here.擴(kuò)展實(shí)驗(yàn)(16組)/ICC-AVR application builder : 2014/5/13 9:39:19/ Target : M8/ Crystal: 11.059Mhz#include #include #include g7289.h#include delay.h#define A() (PORTB = 0B00000010) #define B() (PORTB = 0B00001000) #define C() (PORTB =
20、0B00000100) #define D() (PORTB = 0B00010000) #define AB() (PORTB = 0B00001010) #define BC() (PORTB = 0B00001100) #define CD() (PORTB = 0B00010100) #define DA() (PORTB = 0B00010010)int step=0;int n=0;int dir_flag=1;int angle=0;/int num=0;/float sum=0;/float f=0;/int temp;int value;int count1=0;int co
21、unt2=2046;void port_init(void) PORTB = 0 x00; DDRB = 0 x1E; PORTC = 0 x00; /m103 output only DDRC = 0 x0F; PORTD = 0 x00; DDRD = 0 xE0;/TIMER1 initialize - prescale:1024/ WGM: 0) Normal, TOP=0 xFFFF/ desired value: 50Hz/ actual value: 50.232Hz (0.5%)void timer1_init(void) TCCR1B = 0 x00; /stop TCNT1
22、H = 0 xFF; /setup TCNT1L = 0 x29; OCR1AH = 0 x00; OCR1AL = 0 xD7; OCR1BH = 0 x00; OCR1BL = 0 xD7; ICR1H = 0 x00; ICR1L = 0 xD7; TCCR1A = 0 x00; TCCR1B = 0 x05; /start Timer#pragma interrupt_handler timer1_ovf_isr:iv_TIM1_OVFvoid timer1_ovf_isr(void) /TIMER1 has overflowed TCNT1H = 0 xFF; /reload cou
23、nter high value TCNT1L = 0 x35; /reload counter low value if(dir_flag = 1) /正轉(zhuǎn) if(step = 0) AB(); else if(step = 1) BC(); else if(step = 2) CD(); else if(step = 3) DA(); if (count12*value) PORTB = 0B00000000; else count1+; n+; else if(dir_flag = 0) /反轉(zhuǎn) if(step = 0) AB(); else if(step = 1) DA(); else
24、 if(step = 2) CD(); else if(step = 3) BC(); if (count22*value) PORTB = 0B00000000; else count2-; n-; step+; if(step = 4) step = 0;/ADC initialize/ Conversion time: 150uSvoid adc_init(void) ADCSR = 0 x00; /disable adc ADMUX = 0 x07; /select adc input 0 ACSR = 0 x80; ADCSR = 0 xEF;#pragma interrupt_ha
25、ndler adc_isr:iv_ADCvoid adc_isr(void) value=ADCL; value|=(int)ADCH 800)PORTC=0 xf0;else if(value600)PORTC=0 x01;else if(value400)PORTC=0 x03;else if(value200)PORTC=0 x07;elsePORTC=0 xff; /conversion complete, 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#pragma interrupt_handler int0_isr:iv_INT0void int0_isr(void) dir_flag=0; co
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版高考?xì)v史一輪復(fù)習(xí)第二單元西方民主政治與社會(huì)主義制度的建立課題六羅馬法的起源與發(fā)展學(xué)案含解析新人教版
- 垂直傳播微生物的檢測(cè)及管理及試題及答案
- 全面提升行政管理知識(shí)的試題及答案
- 國(guó)際微生物檢測(cè)標(biāo)準(zhǔn)的演變?cè)囶}及答案
- 中學(xué)省級(jí)課題申報(bào)書(shū)
- 一年級(jí)下數(shù)學(xué)教案數(shù)的順序-人教新課標(biāo)
- 2025至2031年中國(guó)異形寶石吊墜行業(yè)投資前景及策略咨詢研究報(bào)告
- 注冊(cè)會(huì)計(jì)師考試2025年企業(yè)績(jī)效考核指標(biāo)設(shè)置試題及答案
- 2025至2030年中國(guó)小諾霉素?cái)?shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025年中國(guó)地毯污漬清潔劑市場(chǎng)調(diào)查研究報(bào)告
- 第五章 中國(guó)特色社會(huì)主義理論體系的形成發(fā)展(一)
- 診所備案申請(qǐng)表格(衛(wèi)健委備案)
- 小學(xué)三年級(jí)西師大版數(shù)學(xué)下冊(cè)計(jì)算題專題練習(xí)題
- biomedical Signal processing 生物醫(yī)學(xué)信號(hào)處理 Chapter
- 橫向分布系數(shù)計(jì)算剖析
- 五金沖壓車間質(zhì)量管理規(guī)范(含表格)
- 病媒生物防制PPT課件
- 雷達(dá)原理與系統(tǒng)(課堂PPT)
- 華創(chuàng)CCWE1500風(fēng)機(jī)故障處理手冊(cè)范本
- 反激式變壓器設(shè)計(jì)軟件
- 部編版小學(xué)五年級(jí)上冊(cè)語(yǔ)文第18課《慈母情深》課文原文及教案
評(píng)論
0/150
提交評(píng)論