兩輪自平衡車_第1頁
兩輪自平衡車_第2頁
兩輪自平衡車_第3頁
兩輪自平衡車_第4頁
兩輪自平衡車_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余12頁可下載查看

下載本文檔

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

文檔簡介

1、兩輪自平衡車算法:和大家的一樣,一個(gè)傾角環(huán),一個(gè)車速環(huán)。取得角度、角速度、車速、車位移四個(gè)量后經(jīng)過運(yùn)算送給硬件:主控:atmega16;角度傳感器:角速度傳感器(陀螺儀)ENC-03MB 值接接 AD 輸入,未加硬件濾波)、加速度傳感器 MMA726。二者度、角速度。PS:抄 zlstone 的,呵呵。電機(jī)速度傳感器:每個(gè)電機(jī)兩個(gè)霍爾傳感器(AB 相)。電機(jī):型號(hào)不清楚,很常見的減速電機(jī)。額定電壓 6V,功率 3W電機(jī)驅(qū)動(dòng):L298N電源:變壓器整流橋那種普通電源,幾塊錢一個(gè)。兩個(gè),電機(jī)、MC 出開供電。電機(jī)電源電壓打到最高不接電機(jī)時(shí)機(jī) 5V 多,汗。顯示器:LCD1602B遙控:電視紅外遙控

2、器PWM 區(qū)動(dòng)電機(jī)kalman 融合取得角15V 多,接了電(原文件名:20110110_0103.jpg)引用圖片(原文件名:20110110_0104.jpg)引用圖片源代碼 WINAVR20100110+AVRStudio4.18burdev610434c8FD1C.rar(文件大?。?04K)(原文件名:Balance.rar)原理圖:atmega16 最小系統(tǒng)版 ourdev610214M89OEI.pdf(文件大小:30K)(原文件名:M16 迷你板電路圖.pdf)口盤I(XCKTO)PBO匚mJ(T1)PB1匚紅外UUNT2/AIN0)PB2匚_(OCO/AIN1)PB3匚廣(交

3、)P84匚L298M飆。汕PB5匚向切換rJMISO)PB6匚PB7匚RESET匚VCC匚GND匚XTAL2匚XTAL1匚史(RXD)PDO匚(TXD)PD1匚霍爾傳感器4(INTO)PD2匚2忤可PD3匚(O,1B1PD4匚網(wǎng)路PWM(pblA)|PD5匚Bi(ISPtJPD6匚上位機(jī),帶波形、數(shù)據(jù)顯示車速未濾波之前波形(原文件名:車速未濾波之前波形,JPG)PDIPkJTEnJ廠u斫rMrftjf的蟲IIP愕止3ml14023933843753663573483393210311130122913281427152616251724182319222021PA0 (ADG0)陀螺儀PA1

4、(ADC1初口速度傳感器PA2 (ADC2)PA3 (ADC3)PA4 (ADC4測試用LEDPA5 (ADC5JRSPA6 (AiDC6)RWPA7(ADC71EH以口匚叫7260模塊自帶八匚11173,兩電源1實(shí)GND測3.36VAVCCPC7PC6(TOSC2)(TOSCI)FC5 (TDI)PC4PC3(TDO)(TMS)工1602數(shù)據(jù)PC2 (TCK)PC1 (SDA)PC0(SCLLtlj2nn-lnn,n-lnnnourdev610318TY8G24.rar(文件大?。?8K)(原文件名:串口調(diào)試,rar)視頻在這里 http: 6V 的可實(shí)際電壓空載的時(shí)彳 g 才打到 5 伏多

5、一點(diǎn),在平衡的時(shí)候沒測,肯定更低了。陀螺儀 ENC-03 是直接接 AD 輸入端的,因?yàn)榘凑?datasheet 上邊的參考電路有過沖問題,這個(gè)問題有個(gè)帖子已經(jīng)討論過,很多人都是圍繞怎么補(bǔ)救這個(gè)問題,我來算一下為什么這樣子,呵呵如下:num=0,4Tg也TFg47P11,ye=tf(num,den)Trnsferfunction:口/5高通濾波脈沖響應(yīng)(原文件名:QQ 截圖未命名.jpg)因?yàn)橛羞@個(gè)問題,會(huì)給傾角數(shù)據(jù)造成影響,所以我就去掉了濾波,直接接到 AQ 這樣 1deg/s 有 0.67mv,10 位 AD 參考電壓是 3.36V,最小才能測到 3.28mv,小于 4.8deg 時(shí)就測不

6、到了。本來擔(dān)心這個(gè)問題,但試了下 KALMANt 波,真是強(qiáng)??!角度很精確,就這么用了。車體研究了好久,沒有用鋼化玻璃的設(shè)備,就一直沒動(dòng)工。有天去打水突然看到旁邊有個(gè)大的三合板,呵呵,于是乎。感覺車體結(jié)構(gòu)也是個(gè)難點(diǎn)啊,要算尺寸,要打孔(先用烙鐵頭扎,在用螺絲刀來回鉆),挺費(fèi)勁的。還有支架,試用很短的銅柱,一個(gè)一個(gè)摞起來的,車速 10Hz 低通濾波后波形(原文件名:車速 10Hz 低通濾波后波形.JPG)hVU4tHponsHt所有能找到的銅柱都用上了,剛好夠用。這種車體的中間不能負(fù)重,重了后面?zhèn)z輪就往外翻,當(dāng)時(shí)是做打水機(jī)器人的,后來沒有做完就 over 了不知道 STC 那種的,我只用過空 8

7、9C51 那種的,呵呵。這個(gè)車要用很多片內(nèi)外設(shè)的。AIN0:陀螺儀輸入AIN1:加速度計(jì)輸入T0:采樣周期定時(shí),算法都在這里完成;T1:兩路 PWM;T2:用作霍爾傳感器 T 法測速(要用碼盤 M 法測速,不需要用)、紅外脈沖定時(shí);INT0、INT1:接霍爾傳感器,采集速度INT2:紅外接收頭輸入信號(hào)(遙控要用無線的話,也省了)電機(jī)驅(qū)動(dòng)電路圖驅(qū)動(dòng)我買的模塊 20 塊,賣家沒提供電路圖。應(yīng)該是和這個(gè)一樣的http: 偏偏是沒有, PCB 上還要額外放 8 個(gè)高速二極管是很讓人吐血的一件事情小功率版的 L293 是有二極管的, 用起來方便多了。問題找到了,本來程序是 Debug 版本的,要改成正式

8、發(fā)行版的,VC 我只用了不久,是低級(jí)錯(cuò)誤啦,呵呵。LZ 位軟件我重新改過了。VC 工程在這里。上位機(jī) VC+工程源碼 ourdev610317VUO0LN.rar(文件大?。?.99M)(原文彳名:Curve1.rar)寫的有點(diǎn)亂,10.1 假期寫的,后邊就沒怎么更新了。兩種顯示,字符顯示和調(diào)試助手相同,要用示波器的話,協(xié)議為: 先發(fā) 0 xFD,再連續(xù)發(fā)兩個(gè)字節(jié)數(shù)據(jù), 多個(gè)數(shù)據(jù)依次發(fā)下去。 單片機(jī)中此段程序即為發(fā)送波形顯示數(shù)據(jù)的格式: if (+ctr_pos=2)ctr_pos=0;temp1=speed_filter*10+150;Putc(0 xfd);Putc(temp1/256);

9、Putc(temp1%256);數(shù)據(jù)發(fā)的不能太快(差不多要大于 10ms),太快右側(cè)字符頻繁刷新界面,上位機(jī)會(huì)卡死,所以在界面上設(shè)置了禁止字符輸出,用示波器時(shí),最好選上。這個(gè)軟件可以查看歷史波形、數(shù)據(jù)。自己頂一個(gè),沒人關(guān)注啦,大家對(duì)這個(gè)沒什么興趣?所有資料都有啊!我說下成本:AVR 最小系統(tǒng)版 45;陀螺儀 ENC-30MB:35;加速度傳感器 MMA7260 模塊:48(5V/3.3V 供電);電機(jī)+輪子+聯(lián)軸器兩套:96;霍爾傳感器模塊(兩對(duì),每對(duì) AB 相):34;電機(jī)驅(qū)動(dòng)板:20;遙控、顯示看個(gè)人了。45+35+48+96+34+20=278 元。所有的加一起 300 元吧。此貼的價(jià)值

10、:1 .車的成本相對(duì)來說很低;2 .所有代碼,電路開源(都是模塊插線,沒有 PCB 的。);3 .這個(gè)上位機(jī)真的很實(shí)用。沒有示波器或者不方便用示波器時(shí)候,用它顯示波形很爽的,并且可以保留歷史波形哦!在做此車過程中,我先后用它看了角速度、加速度、陀螺儀積分的角度、KALMAN 濾波的角度、車運(yùn)行過程中的角度、電機(jī)空載速度、PI 閉環(huán)的空載調(diào)速曲線(此車沒用速度閉環(huán))、車位移等曲線。很直觀!發(fā)送數(shù)據(jù)的協(xié)議很簡單,上面已經(jīng)講過。而且代碼開源的,自己可以在此基礎(chǔ)上增加、改善一些功能。知道可不可以貼淘寶地址,有做廣告的嫌疑啊。飛思卡爾三軸高是蹴加速度佶感器模塊飛思卡爾三軸高是蹴加速度佶感器模塊MMA72

11、60機(jī)踞人智能車機(jī)踞人智能車皇冠皇冠EHGQ孫孫18進(jìn)口原嬲四祜進(jìn)口原嬲四祜角速度傳感器機(jī)器人配件角速度傳感器機(jī)器人配件“皇冠皇冠25mm電機(jī)專用固定座,鋁合金結(jié)構(gòu)電機(jī)專用固定座,鋁合金結(jié)構(gòu); ;堅(jiān)固網(wǎng)用機(jī)把人配怦堅(jiān)固網(wǎng)用機(jī)把人配怦 3 3 皇皇冠冠4MM瞅車輪胎連接舞聯(lián)軸器連軸器車模配件瞅車輪胎連接舞聯(lián)軸器連軸器車模配件DIY小車小車媼媼智能軍機(jī)黑人用輪胎模型車輪輪胎優(yōu)質(zhì)輪胎智能軍機(jī)黑人用輪胎模型車輪輪胎優(yōu)質(zhì)輪胎65mm小車輪子小車輪子特價(jià)熱銷過百躇將營太扭距特價(jià)熱銷過百躇將營太扭距jMB激速電機(jī)金星也匏直激速電機(jī)金星也匏直, ,馬馬眥濟(jì)會(huì)需生璃LZ 買的太貴了,MMA7260 才 13,E

12、NC-03 為 18,我也買了許多元件,但 AVR 單片機(jī)不太懂,一直沒敢開工。正在學(xué)習(xí),剛設(shè)計(jì)了個(gè)實(shí)驗(yàn)板。另外驅(qū)動(dòng)電路是自己做的,分立元件的,體積稍大,但效果很好。向樓主學(xué)下中。oooo是有點(diǎn)貴當(dāng)初買的時(shí)候也看了其他店子,有像你說的很便宜的,但是你也要考慮郵費(fèi)起碼 10 元吧,那個(gè) MMA7260 挺好的別看要元,是已經(jīng)做好的模塊,而且有插針,可以直接插在萬用版上的,你要是 13 塊錢買個(gè)芯片的話,要是沒風(fēng)槍的話,不好焊吧,我是不會(huì)焊,呵呵。其他店類似的模塊也要 30 多吧,再加個(gè)郵費(fèi)也差不多了。但客觀的講,那個(gè)店確實(shí)有點(diǎn)點(diǎn)貴,但是所有東西一次性都買齊了。做此車不是非要用 AVR 的,只要速

13、度、外設(shè)夠用就可以!需要的外設(shè)上邊都有說。關(guān)鍵要懂算法!其實(shí)我也是一知半解,給你推薦篇文章卡爾曼濾波介紹中文版ourdev611837OCLGOY.pdf儀件大?。?40K)(原文件名:kalman_intro_chinese.pdf)48智能車升級(jí)件機(jī)器人配件智能車升級(jí)件機(jī)器人配件硬鐵傳感器加速菖裝閉環(huán)硬鐵傳感器加速菖裝閉環(huán)控制控制”卡爾曼濾波介紹英文版ourdev611838G0F5Z1.pdf(文件大小:173K)(原文件名:kalman_intro.pdf)文章從頭開始看,看完離散卡爾曼濾波那一節(jié),就會(huì)理解很多。后面擴(kuò)展卡爾曼我看不懂,最后面舉了個(gè)例子,好好看下??柭?C 語言our

14、dev611839GC1Z3U.txt(文件大?。?K)(原文件名:kalman.txt)再看下這個(gè)程序。和我用的結(jié)構(gòu)差不多的(我的是抄zlstone 的,他貌似也是復(fù)制的,呵呵,最難的就是卡爾曼)。下面是我的:voidKalman_Filter(floatangle_m,floatgyro_m)gyro_m:gyro_measureangle+=(gyro_m-q_bias)*dt;先驗(yàn)估計(jì)Pdot0=Q_angle-P01-P10;/Pk-先驗(yàn)估計(jì)誤差協(xié)方差的微分Pdot1=-P11;Pdot2=-P11;Pdot3=Q_gyro;P00+=Pdot0*dt;/Pk-先驗(yàn)估計(jì)誤差協(xié)方差微分

15、的積分=先驗(yàn)估計(jì)誤差協(xié)方差P01+=Pdot1*dt;P10+=Pdot2*dt;P11+=Pdot3*dt;angle_err=angle_m-angle;/zk-先驗(yàn)估計(jì)PCt_0=C_0*P00;PCt_1=C_0*P10;E=R_angle+C_0*PCt_0;K_0=PCt_0/E;/KkK_1=PCt_1/E;t_0=PCt_0;t_1=C_0*P01;P00-=K_0*t_0;/后驗(yàn)估計(jì)誤差協(xié)方差P01-=K_0*t_1;P10-=K_1*t_0;P11-=K_1*t_1;angle+=K_0*angle_err;/后驗(yàn)估計(jì)q_bias+=K_1*angle_err;/后驗(yàn)估計(jì)a

16、ngle_dot=gyro_m-q_bias;/輸出值(后驗(yàn)估計(jì))的微分=角速度我只能幫這些了,我的方向是運(yùn)動(dòng)控制方面,KALMAN 貌似在信號(hào)分析相關(guān)專業(yè)會(huì)學(xué)的,所以我也沒細(xì)看了。上述程序我是直接復(fù)制過來的,只改了采樣周期,剩下一點(diǎn)沒動(dòng)(還加了點(diǎn)注釋,呵呵)。有關(guān) KALMAN 的詳細(xì)解釋一般都是外國網(wǎng)站的,中國的都是扯淡。我做這個(gè)車的目的就是想搞下 PID,怎么獲取角度是次要的東西。需要兩個(gè)傳感器,角速度傳感器(ENC-03MB)、加速度傳感器(MMA7260)。AD 測量并轉(zhuǎn)換得兩者數(shù)據(jù),送 KALMAN 濾波,輸出得到角度(angle)、角速度(angle_dot),就可以用了!兩個(gè)傳

17、感器得到的數(shù)據(jù)是什么呢?是角度逮是角速度呢?我用了角速度傳感器和加速度傳感器得到陽角是沒周題的,但封事子言十算偏航的角度就出琨周題了因卷加速度傳感器沒法封角速度傳感器迤行差,適方面 lz 是怎么解決呢?就是角速度和加速度??!要得到角度需要卡爾曼(KALMAN)融合,可以活得很精確的角度。如果用我那段程序需要根據(jù)自己的采樣周期修改 dt 的值,我的是 6ms,所以 dt=0.006o用卡爾曼融合角速度傳感器和加速度傳感器的數(shù)據(jù),道里明白了,也可以得到角,因卷有封地面的加速度是不燮的,也是 1g到了言十算偏航的畤候,沒有了地心引力,就痛了偏航的也是角速度和加速度喝?角速度傳感器的數(shù)據(jù)得到 gyro

18、_m,但怎么把加速度得到的數(shù)據(jù)算成 angle_m 呢?我逮是不懂呢!不好意思,我搞錯(cuò)了。送給 KALMAN 的數(shù)據(jù)應(yīng)該是角速度、加速度計(jì)求得的角度而不是加速度。acc=acc-1650;/加速度測量數(shù)據(jù)-靜態(tài)值acc=acc/800;/這里得到角度的正弦值if(acc1)算出的值可能大于 1 或小于-1,是錯(cuò)的,所以限下幅acc=1;elseif(acc-1)acc=-1;acc=180/3.1415*asin(acc);/asin 求反正弦,得出的單位是弧度,*180/pi 得到角度值w=(gyro-1178)/0.67;/角速度值Kalman_Filter(acc,w);角度,角速度。函

19、數(shù)原型:Kalman_Filter(floatangle_m,floatgyro_m)加速度計(jì)反正弦求出的角度靜止時(shí)是很精確的,但是在運(yùn)動(dòng)(偏航就是運(yùn)動(dòng)吧)時(shí)由于有除重力附加的加速度,所以算出的角度將不準(zhǔn)。角速度積分求出的角度,因?yàn)槭欠e分,所以在累加過程中又慢慢的累計(jì)誤差,慢慢得出的角度也不準(zhǔn)了,角速度傳感器本身也有溫漂問題,也會(huì)造成影響。融合之后很精確。acc 是加速度計(jì)是輸出,道是一軸加速度言十喝?就是加速度言十的方向軸是輿事子的方向承直角,道理解封喝?acc=acc-1650;/加速度測量數(shù)據(jù)-靜態(tài)值一道是減去 0glt 出的值acc=acc/800;/這里得到角度的正弦值,之彳爰的都理

20、解了,asin 彳爰換成角度,w 是慮理角速度傳感器的輸出逮有的是,lz 主控的 AD 是多少位的?我的是 0-5V 換成 0-1024 的,所以靜態(tài)值太余勺 3XX.其也不是冏題,主要的是 800 是怎么言十算的呢?剛想到了一偃 I 冏題,事子向前左或前右斡的畤,加速度言十不是有雨他輸出喝?怎么只取 acc 一偃 I 呢?想了想,如果 acc 是輿地平面承水平的方舌,在 asin 的畤候,不曾把別一偃 I 值成了 1g(地心引力)吧?那不是也在做角喝?800mv 見數(shù)據(jù)手冊(cè):點(diǎn)擊此處下載 ourdev612056WR1X9S.pdf(文件大小:197K)(原文件名:MMA7260QT_NoR

21、estriction.pdf)g-S$lectTheg-Selectfeatureallowsfortheselectionamong4sensitivitiespresentinthedevice.Dependingonthelogicinputplacedonpins1and2,thedeviceinternalgainwillbechangedallowingittofunctionwitha1,5g.2g.4g,or6gsensitivity(Tab!e3).Thisfeatureisidealwhenaproducthasapplicationsrequiringdifferents

22、ensitivitiesforoptimumperformance.Thesensitivitycanbechangedatanytimeduringtheoperationoftheproduct.Theg-Select1andg-Selec12pinscanbeleftunconnectedforapplicationsrequiringonlya1.5gsensitivityasthedevicehasaninternalpull-downtokeepitatthatsensitivity(800mV/g).Table3.g-SelectPinDescriptionsg-Select2g

23、-Select1g-RangeSensitivity0015g800mV/g01|2g600mV/g104g300mV/g11土200mV/g(原文件名:QQ 截圖未命名 3.jpg)引用圖片(原文件名:QQ 截圖未命名引用圖片除 800mv 得到的是多少 g,假如 0.2g,那么 0.2g/g=0.2 不就是正弦值么?然后再反正弦并把單位轉(zhuǎn)成角度制我的 AD 用 10 位,參考電壓用 MMA726 蟆塊自帶的 3.3V 穩(wěn)壓電源(3.36v),參考電壓越小越精確,但也別太小了。看下最大能測的加速度:(3360-1650)/800=2.1375,能測到 2g 多點(diǎn),夠用了。你用 5V 參考的話

24、分辨率降低很多,也沒有什么好處。MMA726 嘟是3.3V 供電的吧,直接把電源線接到 AD 參考電壓就行了。還有要考慮 Pt 螺儀的量程,靜態(tài)輸出 1.35V,由公式:Outputvoltage=V0+SvxwVV0:StaticoutputV(atangularvelocityis0deg/s)Sv:ScalefactormV/deg/sw:Angularvelocityangularvelocityrange:-90to+90deg/s最大能測的 w 為-90to+90 極限電壓為 1350+0.67*90=1410.3,1350-0.67*90=1289.7,落在參考電壓 3.36V

25、內(nèi),沒有問題。另外 AD 最小能分辨 3360/1024=3.28125mv 電壓,對(duì)于小于此值時(shí)的角速度是無法測量的(其實(shí)挺小的),用 KALMANS 波之后的角度很精確的。在昨晚想到的,事子向前左或前右斡的日寺,加速度言十不是鷹有雨偃 I 輸出喝?怎么只取 acc 一偃 I 呢?想了想,如果 acc 是輿地平面承水平的言舌,在正弦的畤候,那不是也在做角喝?道已猜到了是正弦了,但是.除 800mv 之前,不是要把 AD 得到的數(shù)據(jù)換成重壓值喝?例如我的主控 AD 是 0-5V 莖切 I0-1023 的,先把 AD 彳!*5/1024 再除 800m 才莖 i喝?角的言十算(也就彳系除 800

26、mv 彳爰得到的是多少 g,再除 1g 的正弦)已完成了回到一直的冏題,是水平面的偏角,如果 zltt 向天,水平面就是 xy 面的角度燮化,沒有 1g 的參典,道所以才令我痛了看懂了,原來已余筌換成了雷:壓,(3360mv-1650mv)/800mv=2.1375 但是 xy 面(z4 由向天)的偏角逮困 8!著lz,Ig 角的言十算已余筌完成了水平面的偏角有辨法解決喝?感!寸.不懂你的意思。oo2.jpg)得到角度就行了唄,還算什么水平面的偏角”?。縊UT1OUT2 間電壓就是電機(jī)電源經(jīng)過 PW 慚波后的電壓, 你把 ENA 也進(jìn)程高電平, 就是占空比 100%這是 OUT1OUT2 電壓

27、為電機(jī)電源電壓回復(fù) 【74樓】ZRYXY7260 是加速度傳感器,在靜止時(shí)測的是重力在相應(yīng)坐標(biāo)軸上的加速度分量,但是在頻繁變速運(yùn)動(dòng)時(shí)在對(duì)應(yīng)坐標(biāo)軸上會(huì)有運(yùn)動(dòng)中的額外加速度,這就給獲得真實(shí)角度帶來干擾了,可能可以通過補(bǔ)償獲得角度吧,但是應(yīng)該很困難了,呵呵,但是只用陀螺儀貌似可以的,樂高的就是只用的陀螺儀,也需要補(bǔ)償了。我用到了 PID,PWM=ut=Kp1 角度+Kd1*角速度+Kp2*車速+Ki2*車位移。但是和傳統(tǒng)的 PID 有點(diǎn)不太一樣,一般 PID 就是單輸入單輸出,但這里給定為角度 0 和車位置 0,輸出為角度和車位置。其實(shí)用 PID 是最簡潔、最粗糙的方法,效果好的話都用到了現(xiàn)代控制,

28、我不怎么懂,呵呵。你這個(gè)程序有些難啊,能不能簡化下,程序主要的只留 AD 采集、卡爾曼濾波和 PID 計(jì)算 PWM 輸出就能跑的,不要外圍的車速檢測、紅外遙控、液晶顯示、和鍵盤什么的,只留加速度傳感器和角速度傳感器以及 PWM 輸出還有電機(jī)正反轉(zhuǎn)換,底子薄的人看的好辛苦啊,看了五天了,眼花了,呵呵,麻煩你啦,LZ!我的也模仿成功了,效果還可以。下一步將小車美化一下,剛購買了十節(jié)饃氫電池,回頭加在小車上,它就可以自由跑了。我調(diào)試時(shí),將加速度獲得的角度乘以 3.5 后才送入卡爾曼濾波的,不過還沒理解卡爾曼濾波,在調(diào)試時(shí)發(fā)現(xiàn)小車對(duì) MMA7260 反應(yīng)偏小偏慢,所以就將其放大后才送入卡爾曼濾波的?;?/p>

29、復(fù)【102 樓】ZRYXY這個(gè)問題是因?yàn)槟銢]有定義 uchar 和 uint 兩個(gè)宏,這個(gè)怨我!我圖省事把這兩個(gè)定義直接寫在 io.h 中了,這樣以后就直接用這兩個(gè)宏就可以了,但這也讓代碼不可移植了。不要學(xué)我這么干,我以后也不這么干了。用的時(shí)候這樣定義吧:#ifndefuchar#defineucharunsignedchar#endif#ifndefuint#defineuintunsignedint#endif此段程序分別加在 Balance_1602.c 和 Balance_2motors.c 程序前邊。這樣就 OK 了。通過這個(gè)錯(cuò)誤,也知道了大家都沒有運(yùn)行過程序啊。如果我有時(shí)間會(huì)把程序

30、整理下、加些注釋?;丶疫^了個(gè)年,回來之后有點(diǎn)忘記了。首先要確保采集到的角度足夠穩(wěn)定,要沒有毛刺。有微小偏差沒關(guān)系,這是因?yàn)檐嚻胶鈺r(shí)的角度為 0 度,如果有點(diǎn)偏差,車頂多就是平衡時(shí)傾斜一點(diǎn),再靠水平的速度、位移調(diào)節(jié)也不會(huì)讓車動(dòng)彈的!檢查測量到角度的效果可以用我上邊 25 樓提到的那段程序稍加修改。再就是一定要確保你的 PID 各項(xiàng)構(gòu)成負(fù)反饋,如果其中任意一項(xiàng)構(gòu)成正反饋都永遠(yuǎn)不會(huì)穩(wěn),或者只能穩(wěn)定一小段時(shí)間。參數(shù)共 4 項(xiàng),需要依次測試。調(diào)節(jié)過程中,要時(shí)刻記住 PWM 量程是多少,假設(shè)為 0255,那么在調(diào)節(jié)過程中就要根據(jù)這個(gè)參數(shù)來設(shè)定各個(gè) K 值大概的值。你想想太小的話,假設(shè)角度 K=2,那么當(dāng)角

31、度很大的時(shí)候,假設(shè) 30 度,這時(shí)控制量才為 2*30=60255,效果就是只要角度不為精確地 0 度,那么電機(jī)就會(huì)全速運(yùn)行,以最大力量調(diào)整車體,這時(shí)你想想能穩(wěn)定么,車體傾斜角度會(huì)很快發(fā)散,最后倒下。整定方法大概如下:1 .調(diào)角度 K 值,調(diào)到基本能夠站立;2 .調(diào)角速度 K 值,從零慢慢增加,這個(gè) K 很小。太小的話,車子反應(yīng)遲鈍,好像沒有這項(xiàng)一樣,太大的話,車子抗擾能力變差,所以要適當(dāng)。3 .調(diào)水平速度 K 值的時(shí)候,要注意你獲得的車速是不是很精確的,如果用很多線的光電碼盤就會(huì)很精確,但如果碼盤只要幾線,或者像我用的一個(gè)霍爾傳感器,獲得的速度就會(huì)很不精確,這時(shí)就要做好車速的低通濾波,很關(guān)鍵

32、!濾波做好了,車速調(diào)節(jié)效果很好的,算位移的時(shí)候都是很精確的,沒有太快的漂移。車速 K 值也是慢慢增加,增加過程中觀察車的反應(yīng)。4 .位移 K 值也應(yīng)該很小,因?yàn)槭撬俣鹊睦塾?jì),慢慢會(huì)漂移變大,設(shè)定一個(gè)上下限,是為了防止漂移過大造成控制量過大最后會(huì)等于 255出現(xiàn)點(diǎn)效果后的調(diào)節(jié)也不是按照 1234 這樣調(diào)的,后來我是 1、3、4 反復(fù)調(diào)節(jié)的,2 基本沒動(dòng)。很多細(xì)節(jié)問題有點(diǎn)忘了,當(dāng)時(shí)剛做完應(yīng)該寫下來的啊。修改問題后的程序,點(diǎn)擊此處下載ourdev618995UWBCLG.rar(文件大?。?05K)(原文件名:程序.rar)PS:我上傳的這個(gè)程序不是我最終燒錄的程序,我當(dāng)初上傳之前做了點(diǎn)格式的改動(dòng),

33、現(xiàn)在好了。如果你的程序直接用我的話,那啟動(dòng)系統(tǒng)是需要先按下 PINB0 按鈕的。main 函數(shù) 512 行 while(1).。我現(xiàn)在沒有時(shí)間簡化程序,只加了注釋,等我有空改下。#include#include#defineError(Str)FatalError(Str)#defineFatalError(Str)fprintf(stderr,%sn,Str),exit(1)typedefcharElementType;#ifndef_Stack_hstructStackRecord;typedefstructStackRecord*Stack;intIsEmpty(StackS);intI

34、sFull(StackS);StackCreateStack(intMaxElements);voidDisposeStack(StackS);voidMakeEmpty(StackS);voidPush(ElementTypeX,StackS);ElementTypeTop(StackS);voidPop(StackS);ElementTypeTopAndPop(StackS);#endif#includestackar.h#includefatal.h#include#defineEmptyTOS(-1)#defineMinStackSize(5)structStackRecordintCapacity;intTopOfStack;ElementType*Array;intIsEmpty(StackS)returnS-TopOfStack=EmptyTOS;intIsFull(StackS)returnS-TopOfStack=S-Capacity-1;StackCreateStack(intMaxElements)StackS;if(MaxElementsArray=malloc(sizeof(ElementType)*MaxElements);if(S-Array=NULL)FatalError(Outofspace!);S-C

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論