版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、脈寬調(diào)制在小車中的應(yīng)用1如何改變轉(zhuǎn)速23調(diào)速的實質(zhì)4的產(chǎn)生方法5如何利用 51 單片機輸出波6直流電機調(diào)速程序?qū)嵗胺治?用于舵機角度控制說明通過前面的內(nèi)容知道,通過 H 橋電路,可能有效的解決單片機 I/O 口驅(qū)動能力,并且可以實現(xiàn)電機的正轉(zhuǎn)、反轉(zhuǎn)及剎車等,但對于如何對電機的速度進行調(diào)整 298N 卻為力,要很好的速度調(diào)節(jié),就要用到技術(shù),此外對于舵機角度調(diào)節(jié),也需要用到技術(shù),下面分別進行介紹1 如何改變轉(zhuǎn)速這里先如何使電機的速度得到變化。在智能小車中,直流有刷電機是主要的動力源,而直流電機改變速度的方式應(yīng)該是改變供給電機的電壓,使供給電機的功率變化,從而改變速度,也就是速度和功率成比例關(guān)系,
2、功率又與加在電機兩端有關(guān),所以可以通過改變電機兩端電壓的大小來進行速度的改變。改變電壓有兩種方法,一是利用電子調(diào)速器,一是利用的方式。因為加裝電子調(diào)速器會增加硬件上的成本,所以一般利用后者。而在程序中要直接改變電壓比較麻煩,所以就產(chǎn)生了利用斷續(xù)供電的方式改變供給電機的平均功率,以達到改變速度的目的,這種斷續(xù)供電的方式就是。2中文意思是脈沖寬度調(diào)制,意思是通過程序讓單片機的 I/O 口輸出一定頻率的,并且可以改變占空比。簡單說就是通過程序讓單片機的 I/O 口對電機進行斷續(xù)供電,并通過改變通、斷電時間比改變電機所得到的平均電壓值。舉個通俗的例子就是,假設(shè)每天24 小時需向電機供電讓其運轉(zhuǎn),現(xiàn)在具
3、體到每小時,可以半時通電,另外半小不通電,此時就相當于產(chǎn)生了個周期為 1 小時,占空比(也說成脈寬)為%50的波,當然也可以前 40 分鐘通過電,后 20 分鐘斷,此時的周期不變,但占空比就變成了 66.7%(40/60*100%),兩種不同的占空比會使得電機處于不同的速度,這就是調(diào)速。3調(diào)速的實質(zhì)實際上電機速度的快慢最終的決定是加在電機兩端的電壓來決定(說通斷電時就叫平均電壓),是電壓的改變最終于造成了速度的改變。如果在控制要求比較高的場還必須考慮到電池和路面摩擦力變化的影響,因為同樣的由于電池電壓下降產(chǎn)生的平均電壓就不同,相同的路面摩擦力不同,這些都會造成速度發(fā)生變化,此時要精確控制的就必
4、須加實行閉環(huán)控制,這里暫不這個問題,但大家一定要理解調(diào)整的實質(zhì)就是調(diào)電壓,否者在高速控用到時就會理解不清。4的產(chǎn)生方法的生產(chǎn)在現(xiàn)代單片機系般利用的方式不實現(xiàn),根據(jù)單片機是否帶有功能模塊又分成下面兩種方法。1)對單像 51 之類的單片機,因為其沒有模塊,所以要得到只能用方式來實現(xiàn),即通過執(zhí)行延時循環(huán)程序交替改變端口某個二進制位輸出邏輯狀態(tài)來產(chǎn)生脈寬調(diào)制信號,設(shè)置不同的延時時間得到不同的占空比,但是這種方法產(chǎn)生的具體的占空比不易計算,只能根據(jù)經(jīng)驗和反復的高度才能最終達到應(yīng)用需求,一些簡單和要求不高的速度調(diào)節(jié),通??梢圆捎么朔N方法。如果要求較高或者說需要準確占空比值的時,通常的情況下會用到內(nèi)部定時器
5、來實現(xiàn),具體的方法后面的章節(jié)會講解到。2)對于像飛思之類的,因為已經(jīng)帶有模塊,則可以直接使用,此時一般只需設(shè)置相應(yīng)的寄存器就可以了。這種方法產(chǎn)生優(yōu)點有很多,精度高、程序相對簡單,但最大的優(yōu)點則是它不占用 CPU 處理的時間,要知道 CPU 平時個大忙人,它有很多事情要做的,像一些應(yīng)用要求比較高的場合,51 單片機通常就不適合,必須選用自帶模塊的單片機。5 如何利用 51 單片機輸出波這個功能在飛思、STM32 等高檔的單片機有的模塊,用此類實現(xiàn)功能時只需要通過設(shè)置相應(yīng)的寄存器就可實現(xiàn)周期和占空比的控制。但是如果要用 51 單片機的話,也是可以的,但是比較的麻煩。此時需要用到定時器來實現(xiàn),可用兩
6、個定時器實現(xiàn),也可以用一個定時器實現(xiàn)。用兩個定時器的方法是用定時器 T0 來控制頻率,定時器 T1 來控制占空比。大致的的編程思路是這樣的:T0 定時器中斷讓一個 I0 口輸出,在這個定時器 T0 的中斷當中起動定時器 T1,而這個 T1 是讓 IO 口輸出低電平,這樣改變定時器 T0 的初值就可以改變頻率,改變定時器 T1 的初值就可以改變占空比。下面重點介紹用一個定時器的實現(xiàn)的方法。因為市面上的智能小車所采用的電機大多數(shù)為 TT電機,通過復雜的實驗此電機最佳的工作頻率為1000HZ(太高容易發(fā)生哨叫,太低電機容易發(fā)生抖動),所以下面以周期為 1ms(1000HZ)進行舉例,要產(chǎn)生其它頻率的
7、波,程序中只需作簡單修改即可。用一個定時器時(如定時器 T0),首先你要確定的周期 T 和占空比 D,確定了這些以后,你可以用定時器產(chǎn)生一個時間基準 t,比如定時器溢出 n 次的時間是的的時間,則 D*,類似的可以求出低電平時間需要多少個時間基準 n。因為這里是產(chǎn)生周期為 1ms(1000HZ)的,所以可設(shè)置中斷的時間基準為 0.01ms,,然后中斷 100 次即為 1ms。在中斷子程序內(nèi),可設(shè)置一個變量如time,在中斷子程序內(nèi),有三條重要的語句:1、當 time=100 時,time 清零(此語句保證頻率為 1000HZ),2、當 timen 時(n 應(yīng)該在 0100 之間變化開),讓單片
8、相應(yīng)的 I/O 口輸出,當 timen 時,讓單片相應(yīng)的 I/O 口輸出低電平,此時占空比就為%n。6 直流電機調(diào)速程序?qū)嵗胺治龀绦?12-1 單片機的 I/O 口輸出固定頻率的波下面按上面的思路給出一個具體程序:/*/*程序片機輸出固定頻率的波*/*晶振:11.00592 MHz CPU 型號:STC89C52 */*功能:P20 口輸出周期為 1ms(1000HZ),占空比為%80 的波*/*/#include#defineuunsigned#defineuchar unsigned charsbit1=P20;/接 IN1 控制正轉(zhuǎn)sbit2=P21;/接 IN2 控制反轉(zhuǎn)uchart
9、ime;voidmain()TMOD=0 x01;/定時器 0 工作方式 1TH0=0 xff;/(65536-10)/256;/賦初值定時TL0=0 xf7;/(65536-10)%256;/0.01msEA=1;/開總中斷ET0=1;/開定時器 0 中斷TR0=1;/啟動定時器 0while(1)voiddelay(uz)ux,y;for(x=z;x0;x-)for(y=500;y0;y-);voidtim0()errupt 1TR0=0;/賦初值時,關(guān)閉定時器TH0=0 xff;/(65536-10)/256;/賦初值定時TL0=0 xf7;/(65536-10)%256;/0.01ms
10、TR0=1;/打開定時器time+;if(time=100) time=0;/1khzif(time=20)1=0;/點空比%80else1=1;2=0;程序說明:1、關(guān)于頻率的確定:對于 11.0592M 晶振,輸出頻率為 1KHZ,此時設(shè)定時器 0.01ms 中斷一次,時中斷次數(shù) 100 次即為 1KHZ( 0.01ms*100=1ms,即為1000HZ)此時, 定時器計數(shù)器賦初值為 TH0=FF,TL0=F7。2、關(guān)于占空比的確定:此時來 time 的值從 0100 之間進行改變,就可以將占空比從%0%100 之間進行變化,上面程序中 time=20 時1=0;else1=1;意思就是%
11、20 的時間輸出低電平,%80 的時間輸出,即占空比為%80。如需得到其它占空比,如%60,只需將 time 的值改為 40 即可。(程序為 if(time=40)1=0;else1=1;)當然編寫程序時也可以定義一個標志位如 flag,根據(jù) flag 的狀態(tài)決定輸出還是低電平,假設(shè)定義 flag=1 的時候輸出,用一個變量去定時器中斷的次數(shù),每次中斷就讓中斷次數(shù)的變量+1,在中斷程序里面判斷這個變量的值是否到了 n ,如果到了說電平的時間夠了,那么就改變 flag為 0,輸出低電平,同時中斷變量的值清零,每次中斷的時候依舊+1,根據(jù)flag=0 的情況跳去判斷變量的值是否到了 n 如果到了,
12、說明的低電平時間夠了,那么就改 flag=1,輸出改,同時次數(shù)變量清零,重新開始,如此循環(huán)便到你想要的波形,這種方法這里不在舉例,請自己去試著書寫。例 12-2波驅(qū)動電機,并能通過按鍵控制正反轉(zhuǎn)在程序中通常需要控制電機的正反轉(zhuǎn),如通過一個按鍵控制正反轉(zhuǎn),此時也可以設(shè)置一個標志位如 flag。在主程序中當按鍵每次被按下時,flag相應(yīng)取反。然后在子程序中當 flag 為 1 時,進行正轉(zhuǎn)程序,當 flag 為 0 時執(zhí)行反轉(zhuǎn)程序。下面的程序功能為單片機 I/O 口 P20、P21 輸出 1000HZ,占空比為%50,并能過 P37 按鍵控制正電機的正反轉(zhuǎn)。/*/*程序名:直流電機調(diào)速 */*晶振
13、:11.00592 MHz CPU 型號:STC89C52 */*功能:直流電機的波控制,可以通過按鍵控制正反轉(zhuǎn) */*/#include#define uunsigned#define uchar unsigned charuchartime,count=50,flag=1;/低電平的占空比sbit1=P20;/通道 1,反轉(zhuǎn)脈沖sbit2=P21;/通道 2,正轉(zhuǎn)脈沖sbitkey_turn=P37;/電機換向/*函數(shù)*/voiddelayxms(uz);voidMotor_turn(void);voidtimer0_init(void);/*主函數(shù)*/void main(void)tim
14、er0_init();while(1)Motor_turn();/*延時處理*/void delayxms(uz)/延時 xms 程序ux,y;for(y=z;x0;x-)for(y=110;y0;y-);/*電機正反向控制*/voidMotor_turn(void)if(key_turn=0)delayxms(2);/此處時間不能太長,否者會的中斷產(chǎn)生if(key_turn=0)flag=flag;while(!key_turn);/*定時器 0 初始化*/void timer0_init(void)TMOD=0 x01; /定時器 0 工作于方式 1TH0=(65536-10)/256;T
15、L0=(65536-10)%256;TR0=1;ET0=1;EA=1;/*定時 0 中斷處理*/voidtimer0_(void)errupt 1TR0=0;/設(shè)置定時器初值期間,關(guān)閉定時器TH0=(65536-10)/256;TL0=(65536-10)%256;TR0=1;if(flag=1)/電機正轉(zhuǎn)1=0;time+;if(time=100)time=0;else /電機反轉(zhuǎn)2=0;time+;if(time=100)time=0;例 12-3 單片機輸出,并能控制正反轉(zhuǎn)調(diào)速為了使大家徹底掌握此方面,下面再給出一個復雜一點的程序,實現(xiàn)的功能為通過一個按鍵控制正反轉(zhuǎn)并通過另外兩個按鍵使之
16、可以在 0 到 20 級之間調(diào)速的程序。/*/*程序名:直流電機調(diào)速 */*晶振:11.00592 MHz CPU 型號:STC89C52 */*直流電機的波控制,可以通過按鍵控制正反轉(zhuǎn)并在 0 到 20 級之間調(diào)速 */*/#include#define uunsigned#define uchar unsigned charuchartime,count=50,flag=1;/低電平的占空比sbit1=P20;/通道 1,反轉(zhuǎn)脈沖sbit2=P21;/通道 2,正轉(zhuǎn)脈沖sbitkey_add=P35;/電機加速sbitkey_dec=P36;/電機sbitkey_turn=P37;/電機換
17、向/*函數(shù)*/voiddelayxms(uz);voidMotor_turn();voidMotor_add();voidMotor_dec();voidtimer0_init();/*主函數(shù)*/void main()timer0_init();while(1)Motor_turn();Motor_add();Motor_dec();/*延時處理*/void delayxms(uz)/延時 xms 程序ux,y;for(y=z;x0;x-)for(y=110;y0;y-);/*電機正反向控制*/void Motor_turn()if(key_turn=0)delayxms(2);/此處時間不能
18、太長,否者會的中斷產(chǎn)生if(key_turn=0)flag=flag;while(!key_turn);void Motor_add()/電機加速if(key_add=0)delayxms(2);/此處時間不能太長,否者會的中斷產(chǎn)生if(key_add=0)count+=5;if(count=100)count=0;while(!key_add);void Motor_dec()/電機加if(key_dec=0)delayxms(2);/此處時間不能太長,否者會的中斷產(chǎn)生if(key_dec=0)count-=5;if(count=100)count=0;while(!key_dec);/*定
19、時器 0 初始化*/void timer0_init()TMOD=0 x01; /定時器 0 工作于方式 1TH0=(65536-10)/256;TL0=(65536-10)%256;TR0=1;ET0=1;EA=1;/*定時 0 中斷處理*/void timer0_()errupt 1TR0=0;/設(shè)置定時器初值期間,關(guān)閉定時器TH0=(65536-10)/256;TL0=(65536-10)%256;TR0=1;if(flag=1)/電機正轉(zhuǎn)1=0;time+;if(time=100)time=0;else /電機反轉(zhuǎn)2=0;time+;if(time=100)time=0;7 如何信號控制小車沿直線前行直行前面講到過,如果直接給小車電機兩端加不同的電壓,小車可以實現(xiàn)前行或者后退,但由于電機特性和每個輪胎摩擦系數(shù)的不同,會造成小車沿著直接前行,而利用就可以很好實現(xiàn)各個車輪速度的調(diào)節(jié),從而達到沿直線前行的目的.相信通過上面的講解,大家已經(jīng)能夠很好的撐握如何利用 51 單片機產(chǎn)生波.下面給出一個程序,通過單片機兩個 I/O 口輸出波,讓小車直行。例 12-4信號控制小車沿直線前行直行#include#defi
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 1.1 國家是什么(導學案) 高二政治 (統(tǒng)編版選擇性必修1)
- 印刷機械行業(yè)智能化發(fā)展的市場機遇分析考核試卷
- 2025年銷售傭金合同范本與業(yè)績激勵方案3篇
- 2025版木工行業(yè)培訓與認證服務(wù)合同范本4篇
- 2025年商業(yè)委托銷售協(xié)議
- 2025年合法住房公租房協(xié)議
- 二零二五年度駕校品牌推廣與市場拓展合作合同2篇
- 2025年度個人二手車轉(zhuǎn)讓及二手車增值服務(wù)合同3篇
- 二零二五年度林業(yè)苗木繁育基地承包合同4篇
- 二零二五年度集體產(chǎn)權(quán)房屋買賣合同樣本(含房屋產(chǎn)權(quán)調(diào)查及核實要求)
- 《醫(yī)院財務(wù)分析報告》課件
- 2025老年公寓合同管理制度
- 2024-2025學年人教版數(shù)學六年級上冊 期末綜合卷(含答案)
- 2024中國汽車后市場年度發(fā)展報告
- 感染性腹瀉的護理查房
- 天津市部分區(qū)2023-2024學年高二上學期期末考試 物理 含解析
- 《人工智能基礎(chǔ)》全套英語教學課件(共7章)
- 廢鐵收購廠管理制度
- 物品賠償單范本
- 《水和廢水監(jiān)測》課件
- 滬教版六年級數(shù)學下冊課件【全冊】
評論
0/150
提交評論