實(shí)驗(yàn)直流電機(jī)驅(qū)動和編碼器脈沖采集_第1頁
實(shí)驗(yàn)直流電機(jī)驅(qū)動和編碼器脈沖采集_第2頁
實(shí)驗(yàn)直流電機(jī)驅(qū)動和編碼器脈沖采集_第3頁
實(shí)驗(yàn)直流電機(jī)驅(qū)動和編碼器脈沖采集_第4頁
實(shí)驗(yàn)直流電機(jī)驅(qū)動和編碼器脈沖采集_第5頁
已閱讀5頁,還剩53頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、實(shí)驗(yàn)直流電機(jī)驅(qū)動和編碼器脈沖采集內(nèi)容概要學(xué)習(xí)學(xué)習(xí)1種種ATmega64資源資源 定時(shí)、計(jì)數(shù)器定時(shí)、計(jì)數(shù)器3演示演示2個(gè)實(shí)驗(yàn):個(gè)實(shí)驗(yàn):(1)直流電機(jī)的驅(qū)動、調(diào)速)直流電機(jī)的驅(qū)動、調(diào)速(2)上述實(shí)驗(yàn)的軟件仿真)上述實(shí)驗(yàn)的軟件仿真自行做自行做3個(gè)實(shí)驗(yàn):個(gè)實(shí)驗(yàn):(1)直流電機(jī)的驅(qū)動)直流電機(jī)的驅(qū)動(2)直流電機(jī)的)直流電機(jī)的PWM調(diào)速調(diào)速(3)光電編碼器脈沖信號的讀取)光電編碼器脈沖信號的讀取控制什么?控制什么?用到哪些單片機(jī)資源?通信模塊和和PC通通信信電源模塊提供動提供動力力輸入輸出模塊按鍵控按鍵控制和狀態(tài)指示制和狀態(tài)指示電機(jī)驅(qū)動模塊駕馭駕馭電機(jī)電機(jī)單片機(jī)模塊電機(jī)控制電機(jī)控制讓直流電機(jī)動起來!M+

2、和M-分別接電源和地,電機(jī)就可以轉(zhuǎn)動交換M+和M-,電機(jī)就反向轉(zhuǎn)動用L298驅(qū)動直流電機(jī)用L298驅(qū)動直流電機(jī)自己動手之一驅(qū)動直流電機(jī)指令的輸入:通過按鍵指令的輸入:通過按鍵按鈕按鈕Stop、F.W.、B.W.作為控制按鈕作為控制按鈕p Stop(PC3,可觸發(fā)外部中斷,可觸發(fā)外部中斷INT5):啟動、停:啟動、停止止p F.W.、B.W.( PC0、PC1,可觸發(fā)外部中斷,可觸發(fā)外部中斷4):正、反轉(zhuǎn):正、反轉(zhuǎn)調(diào)試燈調(diào)試用LED燈,可表示正、反轉(zhuǎn)狀態(tài),運(yùn)行狀態(tài)等,也可以自定義。電機(jī)控制電機(jī)控制I/OPB4、PB5與與L298的輸入引腳相連的輸入引腳相連注意:小心滑塊撞到支架!注意:小心滑塊撞

3、到支架!操作說明進(jìn)行電機(jī)實(shí)驗(yàn)前,確保各接口連接好后,再打開電源。在使用電機(jī)模塊時(shí),先打開電源開關(guān),再打開L298使能開關(guān);關(guān)閉時(shí),先關(guān)閉L298使能開關(guān),再關(guān)閉電源開關(guān)。L298使能開關(guān)電源開關(guān)中斷方式的設(shè)定標(biāo)志位的設(shè)定宏定義 #define isButtonFWDown() (PINC&0B00000001)=0) #define isButtonBWDown() (PINC&0B00000010)=0) #define isButtonZERODown() (PINC&0B00000100)=0) #define isButtonSTOPDown() (PINC&a

4、mp;0B00001000)=0) #define LedFWOn() (PORTA &= 0B11111110) #define LedBWOn() (PORTA &= 0B11111101) #define LedZeroOn() (PORTA &= 0B11111011) #define LedRunOn() (PORTA &= 0B11110111) #define LedFWOff() (PORTA |= 0B00000001) #define LedBWOff() (PORTA |= 0B00000010) #define LedZeroOff()

5、(PORTA |= 0B00000100) #define LedRunOff() (PORTA |= 0B00001000)自定義函數(shù)外部中斷4的處理程序舉例外部中斷5的處理程序舉例主函數(shù) 如何改變電機(jī)的轉(zhuǎn)速?對對L298的控制有單極性、雙極性的控制有單極性、雙極性2種方式。種方式。單極性工作方式指的是在一個(gè)單極性工作方式指的是在一個(gè)PWM周期內(nèi)電周期內(nèi)電機(jī)的電樞只承受單極性的電壓機(jī)的電樞只承受單極性的電壓;雙極性工作方式是指在一個(gè)雙極性工作方式是指在一個(gè)PWM周期內(nèi)電機(jī)周期內(nèi)電機(jī)電樞兩端的電壓呈正負(fù)交替變化。電樞兩端的電壓呈正負(fù)交替變化。電機(jī)調(diào)速(單極性) 以電機(jī)正轉(zhuǎn)為例,在以電機(jī)正轉(zhuǎn)為例

6、,在M+端產(chǎn)生端產(chǎn)生PWM波,波,M-接低電平。則接低電平。則M+為為高電平時(shí),電機(jī)正轉(zhuǎn);為低電平時(shí),電機(jī)停轉(zhuǎn)。高電平時(shí),電機(jī)正轉(zhuǎn);為低電平時(shí),電機(jī)停轉(zhuǎn)。 改變改變PWM波的占空比即可改變電機(jī)的轉(zhuǎn)速,占空比越大,電機(jī)波的占空比即可改變電機(jī)的轉(zhuǎn)速,占空比越大,電機(jī)轉(zhuǎn)速越快。轉(zhuǎn)速越快。 脈沖寬度(簡稱脈寬),就是高電平的時(shí)間。脈沖寬度(簡稱脈寬),就是高電平的時(shí)間。轉(zhuǎn)動時(shí)間轉(zhuǎn)動時(shí)間 停止時(shí)間停止時(shí)間M+電機(jī)正轉(zhuǎn)電機(jī)正轉(zhuǎn)PWM波波HLTton周期周期轉(zhuǎn)動時(shí)間轉(zhuǎn)動時(shí)間占空比占空比PWM(Pulse Width Modulation):脈沖寬度調(diào)制脈沖寬度調(diào)制ssondUTUtU0平平均均電電壓壓如何產(chǎn)

7、生PWM波?(T/C1)用作定時(shí)器:可以用作頻率發(fā)生器等;用作定時(shí)器:可以用作頻率發(fā)生器等;用作計(jì)數(shù)器:可用來對外部引腳的脈沖信號進(jìn)用作計(jì)數(shù)器:可用來對外部引腳的脈沖信號進(jìn)行計(jì)數(shù);行計(jì)數(shù);輸入捕獲功能:可用來測定外部信號的脈寬;輸入捕獲功能:可用來測定外部信號的脈寬;輸出比較匹配功能:可用來產(chǎn)生脈寬調(diào)制信號輸出比較匹配功能:可用來產(chǎn)生脈寬調(diào)制信號(PWM波)。波)。l16位的位的T/C 可以實(shí)現(xiàn)精確的程序定時(shí)可以實(shí)現(xiàn)精確的程序定時(shí)(事件管理事件管理)、波形、波形產(chǎn)生和信號測量。其主要功能如下:產(chǎn)生和信號測量。其主要功能如下:相關(guān)引腳T1(PD6)OC1A(PB5)OC1B(PB6)OC1C(P

8、B7)ICP1(PD4)波形產(chǎn)生模式有關(guān)定時(shí)有關(guān)定時(shí)/計(jì)數(shù)器的幾個(gè)變量計(jì)數(shù)器的幾個(gè)變量 電機(jī)調(diào)速(單極性,快速PWM模式)轉(zhuǎn)動時(shí)間轉(zhuǎn)動時(shí)間 停止時(shí)間停止時(shí)間M+電機(jī)正轉(zhuǎn)電機(jī)正轉(zhuǎn)OCR1ATOP(ICR1)TCNT1TOP比較匹配時(shí)清零比較匹配時(shí)清零溢出時(shí)置位,并進(jìn)行溢出時(shí)置位,并進(jìn)行電機(jī)轉(zhuǎn)向控制電機(jī)轉(zhuǎn)向控制OCR1ABOTTOM軟件設(shè)計(jì)PWM波形產(chǎn)生方法: 我們采用大致20KHz以上的PWM波進(jìn)行電機(jī)的調(diào)速,采用Timer1的模式14,快速PWM模式,分頻為1。使能overflow interrupt 和compare A interrupt中斷,選擇OC1A output mode為disc

9、onnected普通模式,在匹配中斷中清零PB4、PB5,溢出中斷中根據(jù)方向標(biāo)志置位PB4或PB5。 這樣就用單極性方式產(chǎn)生了方向可變的PWM波形。快速PWM模式TOP:。我們要求在20kHz,采用快速PWM模式(模式14),TOP值由ICR1寄存器給定。OCR1A:輸出比較寄存器,記錄輸出比較的脈沖數(shù),即。這樣,如果可以隨時(shí)改變OCR1A的值,就可以產(chǎn)生可調(diào)占空比的PWM波。在模式14中,OCR1A的更新在TCNT1達(dá)到TOP時(shí)刻。輸出比較中斷TCNT1TCNT11OCR1A?比較匹配的標(biāo)志位比較匹配的標(biāo)志位OCF1A置位置位(TIFR)產(chǎn)生產(chǎn)生PWM波形可從引腳波形可從引腳OC1A輸出輸出

10、總開關(guān)總開關(guān)I打開?打開?(SREG)分開關(guān)分開關(guān)OCIE1A打開?打開?(TIMSK)輸出比較輸出比較中斷服務(wù)中斷服務(wù)清空清空OCF1A輸出比較單元雙緩沖輸出比較寄存器OCR1A一直與TCNT1 的值做比較。波形發(fā)生器用比較結(jié)果產(chǎn)生PWM或在輸出比較引腳OC1A輸出可變頻率的信號。比較匹配結(jié)果還可置位比較匹配標(biāo)志OCF1A,用來產(chǎn)生輸出比較中斷請求。相關(guān)寄存器Bit 7 I: 全局中斷使能(總開關(guān)總開關(guān))I 置位時(shí)使能全局中斷。單獨(dú)的中斷使能由其他獨(dú)立的控制寄存器控制。如果I 清零,則不論單獨(dú)中斷標(biāo)志置位與否,都不會產(chǎn)生中斷。lSREG(狀態(tài)寄存器)(狀態(tài)寄存器)相關(guān)寄存器TIMSK(定時(shí)器

11、中斷屏蔽寄存器)(分開關(guān))(定時(shí)器中斷屏蔽寄存器)(分開關(guān)) lBit 5 TICIE1: T/C1 輸入捕捉中斷使能lBit 4 OCIE1A:T/C1 輸出比較 A 匹配中斷使能lBit 3 OCIE1B:T/C1 輸出比較 B 匹配中斷使能lBit 2 TOIE1:T/C1 溢出中斷使能相關(guān)寄存器TIFR(定時(shí)器中斷標(biāo)志寄存器)(定時(shí)器中斷標(biāo)志寄存器) lBit 5 ICF1: T/C1 輸入捕捉標(biāo)志輸入捕捉標(biāo)志lBit 4 OCF1A: T/C1 輸出比較輸出比較 A 匹配標(biāo)志匹配標(biāo)志 當(dāng)當(dāng)TCNT1 與與OCR1A 匹配成功時(shí),該位被設(shè)為匹配成功時(shí),該位被設(shè)為1”。lBit 3 OC

12、F1B: T/C1 輸出比較輸出比較 B 匹配標(biāo)志匹配標(biāo)志lBit 2 TOV1: T/C1 溢出標(biāo)志溢出標(biāo)志相關(guān)寄存器相關(guān)寄存器 TCCR1A(T/C1控制寄存器控制寄存器A) lTCCR1B(T/C1控制寄存器控制寄存器B) lTCCR1C(T/C1控制寄存器控制寄存器C) TCCR1A(T/C1控制寄存器控制寄存器A)TCCR1B(T/C1控制寄存器控制寄存器B)TCCR1C(T/C1控制寄存器控制寄存器C) Bit 7 FOCnA: 強(qiáng)制輸出比較通道A Bit 6 FOCnB: 強(qiáng)制輸出比較通道B Bit 5 FOCnC: 強(qiáng)制輸出比較通道C相關(guān)寄存器(相關(guān)寄存器(5個(gè)個(gè)16位)位)T

13、CNT1(TCNT1H、TCNT1L) (16位的位的T/C1定時(shí)數(shù)據(jù)寄存器)定時(shí)數(shù)據(jù)寄存器)OCR1A(OCR1AH、OCR1AL) (16位的位的T/C1雙緩沖輸出比較寄存器雙緩沖輸出比較寄存器A)OCR1B(OCR1BH、OCR1BL) (16位的位的T/C1雙緩沖輸出比較寄存器雙緩沖輸出比較寄存器B)OCR1C(OCR1CH、OCR1CL) (16位的位的T/C1雙緩沖輸出比較寄存器雙緩沖輸出比較寄存器C)ICR1(ICR1H、ICR1L)()(16位的位的T/C1輸入輸入捕獲寄存器)捕獲寄存器)自己動手之二改變電機(jī)轉(zhuǎn)速Q(mào):如何改變轉(zhuǎn)速?:如何改變轉(zhuǎn)速?A:通過串口改變:通過串口改變O

14、CR1A的值,從而改變的值,從而改變PWM占空比。占空比。通過串口由通過串口由PC機(jī)改變機(jī)改變OCR1A的值,從而改變的值,從而改變直流電機(jī)的轉(zhuǎn)速!直流電機(jī)的轉(zhuǎn)速!單極性方式輸入端輸入端In1為為PWM信號,輸入端信號,輸入端In2為低電平,為低電平,電動機(jī)正轉(zhuǎn);輸入端電動機(jī)正轉(zhuǎn);輸入端In2為為PWM信號,輸入端信號,輸入端In1為低電平,電動機(jī)反轉(zhuǎn)。為低電平,電動機(jī)反轉(zhuǎn)。占空比為占空比為0%時(shí)制動,為時(shí)制動,為100%時(shí)達(dá)到最高速;時(shí)達(dá)到最高速;當(dāng)當(dāng)EnA為低電平時(shí),驅(qū)動橋路上的為低電平時(shí),驅(qū)動橋路上的4個(gè)晶體管個(gè)晶體管全部截止,使正在運(yùn)行的電動機(jī)電樞電流反向,全部截止,使正在運(yùn)行的電動機(jī)

15、電樞電流反向,電動機(jī)自由停止。電動機(jī)自由停止。但是,控制板的使能端通過按鍵開關(guān)接電源但是,控制板的使能端通過按鍵開關(guān)接電源用急停方式用急停方式雙極性方式In1輸入正反控制信號,輸入正反控制信號, In2和和In1反相。假反相。假如如In1為高電平時(shí)電機(jī)正轉(zhuǎn),那么低電平時(shí)就為高電平時(shí)電機(jī)正轉(zhuǎn),那么低電平時(shí)就是反轉(zhuǎn)。是反轉(zhuǎn)。通過單片機(jī)使通過單片機(jī)使In1和和In2產(chǎn)生反向的產(chǎn)生反向的PWM信號,信號,控制電機(jī)的轉(zhuǎn)速??刂齐姍C(jī)的轉(zhuǎn)速。當(dāng)占空比為當(dāng)占空比為50%的時(shí)候,電機(jī)制動;大于的時(shí)候,電機(jī)制動;大于50%時(shí),電機(jī)向一個(gè)方向轉(zhuǎn)動;小于時(shí),電機(jī)向一個(gè)方向轉(zhuǎn)動;小于50%的時(shí)候,的時(shí)候,向另外一個(gè)方向

16、轉(zhuǎn)動。且電機(jī)的轉(zhuǎn)速基本上和向另外一個(gè)方向轉(zhuǎn)動。且電機(jī)的轉(zhuǎn)速基本上和(占空比(占空比-50%)成一定比例關(guān)系。)成一定比例關(guān)系。ICCAVR中如何設(shè)置T/C1采用普采用普通方式。通方式。電機(jī)采電機(jī)采用單極用單極性方式性方式驅(qū)動驅(qū)動定時(shí)/計(jì)數(shù)器1的初始化舉例void timer1_init(void) TCCR1B = 0 x00; /stop TCNT1H = 0 x00; /setup TCNT1L = 0 x00; OCR1AH = 0 x02; OCR1AL = 0 x27; OCR1BH = 0 x02; OCR1BL = 0 x27; OCR1CH = 0 x02; OCR1CL =

17、0 x27; ICR1H = 0 x02; / 20kHz ICR1L = 0 x27; TCCR1A = 0 x02; / OCR1A未連接,做普通端口操作未連接,做普通端口操作 TCCR1B = 0 x19; / start Timer( 0227 )H=( 551 )D定時(shí)/計(jì)數(shù)器1的比較匹配中斷#pragma interrupt_handler timer1_compa_isr:iv_TIM1_COMPAvoid timer1_compa_isr(void) /compare occured TCNT1=OCR1A DC_Stop();定時(shí)/計(jì)數(shù)器1的溢出中斷處理 #pragma in

18、terrupt_handler timer1_ovf_isr:iv_TIM1_OVF void timer1_ovf_isr(void) /TIMER1 has overflowed TCNT1H = 0 x00; /reload counter high value TCNT1L = 0 x00; /reload counter low value if (DC_State = RUN ) if ( dir_flag = FORWARD ) DC_Forward(); else if ( dir_flag = BACKWARD ) DC_Backward(); else DC_Stop();

19、 通信協(xié)議每幀包含3字節(jié)數(shù)據(jù):字節(jié)0:0 xaa (幀開始標(biāo)志)字節(jié)1:速度高4位(bit3bit0)字節(jié)2:速度低8位速度范圍(0 x00010 x0227),參見TIMER1初始化中ICR1取值ICCAVR中如何設(shè)置USART1串口通信程序舉例 unsigned char ReceivedData3; / 接收緩存接收緩存 unsigned char receive_flag=0; / 接收完成標(biāo)志,接收完成標(biāo)志,1表示接收一幀結(jié)束表示接收一幀結(jié)束 #pragma interrupt_handler uart1_rx_isr:iv_USART1_RXC void uart1_rx_isr(

20、void) static unsigned char rece_num=0; unsigned char data; data=UDR1; if( 0 xAA = data )&( 0 = rece_num ) | rece_num 0 ) ReceivedData rece_num = data; rece_num+; if ( 3 = rece_num ) rece_num = 0; receive_flag = 1; 主函數(shù)中修改脈沖寬度 while(1) if (receive_flag = 1) OCR1AH = ReceivedData 1 ; OCR1AL = Recei

21、vedData 2 ; DC_State = RUN; receive_flag = 0; PROTEUS仿真效果如何知道電機(jī)轉(zhuǎn)多快?讀取編碼器的脈沖增量式編碼器輸出的是連續(xù)的脈沖信號,通過得到一秒鐘內(nèi)的脈沖個(gè)數(shù),利用已知的編碼器線數(shù)(如我們用的編碼器為500線)可得到電機(jī)轉(zhuǎn)速,或者直接以每秒的脈沖數(shù)作為速度,具體以計(jì)算方便為準(zhǔn)。對此有兩種較為常見的做法:測頻率測頻率和測脈寬法。我們采用測頻率法(或測周期法),該方法是設(shè)定一個(gè)固定的采樣時(shí)間T,比如秒,采樣一次得到的脈沖個(gè)數(shù)N,那么速度為V=N/T ( pulse / sec )自己動手之三測得編碼器脈沖數(shù)1 測得直流電機(jī)在最大的轉(zhuǎn)速下,測得直流電機(jī)在最大的轉(zhuǎn)速下,20ms內(nèi)內(nèi)的脈沖數(shù)。的脈沖數(shù)。2利用串口調(diào)試助手讀取該脈沖數(shù),并估算利用串口調(diào)試助手讀取該脈沖數(shù),并估算大致范圍。大致范圍。如何分配單片機(jī)資源?T/C0產(chǎn)生產(chǎn)生20ms定時(shí)定時(shí)T/C1驅(qū)動電機(jī)驅(qū)動電機(jī)T/C3采集編碼器脈沖采集編碼器脈沖 ,上升沿,上升沿USART1串口通信串口通信 Q:20ms內(nèi)編碼器脈沖有多少?內(nèi)編碼器脈沖有多少? A:16位的位的T/C3。(為什么?)。(為什么?) Q:何時(shí)采集編碼器脈沖?:何時(shí)采集編碼器脈沖? A:20ms計(jì)時(shí)溢出中斷服務(wù)中。計(jì)時(shí)溢出中斷服務(wù)中。串口協(xié)議的修改采用問答式發(fā)送上個(gè)采

溫馨提示

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

評論

0/150

提交評論