版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
舵機(jī)是一種位置伺服的驅(qū)動(dòng)器,適用于那些需要角度不斷變化并可以保持的控制系統(tǒng)。其工作原理是:控制信號(hào)由接收機(jī)的通道進(jìn)入信號(hào)調(diào)制芯片,獲得直流偏置電壓。它內(nèi)部有一個(gè)基準(zhǔn)電路,產(chǎn)生周期為20ms,寬度為1?5ms的基準(zhǔn)信號(hào),將獲得的直流偏置電壓與電位器的電壓比較,獲得電壓差輸出。最后,電壓差的正負(fù)輸出到電機(jī)驅(qū)動(dòng)芯片決定電機(jī)的正反轉(zhuǎn)。當(dāng)電機(jī)轉(zhuǎn)速一定時(shí),通過級(jí)聯(lián)減速齒輪帶動(dòng)電位器旋轉(zhuǎn),使得電壓差為0,電機(jī)停止轉(zhuǎn)動(dòng)。舵機(jī)的控制信號(hào)是PWM信號(hào),利用占空比的變化改變舵機(jī)的位置。一般舵機(jī)的控制要求如圖1所示。18nis<=F<20nis f1* I沖右轉(zhuǎn)援阻位養(yǎng)2i加豚沖左轉(zhuǎn)攝甌直置1iiis<;=Hc3E<:=2iiis圖1舵機(jī)的控制要求單片機(jī)實(shí)現(xiàn)舵機(jī)轉(zhuǎn)角控制可以使用FPGA、模擬電路、單片機(jī)來產(chǎn)生舵機(jī)的控制信號(hào),但FPGA成本高且電路復(fù)雜。對(duì)于脈寬調(diào)制信號(hào)的脈寬變換,常用的一種方法是采用調(diào)制信號(hào)獲取有源濾波后的直流電壓,但是需要50Hz(周期是20ms)的信號(hào),這對(duì)運(yùn)放器件的選擇有較高要求,從電路體積和功耗考慮也不易采用。5mV以上的控制電壓的變化就會(huì)引起舵機(jī)的抖動(dòng),對(duì)于機(jī)載的測控系統(tǒng)而言,電源和其他器件的信號(hào)噪聲都遠(yuǎn)大于5mV,所以濾波電路的精度難以達(dá)到舵機(jī)的控制精度要求。也可以用單片機(jī)作為舵機(jī)的控制單元,使PWM信號(hào)的脈沖寬度實(shí)現(xiàn)微秒級(jí)的變化,從而提高舵機(jī)的轉(zhuǎn)角精度。單片機(jī)完成控制算法,再將計(jì)算結(jié)果轉(zhuǎn)化為PWM信號(hào)輸出到舵機(jī),由于單片機(jī)系統(tǒng)是一個(gè)數(shù)字系統(tǒng),其控制信號(hào)的變化完全依靠硬件計(jì)數(shù),所以受外界干擾較小,整個(gè)系統(tǒng)工作可靠。單片機(jī)系統(tǒng)實(shí)現(xiàn)對(duì)舵機(jī)輸出轉(zhuǎn)角的控制,必須首先完成兩個(gè)任務(wù):首先是產(chǎn)生基本的PWM周期信號(hào),本設(shè)計(jì)是產(chǎn)生20ms的周期信號(hào);其次是脈寬的調(diào)整,即單片機(jī)模擬PWM信號(hào)的輸出,并且調(diào)整占空比。當(dāng)系統(tǒng)中只需要實(shí)現(xiàn)一個(gè)舵機(jī)的控制,采用的控制方式是改變單片機(jī)的一個(gè)定時(shí)器中斷的初值,將20ms
分為兩次中斷執(zhí)行,一次短定時(shí)中斷和一次長定時(shí)中斷。這樣既節(jié)省了硬件電路,也減少了軟件開銷,控制系統(tǒng)工作效率和控制精度都很高。具體的設(shè)計(jì)過程:例如想讓舵機(jī)轉(zhuǎn)向左極限的角度,它的正脈沖為2ms,則負(fù)脈沖為20ms-加s=18ms,所以開始時(shí)在控制口發(fā)送高電平,然后設(shè)置定時(shí)器在加s后發(fā)生中斷,中斷發(fā)生后,在中斷程序里將控制口改為低電平,并將中斷時(shí)間改為18ms,再過18ms進(jìn)入下一次定時(shí)中斷,再將控制口改為高電平,并將定時(shí)器初值改為2ms,等待下次中斷到來,如此往復(fù)實(shí)現(xiàn)PWM信號(hào)輸出到舵機(jī)。用修改定時(shí)器中斷初值的方法巧妙形成了脈沖信號(hào),調(diào)整時(shí)間段的寬度便可使伺服機(jī)靈活運(yùn)動(dòng)。為保證軟件在定時(shí)中斷里采集其他信號(hào),并且使發(fā)生PWM信號(hào)的程序不影響中斷程序的運(yùn)行(如果這些程序所占用時(shí)間過長,有可能會(huì)發(fā)生中斷程序還未結(jié)束,下次中斷又到來的后果),所以需要將采集信號(hào)的函數(shù)放在長定時(shí)中斷過程中執(zhí)行,也就是說每經(jīng)過兩次中斷執(zhí)行一次這些程序,執(zhí)行的周期還是20mso軟件流程如圖2所示。謝mm畀定時(shí)中斷蹴變定時(shí)時(shí)間中斷程序謝mm畀定時(shí)中斷蹴變定時(shí)時(shí)間中斷程序圖2產(chǎn)生PWM信號(hào)的軟件流程如果系統(tǒng)中需要控制幾個(gè)舵機(jī)的準(zhǔn)確轉(zhuǎn)動(dòng),可以用單片機(jī)和計(jì)數(shù)器進(jìn)行脈沖計(jì)數(shù)產(chǎn)生PWM信號(hào)。
脈沖計(jì)數(shù)可以利用51單片機(jī)的內(nèi)部計(jì)數(shù)器來實(shí)現(xiàn),但是從軟件系統(tǒng)的穩(wěn)定性和程序結(jié)構(gòu)的合理性看,宜使用外部的計(jì)數(shù)器,還可以提高CPU的工作效率。實(shí)驗(yàn)后從精度上考慮,對(duì)于FUTABA系列的接收機(jī),當(dāng)采用1MHz的外部晶振時(shí),其控制電壓幅值的變化為0.6mV,而且不會(huì)出現(xiàn)誤差積累,可以滿足控制舵機(jī)的要求。最后考慮數(shù)字系統(tǒng)的離散誤差,經(jīng)估算誤差的范圍在土0.3%內(nèi),所以采用單片機(jī)和8253、8254這樣的計(jì)數(shù)器芯片的PWM信號(hào)產(chǎn)生電路是可靠的。圖3是硬件連接圖。vf—■七n?■?V1lp?小蠱黑器vf—■七n?■?V1lp?小蠱黑器:sMnwnssgm鵲nacKgasMMJr圖3PWA信號(hào)的計(jì)數(shù)和輸出電路(點(diǎn)擊放大)基于8253產(chǎn)生PWM信號(hào)的程序主要包括三方面內(nèi)容:一是定義8253寄存器的地址,二是控制字的寫入,三是數(shù)據(jù)的寫入。軟件流程如圖4所示,具體代碼如下。//關(guān)鍵程序及注釋://定時(shí)器T0中斷,向8253發(fā)送控制字和數(shù)據(jù)voidT0lnt()interrupt1{5.6.7.{5.6.7.8.9.10.11.12.13.14.15.16.TH0=0xB1;TL0=OxEO;//20ms的時(shí)鐘基準(zhǔn)//先寫入控制字,再寫入計(jì)數(shù)值SERVOO=0x30;//選擇計(jì)數(shù)器0,寫入控制字PWM0=BUF0L;//先寫低,后寫高PWM0=BUF0H;SERVO1=0x70;//選擇計(jì)數(shù)器1,寫入控制字PWM1=BUF1L;PWM1=BUF1H;SERVO2=0xB0;//選擇計(jì)數(shù)器2,寫入控制字PWM2=BUF2L;PWM2=BUF2H;當(dāng)系統(tǒng)的主要工作任務(wù)就是控制多舵機(jī)的工作,并且使用的舵機(jī)工作周期均為20ms時(shí),要求硬件產(chǎn)生的多路PWM波的周期也相同。使用51單片機(jī)的內(nèi)部定時(shí)器產(chǎn)生脈沖計(jì)數(shù),一般工作正脈沖寬度小于周期的1/8,這樣可以在1個(gè)周期內(nèi)分時(shí)啟動(dòng)各路PWM波的上升沿,再利用定時(shí)器中斷TO確定各路PWM波的輸出寬度,定時(shí)器中斷T1控制20ms的基準(zhǔn)時(shí)間第1次定時(shí)器中斷T0按20ms的1/8設(shè)置初值,并設(shè)置輸出I/O口,第1次T0定時(shí)中斷響應(yīng)后,將當(dāng)前輸出I/O口對(duì)應(yīng)的引腳輸出置高電平,設(shè)置該路輸出正脈沖寬度,并啟動(dòng)第2次定時(shí)器中斷,輸出I/O口指向下一個(gè)輸出口。第2次定時(shí)器定時(shí)時(shí)間結(jié)束后,將當(dāng)前輸出引腳置低電平,設(shè)置此中斷周期為20ms的1/8減去正脈沖的時(shí)間,此路PWM信號(hào)在該周期中輸出完畢,往復(fù)輸出。在每次循環(huán)的第16次(2x8=16)中斷實(shí)行關(guān)定時(shí)中斷T0的操作,最后就可以實(shí)現(xiàn)8路舵機(jī)控制信號(hào)的輸出。也可以采用外部計(jì)數(shù)器進(jìn)行多路舵機(jī)的控制,但是因?yàn)槌R姷?253、8254芯片都只有3個(gè)計(jì)數(shù)器,所以當(dāng)系統(tǒng)需要產(chǎn)生多路PWM信號(hào)時(shí),使用上述方法可以減少電路,降低成本,也可以達(dá)到較高的精度。調(diào)試時(shí)注意到由于程序中脈沖寬度的調(diào)整是靠調(diào)整定時(shí)器的初值,中斷程序也被分成了8個(gè)狀態(tài)周期,并且需要嚴(yán)格的周期循環(huán),而且運(yùn)行其他中斷程序代碼的時(shí)間需要嚴(yán)格把握。在實(shí)際應(yīng)用中,采用51單片機(jī)簡單方便地實(shí)現(xiàn)了舵機(jī)控制需要的PWM信號(hào)。對(duì)機(jī)器人舵機(jī)控制的測試表明,舵機(jī)控制系統(tǒng)工作穩(wěn)定,PWM占空比(0.5?2.5ms的正脈沖寬度)和舵機(jī)的轉(zhuǎn)角(-90。?90°)線性度較好。如何使用AT89S52編寫這樣一個(gè)程序。要求,單片機(jī)控制舵機(jī),讓舵機(jī)到中間位置后,左轉(zhuǎn)15度,延遲2ms,右轉(zhuǎn)15度。(度數(shù)不要求精確)。舵機(jī)為0.5?2.5ms。晶振12M#includevreg52.h>unsignedintpwm;unsignedcharflag;sbitp10=P1A0;voidtimer0()interrupt1using1{pl0=!pl0;pwm=20000-pwm;TH0=pwm/256;TL0=pwm%256;flag++;if(flagvl0)flag++;if(flag==10&&pl0==0){pwm=1250;flag=ll;}〃保證回到90度再左轉(zhuǎn)15;}voidtimer1()interrupt3usingl{ET1=0;//2ms到關(guān)閉定時(shí)器1ET0=0;TR0=0;pwm=1750;TH0=pwm/256;TL0=pwm%256;ET0=1;TR0=1;}voidint0(void)interrupt0using1{〃判斷左轉(zhuǎn)到15,通過傳感器判斷或者其他信號(hào)判斷,能正好保證剛左轉(zhuǎn)15度,開始延時(shí)2msTR1=1;〃定時(shí)器1開始計(jì)數(shù)}voidmain(void){plO=l;TMOD=Oxll;pwm=1500;〃回90度TH0=pwm/256;TL0=pwm%256;TH1=2000/256;TL1=2000%256;EA=1;ET0=1;ET1=1;TR0=1;while(1);}舵機(jī)控制程序8路舵機(jī)控制器芯片:AT89S52晶振:12MHz===================================================================================*/#include<REG52.h>#defineuint8unsignedchar#defineuint16unsignedintsbitkey1=P「4;sbitkey2=P「5;//PWM的輸出端口sbitPWM_OUTO=PO"O;sbitPWM_OUT1=PO"1;sbitPWM_0UT2=P0"2;sbitPWM_0UT3=P0"3;sbitPWM_0UT4=P0"4;sbitPWM_0UT5=P0"5;sbitPWM_0UT6=P0"6;sbitPWM_0UT7=P0"7;//PWM的數(shù)據(jù)值uint16PWM_Value[8]={1500,1000,1500,1000,1750,2000,2500,2000};uint8order1;//定時(shí)器掃描序列/*===================================================================================定時(shí)器TO的中斷服務(wù)程序一個(gè)循環(huán)20MS =8*2.5ms=====================================================================================*/voidtimerO(void)interrupt1using1{switch(order1){case1:PWM_OUTO=1;THO=-PWM_Value[O]/256;TLO=-PWM_Value[O]%256;break;case2:PWM_OUTO=O;THO=-(27OO-PWM_Value[O])/256;TLO=-(27OO-PWM_Value[O])%256;break;case3:PWM_OUT1=1;THO=-PWM_Value[1]/256;TLO=-PWM_Value[1]%256;break;case4:PWM_OUT1=O;THO=-(27OO-PWM_Value[1])/256;TLO=-(27OO-PWM_Value[1])%256;break;case5:PWM_OUT2=1;THO=-PWM_Value[2]/256;TLO=-PWM_Value[2]%256;break;case6:PWM_OUT2=O;THO=-(27OO-PWM_Value[2])/256;TLO=-(27OO-PWM_Value[2])%256;break;case7:PWM_OUT3=1;THO=-PWM_Value[3]/256;TLO=-PWM_Value[3]%256;break;case8:PWM_OUT3=O;THO=-(27OO-PWM_Value[3])/256;TLO=-(27OO-PWM_Value[3])%256;break;case9:PWM_OUT4=1;THO=-PWM_Value[4]/256;TLO=-PWM_Value[4]%256;case10:PWM_OUT4=0;TH0=-(2700-PWM_Value[4])/256;TL0=-(2700-PWM_Value[4])%256;break;case11:PWM_OUT5=1;TH0=-PWM_Value[5]/256;TL0=-PWM_Value[5]%256;break;case12:PWM_OUT5=0;TH0=-(2700-PWM_Value[5])/256;TL0=-(2700-PWM_Value[5])%256;break;case13:PWM_OUT6=1;TH0=-PWM_Value[6]/256;TL0=-PWM_Value[6]%256;break;case14:PWM_OUT6=0;TH0=-(2700-PWM_Value[6])/256;TL0=-(2700-PWM_Value[6])%256;break;case15:PWM_OUT7=1;TH0=-PWM_Value[7]/256;TL0=-PWM_Value[7]%256;break;case16:PWM_OUT7=0;order1=0;TH0=-(2700-PWM_Value[7])/256;TL0=-(2700-PWM_Value[7])%256;order1=0;break;default:order1=0;}order1++;}/*===================================================================================初始化中斷=====================================================================================*/voidInitPWM(void){order1=1;TMOD|=0x11;TH0=-1500/256;TL0=-1500%256;EA=1;EX0=0;ET0=1;TR0=1;PT0=1;PX0=0;}voiddelay(void){uint16i=100;while(i--);}voidmain(void){InitPWM();while(1){if(key1==0){if(PWM_Value[0]<2500)PWM_Value[0]++;}if(key2==0){if(PWM_Value[0]>500)PWM_Value[0]--;}delay();}}單片機(jī)舵機(jī)控制程序#include<REG51.h>#defineucharunsignedchar#defineuintunsignedintuinta,b,c,d,n;sbitp12=P"2;sbitp13=P"3;sbitp37=P3人7;voidtimer0(void)interrupt1using1{p12=!p12;c=20000-c;TH0=-(c/256);TL0=-(c%256);if(c>=500&&c<=2500)c=a;elsec=20000-a;}voiddelay(){uinti;for(i=0;i<200;i++){}}voidinit_serialcomm(void){SCON=0x50;TMOD|=0x21;PCON|=0x80;TH1=0xF4;IE|=0x93;TR1=1;//TI=1;//SCON:serailmode1,8-bitUART,enableucvr//TMOD:timer1,mode2,8-bitreload//SMOD=1;//Baud:4800fosc=11.0592MHz//EnableSerialInterrupt//timer1run}voidserial()interrupt4using3{if(RI){RI=0;b=SBUF;SBUF=0xff;while(TI==0);TI=0;}voidmain(void){//TMOD=0x21;init_serialcomm();p12=1;a=1500;c=a;TH0=-(a/256);TL0=-(a%256);PX0=0;PT0=1;TR0=1;while(1){a=b*10;}}舵機(jī)控制程序(改變a值可控制任意角度)#include<reg51.h>#include<math.h>#defineucharunsignedchar#defineuintunsignedintuinta,c;sbitp10=P"0;sbitp11=P"1;voidtimer0(void)interrupt1{p10=!p10;p11=!p11;c=20000-c;TH0=-(c/256);TL0=-(c%256);if(c>=500&&c<=2500)c=a;elsec=20000-a;}voiddelay(longj){for(j;j>0;j--);}voidmain(void){TMOD=0x01;//16位定時(shí)器工作方式1p10=1;p11=1;a=2500;//180//c=a;TH0=-(a/256);TL0=-(a%256);EA=1;ET0=1;TR0=1;for(a=2500;a>=500;a--){a=a-10;c=a;delay(5000);}}基于AT89C2051的多路舵機(jī)控制器設(shè)計(jì)(2007-11-1011:37)摘要舵機(jī)是機(jī)器人、機(jī)電系統(tǒng)和航模的重要執(zhí)行機(jī)構(gòu)。舵機(jī)控制器為舵機(jī)提供必要的能源和控制信號(hào)。本文提出一種以外部中斷計(jì)數(shù)為基礎(chǔ)的PWM波形實(shí)現(xiàn)方法。該方法具有簡單方便,成本低,可實(shí)現(xiàn)多路獨(dú)立PWM輸出的優(yōu)點(diǎn)。關(guān)鍵詞AT89(:2051舵機(jī)控制器外部中斷PWM舵機(jī)是一種位置伺服的驅(qū)動(dòng)器。它接收一定的控制信號(hào),輸出一定的角度,適用于那些需要角度不斷變化并可以保持的控制系統(tǒng)。在微機(jī)電系統(tǒng)和航模中,它是一個(gè)基本的輸出執(zhí)行機(jī)構(gòu)。1舵機(jī)的工作原理以日本FUTABA-S3003型舵機(jī)為例,圖1是FUFABA-S3003型舵機(jī)的內(nèi)部電路。圖!FUTABA-S3003型舵機(jī)的內(nèi)部電路舵機(jī)的工作原理是:PWM信號(hào)由接收通道進(jìn)入信號(hào)解調(diào)電路BA66881。的12腳進(jìn)行解調(diào),獲得一個(gè)直流偏置電壓。該直流偏置電壓與電位器的電壓比較,獲得電壓差由BA6688的3腳輸出。該輸出送人電機(jī)驅(qū)動(dòng)集成電路BA6686,以驅(qū)動(dòng)電機(jī)正反轉(zhuǎn)。當(dāng)電機(jī)轉(zhuǎn)速一定時(shí),通過
級(jí)聯(lián)減速齒輪帶動(dòng)電位器R。,旋轉(zhuǎn),直到電壓差為0,電機(jī)停止轉(zhuǎn)動(dòng)。舵機(jī)的控制信號(hào)是PWM信號(hào),利用占空比的變化改變舵機(jī)的位置。2舵機(jī)的控制方法標(biāo)準(zhǔn)的舵機(jī)有3條導(dǎo)線,分別是:電源線、地線、控制線,如圖2所示。輸出轉(zhuǎn)軸亀源線妝A峭線ONT4控制線A圖2標(biāo)準(zhǔn)能機(jī)電源線和地線用于提供舵機(jī)內(nèi)部的直流電機(jī)和控制線路所需的能源.電壓通常介于4?6V,一般取5V。注意,給舵機(jī)供電電源應(yīng)能提供足夠的功率??刂凭€的輸入是一個(gè)寬度可調(diào)的周期性方波脈沖信號(hào),方波脈沖信號(hào)的周期為20ms(即頻率為50Hz)。當(dāng)方波的脈沖寬度改變時(shí),舵機(jī)轉(zhuǎn)軸的角度發(fā)生改變,角度變化與脈沖寬度的變化成正比。某型舵機(jī)的輸出軸轉(zhuǎn)角與輸入信號(hào)的脈沖寬度之間的關(guān)系可用圍3來表示。輸入宿彭肪沖寬度(周期対20ms)n~45909045輸入宿彭肪沖寬度(周期対20ms)n~459090453舵機(jī)控制器的設(shè)計(jì)(1)舵機(jī)控制器硬件電路設(shè)計(jì)從上述舵機(jī)轉(zhuǎn)角的控制方法可看出,舵機(jī)的控制信號(hào)實(shí)質(zhì)是一個(gè)可嗣寬度的方波信號(hào)(PWM)。該方波信號(hào)可由FPGA、模擬電路或單片機(jī)來產(chǎn)生。采用FPGA成本較高,用模擬電路來實(shí)現(xiàn)則電路較復(fù)雜,不適合作多路輸出。一般采用單片機(jī)作舵機(jī)的控制器。目前采用單片機(jī)做舵機(jī)控制器的方案比較多,可以利用單片機(jī)的定時(shí)器中斷實(shí)現(xiàn)PWM。該方案將20ms的周期信號(hào)分為兩次定時(shí)中斷來完成:一次定時(shí)實(shí)現(xiàn)高電平定時(shí)Th;—次定時(shí)實(shí)現(xiàn)低電平定時(shí)T1。Th、T1的時(shí)間值隨脈沖寬度的變換而變化,但,Th+T1=20ms。該方法的優(yōu)點(diǎn)是,PWM信號(hào)完全由單片機(jī)內(nèi)部定時(shí)器的中斷來實(shí)現(xiàn),不需要添加外圍硬件。缺點(diǎn)是一個(gè)周期中的PWM信號(hào)要分兩次中斷來完成,兩次中斷的定時(shí)值計(jì)算較麻煩;為了滿足20ms的周期,單片機(jī)晶振的頻率要降低;不能實(shí)現(xiàn)多路輸出。也可以采用單片機(jī)+8253計(jì)數(shù)器的實(shí)現(xiàn)方案。該方案由單片機(jī)產(chǎn)生計(jì)數(shù)脈沖(或外部電路產(chǎn)生計(jì)數(shù)脈沖)提供給8253進(jìn)行計(jì)數(shù),由單片機(jī)給出8253的
計(jì)數(shù)比較值來改變輸出脈寬。該方案的優(yōu)點(diǎn)是可以實(shí)現(xiàn)多路輸出,軟件設(shè)計(jì)較簡單;缺點(diǎn)是要添加I片8253計(jì)數(shù)器,增加了硬件成本。本文在綜合上述兩個(gè)單片機(jī)舵機(jī)控制方案基礎(chǔ)上,提出了一個(gè)新的設(shè)計(jì)方案,如圖4所示。INTO計(jì)數(shù)比較值來改變輸出脈寬。該方案的優(yōu)點(diǎn)是可以實(shí)現(xiàn)多路輸出,軟件設(shè)計(jì)較簡單;缺點(diǎn)是要添加I片8253計(jì)數(shù)器,增加了硬件成本。本文在綜合上述兩個(gè)單片機(jī)舵機(jī)控制方案基礎(chǔ)上,提出了一個(gè)新的設(shè)計(jì)方案,如圖4所示。INTOXTAL211613545MAX23213121415R1OUTT1IN圖4新的設(shè)計(jì)方案該方案的舵機(jī)控制器以AT89C2051單片機(jī)為核心,555構(gòu)成的振蕩器作為定時(shí)基準(zhǔn),單片機(jī)通過對(duì)555振蕩器產(chǎn)生的脈沖信號(hào)進(jìn)行計(jì)數(shù)來產(chǎn)生PWM信號(hào)。該控制器中單片機(jī)可以產(chǎn)生8個(gè)通道的PWM信號(hào),分別由AT89C2051的P1.0?Pl.7(12?19引腳)端口輸出。輸出的8路PWM信號(hào)通過光耦隔離傳送到下一級(jí)電路中。因?yàn)樾盘?hào)通過光耦傳送過程中進(jìn)行了反相,因此從光耦出來的信號(hào)必須再經(jīng)過反相器進(jìn)行反相。方波信號(hào)經(jīng)過光耦傳輸后,前沿和后沿會(huì)發(fā)生畸變,因此反相器采用CD40106施密特反相器對(duì)光耦傳輸過來的信號(hào)進(jìn)行整形,產(chǎn)生標(biāo)準(zhǔn)的PWM方波信號(hào)。筆者在實(shí)驗(yàn)過程中發(fā)現(xiàn),舵機(jī)在運(yùn)行過程中要從電源吸納較大的電流,若舵機(jī)與單片機(jī)控制器共用一個(gè)電源,則舵機(jī)會(huì)對(duì)單片機(jī)產(chǎn)生較大的干擾。因此,舵機(jī)與單片機(jī)控制器采用兩個(gè)電源供電,兩者不共地,通過光耦來隔離,并且給舵機(jī)供電的電源最好采用輸出功率較大的開關(guān)電源。該舵機(jī)控制器占用單片機(jī)的個(gè)SCI串口。串口用于接收上位機(jī)傳送過來的控制命令,以調(diào)節(jié)每一個(gè)通道輸出信號(hào)的脈沖寬度。MAX232為電平轉(zhuǎn)換器,將上位機(jī)的RS232電平轉(zhuǎn)換成TTL電平。(2)實(shí)現(xiàn)多路PWM信號(hào)的原理在模擬電路中,PWM脈沖信號(hào)可以通過直流電平與鋸齒波信號(hào)比較來得到。在單片機(jī)中,鋸齒波可以通過對(duì)整型變量加1操作來實(shí)現(xiàn),如圖5所示。假定單片機(jī)程序中設(shè)置一整型變量SawVal,其值變化范圍為0?N。555振蕩電路產(chǎn)生的外部計(jì)數(shù)時(shí)鐘信號(hào)輸入到AT89C2051的
INTO腳。每當(dāng)在外部計(jì)數(shù)時(shí)鐘脈沖的下降沿,單片機(jī)產(chǎn)生外部中斷,執(zhí)行外部中斷INTO的中斷服務(wù)程序。每產(chǎn)生一次外部中斷,對(duì)SawVal執(zhí)行一次加1操作,若SawVal已達(dá)到最大值N,則對(duì)SawVal清0。SawVal值的變化規(guī)律相當(dāng)于鋸齒波,如圖5所示。若在單片機(jī)程序中設(shè)置另一整型變量DutyVal,其值的變化范圍為0?N。每當(dāng)在SawVal清0時(shí),DulyVal從上位機(jī)發(fā)送的控制命令中讀入脈沖寬度系數(shù)值,例如為H(0<H<N)o若DutyVaVSawVal,則對(duì)應(yīng)端口輸出高電平;若DutyValvSawval,則對(duì)應(yīng)端口輸出低電平。從圖5中可看出,若改變DutyVal的值,則對(duì)應(yīng)端口輸出脈沖的寬度發(fā)生變化,但輸出脈沖的頻率不變,此即為PWM波形。Z>SawVat圖5單片機(jī)產(chǎn)生的鋸齒菠和PWM波形Z>SawVat圖5單片機(jī)產(chǎn)生的鋸齒菠和PWM波形設(shè)外部計(jì)數(shù)時(shí)鐘周期為TINT0,鋸齒波周期(PWM脈沖周期)為TPWM,PWM脈沖寬度占空比為D,由圖5可得出如下關(guān)系:DutyVal\ *八Tpwmn(N+1)*Tinto(1)⑵D=H由式⑴可紅.N1PWM1INTO=⑶N+YTinto1fA】『PWMN—1由式(3)可知,PWM波形的周期TPWM一旦確定下來,只須選定計(jì)數(shù)最大值N,就可以確定外部時(shí)鐘脈沖所需周期(頻率)。外部時(shí)鐘脈沖周期TINT0顯然是PWM脈沖寬度變換的最小步距,即調(diào)節(jié)精度。由式(4)可知,N越大,步距所占PWM周期的百分比越小,精度越高。例如,若采用8位整型變量,最大值N=28-1=255,則精度為1/(255+1)=1/255;若采用16位整型變量,最大值N=216-1=65535,則精度為1/65536。文中計(jì)數(shù)變量SawVal采用8位整型變量,因此N=255。對(duì)于一般應(yīng)用,其精度已足夠。就舵機(jī)而言,要求TPWM=20ms,則可算得外部時(shí)鐘周期為:T1nto=^Ti=0'078125砂因此,設(shè)計(jì)555振蕩電路時(shí),其輸出脈沖的頻率應(yīng)為:FNTOTinto=FNTOTinto=12.8kHz當(dāng)有多個(gè)變量與SawVal比較,將比較結(jié)果輸出到多個(gè)端口時(shí)。就形成了多路PWM波形。各個(gè)變量的值可以獨(dú)立變化,因此各路PWM波形的占空比也可以獨(dú)立調(diào)節(jié),互不相干。多路PWM波形的產(chǎn)生如圖6所示。圖中以3路PWM波形為例。PWM(CHl)PWM(C112)PWM(CH3)PWM(CHl)PWM(C112)PWM(CH3)4舵機(jī)控制器軟件的設(shè)計(jì)舵機(jī)控制器的控制核心為單片機(jī)AT89C2051。文中,程序用C5I編寫,工作方式為前后臺(tái)工作方式。單片機(jī)程序包括系統(tǒng)初始化程序、串口通信程序、上位機(jī)命令解釋與PWM脈寬生成程序和多路PWM波形輸出程序。串行通信程序和多路PWM波形輸出程序采用中斷方式。串口通信格式為渡特率9600bps、8位數(shù)據(jù)位
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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年滬科版選擇性必修三物理下冊(cè)階段測試試卷
- 二零二五年度建筑廢棄物資源化利用與木模板木方采購合同3篇
- 二零二五年度新能源汽車推廣應(yīng)用借款合同參考格式4篇
- 2025年度橋梁路面混凝土施工勞務(wù)合同范本4篇
- 2025年度農(nóng)用拖拉機(jī)租賃與農(nóng)田作業(yè)合同3篇
- 2025年度幕墻施工勞務(wù)分包合同施工質(zhì)量監(jiān)督與驗(yàn)收范本4篇
- 二零二五年度苗木新品種研發(fā)與推廣合作合同3篇
- 2025年度旅游地產(chǎn)開發(fā)貸款擔(dān)保合同4篇
- 二零二五年度廠房租賃與智慧城市建設(shè)合作合同范本3篇
- 護(hù)士長合同范本(2篇)
- GB/T 16288-2024塑料制品的標(biāo)志
- 麻風(fēng)病防治知識(shí)課件
- 干部職級(jí)晉升積分制管理辦法
- TSG ZF003-2011《爆破片裝置安全技術(shù)監(jiān)察規(guī)程》
- 護(hù)理服務(wù)在產(chǎn)科中的應(yīng)用課件
- 2024年代理記賬工作總結(jié)6篇
- 電氣工程預(yù)算實(shí)例:清單與計(jì)價(jià)樣本
- VOC廢氣治理工程中電化學(xué)氧化技術(shù)的研究與應(yīng)用
- 煤礦機(jī)電設(shè)備培訓(xùn)課件
- 高考寫作指導(dǎo)議論文標(biāo)準(zhǔn)語段寫作課件32張
- 2021年普通高等學(xué)校招生全國英語統(tǒng)一考試模擬演練八省聯(lián)考解析
評(píng)論
0/150
提交評(píng)論