雙輪自平衡小車項(xiàng)目設(shè)計(jì)報(bào)告_第1頁
雙輪自平衡小車項(xiàng)目設(shè)計(jì)報(bào)告_第2頁
雙輪自平衡小車項(xiàng)目設(shè)計(jì)報(bào)告_第3頁
雙輪自平衡小車項(xiàng)目設(shè)計(jì)報(bào)告_第4頁
雙輪自平衡小車項(xiàng)目設(shè)計(jì)報(bào)告_第5頁
已閱讀5頁,還剩55頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

雙輪自平衡小車項(xiàng)目設(shè)計(jì)報(bào)告電子與信息工程學(xué)院項(xiàng)目設(shè)計(jì)報(bào)告項(xiàng)目名稱 雙輪自平衡小車設(shè)計(jì) 學(xué)生姓名 戴磊103621015 廖崎107221046 李旭103621045 王思然103522024 專業(yè) 電子信息科學(xué)與技術(shù)班級(jí) 103622 指導(dǎo)教師 李東京萬青趙東目錄一自平衡小車的總體方案設(shè)計(jì) 31、自平衡小車的設(shè)計(jì)方案 32、自平衡小車的總體框圖 3二系統(tǒng)的具體設(shè)計(jì)與實(shí)現(xiàn) 41、單片機(jī)控制模塊 42、陀螺儀加速度計(jì)模塊 43、光碼盤測(cè)速模塊 64、穩(wěn)壓模塊 75、電機(jī)驅(qū)動(dòng)模塊 86、LCD1602顯示模塊 11三軟件系統(tǒng)設(shè)計(jì) 161、設(shè)計(jì)思想 16(1)PID技術(shù) 16(2)應(yīng)用現(xiàn)狀 16(3)PID調(diào)節(jié)規(guī)律 17(4)極點(diǎn)配置 18(5)極點(diǎn)配置條件 18(6)極點(diǎn)配置控制器 212、程序流程圖 223、程序代碼 23摘要隨著科技進(jìn)步,生活水平的提高,人們追求智能與舒適的愿望也日益強(qiáng)烈。從而催生了許多智能化的產(chǎn)品。如智能電視、智能小車等。如何實(shí)現(xiàn)小車的小車的自動(dòng)快捷駕駛,也成為人們心中的向往與疑問,基于這種趨勢(shì)與需求,著眼于實(shí)際情況。本文介紹了基于STC90C51單片機(jī)的自平衡小車系統(tǒng)的設(shè)計(jì)。系統(tǒng)基于陀螺儀等傳感器,利用PID平衡算法,對(duì)小車的速度傾斜角度平衡狀態(tài)來進(jìn)行檢測(cè),并通過單片機(jī)來控制電機(jī)來實(shí)現(xiàn)雙輪小車自如平衡地運(yùn)動(dòng)。從而實(shí)現(xiàn)小車智能自主控制的目的。關(guān)鍵詞:STC90C51自平衡PID算法一自平衡小車的總體方案設(shè)計(jì)1、自平衡小車的設(shè)計(jì)方案該自平衡小車,采用STC90C51單片機(jī)和各種傳感器的組合,構(gòu)成了自平衡小車系統(tǒng)。其系統(tǒng)主要由以下幾個(gè)部分組成:單片機(jī)控制系統(tǒng)、陀螺儀加速度檢測(cè)模塊、光碼盤測(cè)速模塊、穩(wěn)壓模塊、電機(jī)驅(qū)動(dòng)模塊、LCD1602顯示模塊組成。本設(shè)計(jì)的自平衡小車工作原理:給小車通電,平衡放在地上,當(dāng)小車開始傾斜時(shí),陀螺儀及時(shí)地采集的小車傾斜角度數(shù)據(jù)傳給單片機(jī),而加速度計(jì)將車子傾斜的瞬時(shí)加速度采集后也傳給單片機(jī),同時(shí),光碼測(cè)速儀也將車子的實(shí)時(shí)速度采集后傳給單片機(jī)。單片機(jī)系統(tǒng)收集到以上三組數(shù)據(jù),對(duì)數(shù)據(jù)進(jìn)行量化處理后,在PID平衡算法的控制下,控制電機(jī)及時(shí)地做出前進(jìn)或后退或加速或減速的反應(yīng),使車子在一個(gè)小角度范圍內(nèi)做平衡地來回?cái)[動(dòng),以保持車子的不倒。2、自平衡小車的總體框圖自平衡小車主要由以下模塊組成:單片機(jī)控制系統(tǒng)、陀螺儀加速度檢測(cè)模塊、光碼盤測(cè)速模塊、穩(wěn)壓模塊、電機(jī)驅(qū)動(dòng)模塊、LCD1602顯示模塊,以下是自平衡小車系統(tǒng)方框圖。單片機(jī)控制模塊陀螺儀加速度模塊單片機(jī)控制模塊陀螺儀加速度模塊電機(jī)驅(qū)動(dòng)模塊電機(jī)驅(qū)動(dòng)模塊光碼盤測(cè)速模塊光碼盤測(cè)速模塊LCD1602顯示模塊LCD1602顯示模塊穩(wěn)壓模塊(電源)穩(wěn)壓模塊(電源)自平衡小車系統(tǒng)框圖二系統(tǒng)的具體設(shè)計(jì)與實(shí)現(xiàn)1、單片機(jī)控制模塊單片機(jī)最小系統(tǒng)原理圖如下:單片機(jī)最小系統(tǒng)單片機(jī)最小系統(tǒng)由復(fù)位電路以及晶振電路組成,它是保證單片機(jī)能正常工作的最基本條件,在此不作過多介紹。2、陀螺儀加速度計(jì)模塊本設(shè)計(jì)中所采用的陀螺儀加速度設(shè)模塊為MPU6050,之所以選擇這個(gè)模塊,是因?yàn)槠溆幸韵聝?yōu)點(diǎn):()集角度測(cè)量與加速度測(cè)量于一體(2)其那同時(shí)測(cè)量三軸上的角度與加速度測(cè)量(3)其輸出為數(shù)字信號(hào),便于處理于存儲(chǔ)與傳輸(4)測(cè)量范圍大,反應(yīng)快。以下是MPU6050相關(guān)資料MPU-6000為全球首例整合性6軸運(yùn)動(dòng)處理組件,相較于多組件方案,免除了組合陀螺儀與加速器時(shí)之軸間差的問題,減少了大量的包裝空間。MPU-6000整合了3軸陀螺儀、3軸加速器,并含可藉由第二個(gè)I2C端口連接其他廠牌之加速器、磁力傳感器、或其他傳感器的數(shù)位運(yùn)動(dòng)處理(DMP:DigitalMotionProcessor)硬件加速引擎,由主要I2C端口以單一數(shù)據(jù)流的形式,向應(yīng)用端輸出完整的9軸融合演算技術(shù)InvenSense的運(yùn)動(dòng)處理資料庫,可處理運(yùn)動(dòng)感測(cè)的復(fù)雜數(shù)據(jù),降低了運(yùn)動(dòng)處理運(yùn)算對(duì)操作系統(tǒng)的負(fù)荷,并為應(yīng)用開發(fā)提供架構(gòu)化的API。MPU-6000的角速度全格感測(cè)范圍為±250、±500、±1000與±2000°/sec(dps),可準(zhǔn)確追緃快速與慢速動(dòng)作,并且,用戶可程式控制的加速器全格感測(cè)范圍為±2g、±4g±8g與±16g。產(chǎn)品傳輸可透過最高至400kHz的I2C或最高達(dá)20MHz的SPI。MPU-6000可在不同電壓下工作,VDD供電電壓介為2.5V±5%、3.0V±5%或3.3V±5%,邏輯接口VVDIO供電為1.8V±5%。MPU-6000的包裝尺寸4x4x0.9mm(QFN),在業(yè)界是革命性的尺寸。其他的特征包含內(nèi)建的溫度感測(cè)器、包含在運(yùn)作環(huán)境中僅有±1%變動(dòng)的振蕩器。引腳圖實(shí)物圖3、光碼盤測(cè)速模塊此模塊有以下優(yōu)點(diǎn):測(cè)速精度高,反應(yīng)快,因?yàn)槠湟蝗τ懈哌_(dá)60個(gè)柵格(2)能測(cè)正反轉(zhuǎn)此模塊詳細(xì)資料如下:對(duì)管廠家:美國惠普HP原裝供電電壓:5V接線方式:紅5V

黑GND輸出信號(hào):5Vp-p

兩相信號(hào)輸出(見下圖)。兩根信號(hào)線,一根黃色的一根藍(lán)色的(由于生產(chǎn)批次不同,有時(shí)候信號(hào)線可能為綠色,不影響使用),黃色和藍(lán)色分別是2個(gè)TTL電平(可以直接接單片機(jī))信號(hào)

(注:測(cè)正反轉(zhuǎn)就是靠這兩個(gè)電平區(qū)分是正轉(zhuǎn)還是反轉(zhuǎn))(設(shè)A

B

為信號(hào)線)A先有脈沖,證明是正轉(zhuǎn)B先有脈沖,證明是反轉(zhuǎn)重要說明:長時(shí)間擋住或者不擋均沒有輸出,作為相位檢測(cè),只有在對(duì)射的上升沿和下降沿才會(huì)有波形輸出,所以轉(zhuǎn)動(dòng)碼盤或者用不透明物體來回切換狀態(tài)的時(shí)候才會(huì)有方波輸出,高速狀態(tài)下,類似正弦波或者鋸齒波,詳見下面視頻演示。萬用表測(cè)試一直表現(xiàn)為0.1V左右,是無效的!測(cè)試請(qǐng)用示波器或者單片機(jī)的采集口。測(cè)速原理示意圖測(cè)速原理演示圖4、穩(wěn)壓模塊之所以要設(shè)計(jì)穩(wěn)壓模塊,是因?yàn)槠胶庑≤嚥煌K所需電壓值不同,比如電機(jī)的工作電壓在9V,而單片機(jī)控制系統(tǒng)、LCD1602顯示模塊及測(cè)速模塊工作電壓在5V;但同時(shí)陀螺儀加速度模塊工作電壓卻在3.3V,因此有必要設(shè)計(jì)一穩(wěn)壓模塊,能夠同時(shí)穩(wěn)定地提供這三組電壓值。穩(wěn)壓模塊的原理圖如下:穩(wěn)壓模塊原理圖其中用到兩個(gè)穩(wěn)壓芯片LM7805及LM1117,LM7805能夠?qū)?V到12V之間的輸入電壓轉(zhuǎn)化為5V的輸出輸出電壓,同時(shí)LM117以LM7805V的輸出電壓為輸入電壓,將其轉(zhuǎn)化為3.3V輸出以供陀螺儀加速度模塊使用。圖中,LED為測(cè)試電路是否正常,正常時(shí)燈亮;反之,燈滅。D1為普通二極管,在LM7805的輸入與輸出之間起濾波作用。圖中電容也均為濾波作用。使用時(shí),兩穩(wěn)壓芯片均要用散熱片,否則會(huì)導(dǎo)致溫度過高而燒壞。相應(yīng)的PCB布線圖如下:穩(wěn)壓模塊PCB圖5、電機(jī)驅(qū)動(dòng)模塊由于電機(jī)工作電壓與單片機(jī)的不同,且單片機(jī)本身帶負(fù)載能力不強(qiáng),電機(jī)工作需要較大電流等因素,無法用單片機(jī)直接驅(qū)動(dòng)電機(jī)運(yùn)轉(zhuǎn),因此需要電機(jī)驅(qū)動(dòng)模塊來驅(qū)動(dòng)電機(jī)。在此設(shè)計(jì)中所選用的電機(jī)驅(qū)動(dòng)為L298N模塊。它具有以下優(yōu)點(diǎn):(1)負(fù)載能力強(qiáng)(2)能實(shí)現(xiàn)高電壓強(qiáng)電流的輸出(3)控制簡單方便具體資料如下:L298N是ST公司生產(chǎn)的一種高電壓、大電流電機(jī)驅(qū)動(dòng)芯片。該芯片采用15腳封裝。主要特點(diǎn)是:工作電壓高,最高工作電壓可達(dá)46V;輸出電流大,瞬間峰值電流可達(dá)3A,持續(xù)工作電流為2A;額定功率25W。內(nèi)含兩個(gè)H橋的高電壓大電流全橋式驅(qū)動(dòng)器,可以用來驅(qū)動(dòng)直流電動(dòng)機(jī)和步進(jìn)電動(dòng)機(jī)、繼電器線圈等感性負(fù)載;采用標(biāo)準(zhǔn)邏輯電平信號(hào)控制;具有兩個(gè)使能控制端,在不受輸入信號(hào)影響的情況下允許或禁止器件工作有一個(gè)邏輯電源輸入端,使內(nèi)部邏輯電路部分在低電壓下工作;可以外接檢測(cè)電阻,將變化量反饋給控制電路。使用L298N芯片驅(qū)動(dòng)電機(jī),該芯片可以驅(qū)動(dòng)一臺(tái)兩相步進(jìn)電機(jī)或四相步進(jìn)電機(jī),也可以驅(qū)動(dòng)兩臺(tái)直流電機(jī)。簡要說明:尺寸:80mmX45mm主要芯片:L298N、光電耦合器工作電壓:控制信號(hào)直流5V;電機(jī)電壓直流3V~46V(建議使用36伏以下)最大工作電流:2.5A額定功率:25W特點(diǎn):1、具有信號(hào)指示。2、轉(zhuǎn)速可調(diào)3、抗干擾能力強(qiáng)4、具有過電壓和過電流保護(hù)5、可單獨(dú)控制兩臺(tái)直流電機(jī)6、可單獨(dú)控制一臺(tái)步進(jìn)電機(jī)7、PWM脈寬平滑調(diào)速8、可實(shí)現(xiàn)正反轉(zhuǎn)9、采用光電隔離使用直流/步進(jìn)兩用驅(qū)動(dòng)器可以驅(qū)動(dòng)兩臺(tái)直流電機(jī)。分別為M1和M2。引腳A,B可用于輸入PWM脈寬調(diào)制信號(hào)對(duì)電機(jī)進(jìn)行調(diào)速控制。(如果無須調(diào)速可將兩引腳接5V,使電機(jī)工作在最高速狀態(tài),既將短接帽短接)實(shí)現(xiàn)電機(jī)正反轉(zhuǎn)就更容易了,輸入信號(hào)端IN1接高電平輸入端IN2接低電平,電機(jī)M1正轉(zhuǎn)。(如果信號(hào)端IN1接低電平,IN2接高電平,電機(jī)M1反轉(zhuǎn)。)控制另一臺(tái)電機(jī)是同樣的方式,輸入信號(hào)端IN3接高電平,輸入端IN4接低電平,電機(jī)M2正轉(zhuǎn)。(反之則反轉(zhuǎn)),PWM信號(hào)端A控制M1調(diào)速,PWM信號(hào)端B控制M2調(diào)速??蓞⒖枷聢D表:電機(jī)旋轉(zhuǎn)方式控制端IN1控制端IN2控制端IN3控制端IN4輸入PWM信號(hào)改變脈寬可調(diào)速調(diào)速端A調(diào)速端BM1正轉(zhuǎn)高低//高/反轉(zhuǎn)低高//高/停止低低//高/M2正轉(zhuǎn)//高低/高反轉(zhuǎn)//低高/高停止低低///高其實(shí)物圖如下:L298N電機(jī)驅(qū)動(dòng)模塊實(shí)物圖6、LCD1602顯示模塊此模塊主要用來顯示自平衡小車的各種參數(shù),如傾斜角、瞬時(shí)速度、瞬時(shí)加速度等。同時(shí)也可以觀察可調(diào)參數(shù),這些參數(shù)可以用按鍵輸入,通過LCD1602顯示出來,方便自平衡小車參數(shù)的觀察與更改,達(dá)到高效調(diào)速的目的。其實(shí)物圖如下:LCD1602實(shí)物圖其與單片機(jī)系統(tǒng)組成的原理圖如下:單片機(jī)控制系統(tǒng)及1602顯示模塊相應(yīng)的PCB布線圖如下:其詳細(xì)資料如下:1602LCD分為帶背光和不帶背光兩種,基控制器大部分為HD44780,帶背光的比不帶背光的厚,是否帶背光在應(yīng)用中并無差別1602LCD主要技術(shù)參數(shù):顯示容量:16×2個(gè)字符芯片工作電壓:4.5—5.5V工作電流:2.0mA(5.0V)模塊最佳工作電壓:5.0V字符尺寸:2.95×4.35(W×H)mm引腳功能說明1602LCD采用標(biāo)準(zhǔn)的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如表10-13所示:編號(hào)符號(hào)引腳說明編號(hào)符號(hào)引腳說明1VSS電源地9D2數(shù)據(jù)2VDD電源正極10D3數(shù)據(jù)3VL液晶顯示偏壓11D4數(shù)據(jù)4RS數(shù)據(jù)/命令選擇12D5數(shù)據(jù)5R/W讀/寫選擇13D6數(shù)據(jù)6E使能信號(hào)14D7數(shù)據(jù)7D0數(shù)據(jù)15BLA背光源正極8D1數(shù)據(jù)16BLK背光源負(fù)極表10-13:引腳接口說明表第1腳:VSS為地電源。第2腳:VDD接5V正電源。第3腳:VL為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地時(shí)對(duì)比度最高,對(duì)比度過高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過一個(gè)10K的電位器調(diào)整對(duì)比度。第4腳:RS為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。第5腳:R/W為讀寫信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫操作。當(dāng)RS和R/W共同為低電平時(shí)可以寫入指令或者顯示地址,當(dāng)RS為低電平R/W為高電平時(shí)可以讀忙信號(hào),當(dāng)RS為高電平R/W為低電平時(shí)可以寫入數(shù)據(jù)。第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。第15腳:背光源正極。第16腳:背光源負(fù)極。LCD寄存器的選擇ER/WRS功能說明100寫入命令寄存器101寫入數(shù)據(jù)寄存器110讀取忙碌標(biāo)志及RAM地址111讀取RAM數(shù)據(jù)0X不動(dòng)作LCD指令表指令功能控制線數(shù)據(jù)線RSR/WD7D6D5D4D3D2D1D0清除屏幕0000000001清除屏幕,并把光標(biāo)移至左上角光標(biāo)回到原點(diǎn)000000001x光標(biāo)移至左上角,顯示內(nèi)容不變?cè)O(shè)定進(jìn)入模式00000001I/DSI/D=1:地址遞增,I/D=0:地址遞減S=1:開啟顯示屏,S=0:關(guān)閉顯示屏顯示器開關(guān)0000001DCBD=1:開啟顯示幕C=1:開啟光標(biāo)B=1:光標(biāo)所在位置的字符閃爍移位方式000001S/CR/LxxS/C=0、R/L=0:光標(biāo)左移;S/C=0、R/L=1:光標(biāo)右移S/C=1、R/L=0:字符和光標(biāo)左移;S/C=1、R/L=1:字符和光標(biāo)右移功能設(shè)定00001DLNFxxDL=1:數(shù)據(jù)長度為8位,DL=0:數(shù)據(jù)長度為4位N=1:雙列字,N=0:單列字;F=1:5x10字形,F(xiàn)=0:5x7字形CGRAM地址設(shè)定0001CGRAM地址將所要操作的CGRAM地址放入地址計(jì)數(shù)器DDRAM地址設(shè)定001DDRAM地址將所要操作的DDRAM地址放入地址計(jì)數(shù)器忙碌標(biāo)志位BF01BF地址計(jì)數(shù)器內(nèi)容讀取地址計(jì)數(shù)器,并查詢LCM是否忙碌,BF表示LCM忙碌寫入數(shù)據(jù)10寫入數(shù)據(jù)將數(shù)據(jù)寫入CGRAM或DDRAM讀取數(shù)據(jù)11讀取數(shù)據(jù)讀取CGRAM或DDRAM的數(shù)據(jù)圖10-571602LCD內(nèi)部顯示地址例如第二行第一個(gè)字符的地址是40H,那么是否直接寫入40H就可以將光標(biāo)定位在第二行,第一個(gè)字符的位置呢?這樣不行,因?yàn)閷懭腼@示地址時(shí)要求最高位D7恒定為高電平1所以實(shí)際寫入的數(shù)據(jù)應(yīng)該是01000000B(40H)+10000000B(80H)=11000000B(C0H)。在對(duì)液晶模塊的初始化中要先設(shè)置其顯示模式,在液晶模塊顯示字符時(shí)光標(biāo)是自動(dòng)右移的,無需人工干預(yù)。每次輸入指令前都要判斷液晶模塊是否處于忙的狀態(tài)。1602液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器(CGROM)已經(jīng)存儲(chǔ)了160個(gè)不同的點(diǎn)陣字符圖形,如圖10-58所示,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號(hào)、和日文假名等,每一個(gè)字符都有一個(gè)固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時(shí)模塊把地址41H中的點(diǎn)陣字符圖形顯示出來,我們就能看到字母“A”實(shí)物圖如下:三軟件系統(tǒng)設(shè)計(jì)1、設(shè)計(jì)思想其主要是通過PID技術(shù)對(duì)小車的狀態(tài)進(jìn)行實(shí)時(shí)地跟蹤及調(diào)整。現(xiàn)對(duì)PID算法作些介紹。(1)PID技術(shù)控制技術(shù)是運(yùn)動(dòng)控制的核心,各種先進(jìn)控制技術(shù)的研究不斷推動(dòng)著運(yùn)動(dòng)控制的發(fā)展,比如自適應(yīng)控制技術(shù)和以神經(jīng)網(wǎng)絡(luò)和模糊控制為代表的智能控制技術(shù),但在實(shí)際生產(chǎn)實(shí)踐中應(yīng)用最普遍的還是各種以PID為代表的基本控制技術(shù)按照偏差的比例、積分和微分進(jìn)行控制的調(diào)節(jié)器,簡稱為PD調(diào)節(jié)器,是連續(xù)系統(tǒng)中技術(shù)成熟且應(yīng)用廣泛的一種調(diào)節(jié)器。本節(jié)將對(duì)系統(tǒng)用到的PID控制技術(shù)做相應(yīng)的介紹和研究,傳感器將車體的角度和運(yùn)動(dòng)速度等信息傳遞給系統(tǒng)控制器,控制器經(jīng)分析處理運(yùn)用PID控制技術(shù),將目標(biāo)命令傳遞給電機(jī)驅(qū)動(dòng)器來完成系統(tǒng)的閉環(huán)控制(2)應(yīng)用現(xiàn)狀在電機(jī)伺服系統(tǒng)的控制中,經(jīng)典的PID控制具有其結(jié)構(gòu)簡單、魯棒性強(qiáng)以及現(xiàn)場(chǎng)對(duì)Pro的廣泛使用積累了豐富的經(jīng)驗(yàn)等優(yōu)點(diǎn),在無刷直流電動(dòng)機(jī)的控制方面一直占有很重要的地位。PID的引入保證了其系統(tǒng)響應(yīng)的快速性,穩(wěn)定了閉環(huán)控制器,補(bǔ)償了由逆變器引起的控制誤差[25][26]。PID控制器就是將偏差的比例(Proportional)、積分(Integral)和微分(Differential)通過線性組合構(gòu)成控制量,用這一控制量對(duì)被控對(duì)象進(jìn)行控制。PID算法是目前工業(yè)過程控制中應(yīng)用最廣泛的控制算法。PID算法應(yīng)用如此廣泛,是因?yàn)樗哂腥缦聝?yōu)點(diǎn):(1)算法較為簡單,易于實(shí)現(xiàn);(2)基于線性控制理論,具備許多成熟的穩(wěn)定性分析方法,有較高的可靠性;(3)可以在很寬的操作條件內(nèi)保持較好的魯棒性,對(duì)于控制對(duì)象模型參數(shù)小范變化不敏感;(4)不要求了解控制對(duì)象的精確數(shù)學(xué)模型。利用許多成熟的參數(shù)整定方法,可以根據(jù)控制對(duì)象的實(shí)際響應(yīng)曲線來計(jì)算PID控制器的參數(shù);(5)允許工程技術(shù)人員以一種簡單直接的方式來調(diào)節(jié)控制系統(tǒng),以達(dá)到希望得到的控制性能,如上升時(shí)間、最大超調(diào)量和穩(wěn)態(tài)誤差等。當(dāng)被控對(duì)象的結(jié)構(gòu)和參數(shù)不能完全掌握,或得不到精確的數(shù)學(xué)模型時(shí),系統(tǒng)控制器的結(jié)構(gòu)和參數(shù)必須依靠經(jīng)驗(yàn)和現(xiàn)場(chǎng)調(diào)試來確定,這時(shí)應(yīng)用PID控制技術(shù)最為方便。即當(dāng)我們不完全了解一個(gè)系統(tǒng)和被控對(duì)象,或不能通過有效的測(cè)量手段來獲得系統(tǒng)參數(shù)時(shí),最適合用PID控制技術(shù)。(3)PID調(diào)節(jié)規(guī)律PID控制分為兩大類,一個(gè)是模擬PID控制,一個(gè)是數(shù)字PM控制。在模擬控制系統(tǒng)中,PID是最常用的控制方法。圖4.7所示為模擬PID控制系統(tǒng)原理框圖。比例系數(shù)Kp比例系數(shù)Kp積分系數(shù)Ki微分系數(shù)Kd被控對(duì)象_ + +u(t)y(t) +圖4.7模擬PID控制系統(tǒng)原理框圖計(jì)算機(jī)控制系統(tǒng)中,使用的是數(shù)字PID控制器。將連續(xù)的模擬量進(jìn)行離散化處理,則可得 (4-20)在數(shù)字PID控制中,采樣周期相對(duì)于系統(tǒng)的時(shí)間常數(shù)來說一般是很短。因此其參數(shù)可按模擬PID控制器中的方法來選擇。由于要保持動(dòng)態(tài)的平衡,則小車的傾角在一定的范圍內(nèi)要求可控。故本文選擇系統(tǒng)的小車的傾角作為輸出量,利用PID技術(shù)對(duì)其進(jìn)行分析。由上述理論分析可以看出:其比例、積分、微分三者是彼此影響;同時(shí)要使其系統(tǒng)保持穩(wěn)定,PID三參數(shù)必須滿足上述關(guān)系;為了讓系統(tǒng)能夠?qū)崿F(xiàn)其動(dòng)態(tài)的平衡,需要通過反復(fù)試湊的方法來解決,而且整定的參數(shù)多導(dǎo)致反復(fù)試湊的次數(shù)極大的增加,控制器的參數(shù)較難選取[27]。加之系統(tǒng)經(jīng)過線性化處理,即使所選參數(shù)滿足上述的關(guān)系式,仍需要根據(jù)系統(tǒng)的實(shí)際模型進(jìn)行調(diào)整,這大大增加了調(diào)試的難度。鑒于此我們考慮采用其極點(diǎn)配置的方法來考察分析其系統(tǒng)的穩(wěn)定性。(4)極點(diǎn)配置所謂極點(diǎn)配置就是指利用狀態(tài)反饋或輸出反饋使閉環(huán)系統(tǒng)的極點(diǎn)位于所希望的極點(diǎn)位置。由于系統(tǒng)的性能和它的極點(diǎn)位置密切相關(guān),因此極點(diǎn)配置問題在系統(tǒng)中是很重要的??刂葡到y(tǒng)的各種特性及其各種品質(zhì)指標(biāo)很大程度上由閉環(huán)系統(tǒng)的零點(diǎn)和極點(diǎn)位置決定。零點(diǎn)和極點(diǎn)在復(fù)數(shù)平面中的分布狀況決定了相應(yīng)表達(dá)式中該函數(shù)前的系數(shù)大小。一組零點(diǎn)和極點(diǎn)的分布就對(duì)應(yīng)了一個(gè)系統(tǒng)的響應(yīng)。極點(diǎn)配置的問題,就是通過選擇反饋增益矩陣,將閉環(huán)系統(tǒng)的極點(diǎn)恰好配置在根平面上期望的位置,以獲得所希望的動(dòng)態(tài)性能。極點(diǎn)配置決定了控制系統(tǒng)的動(dòng)態(tài)性能和穩(wěn)定性[28]。對(duì)于系統(tǒng)的極點(diǎn)配置,需要解決兩個(gè)問題:一是建立極點(diǎn)可配置的條件;二是確定其反饋增益矩陣。(5)極點(diǎn)配置條件狀態(tài)能控性、狀態(tài)能觀性及其穩(wěn)定性都是控制系統(tǒng)的重要屬性。要設(shè)計(jì)相應(yīng)穩(wěn)定的系統(tǒng),必須先考察其能控性和能觀性。狀態(tài)能控性問題只考察系統(tǒng)在u(t)作用下狀態(tài)的轉(zhuǎn)移情況,與輸出量y(t)無關(guān)。對(duì)于線性連續(xù)定常系統(tǒng),如果存在一個(gè)分段連續(xù)的輸入u(t),能在有限時(shí)間區(qū)間[t0,tf]內(nèi),使系統(tǒng)由某一初始狀態(tài)x(t0)轉(zhuǎn)移到指定的任一終端狀態(tài)x(tf),則該狀態(tài)就是能控的。若系統(tǒng)的所有狀態(tài)都是能控的,則稱此系統(tǒng)是狀態(tài)完全能控。本文小車參數(shù)參考LEGO公司提供的主要機(jī)器人組建參數(shù)如下表:小車的車輪質(zhì)量(Mw)0.03kg小車的車輪半徑(r)0.04m車輪的轉(zhuǎn)動(dòng)慣量(Iw)車身的質(zhì)量(Mp)0.6kg車輪中心到機(jī)器人的質(zhì)心的距離(l)0.072m車身轉(zhuǎn)動(dòng)慣量(Ip)電機(jī)慣量(Jm)電機(jī)的電阻(Rm)6.69Ω反電動(dòng)勢(shì)常量(ke)0.468Vsec/rad電機(jī)轉(zhuǎn)矩常量(km)0.317Nm/A該系統(tǒng)的能控性矩陣可表示為: (4-21)利用文獻(xiàn)[27]中對(duì)系統(tǒng)能控性的判定定理,即線性非時(shí)變系統(tǒng)為完全能控系統(tǒng)的充分必要條件是能控判別矩陣滿秩。即若rank(Tc)=4,則系統(tǒng)能控。利用MATLAB仿真工具,調(diào)用其中函數(shù)為Tc=ctrb(A,B)。其代碼及結(jié)果如下所示。>>A=[0100:0-56.5160:0001:0-525239.50]>>B=[0:483.2:0:44.9]>>Ic=ctrb(A,B)%求系統(tǒng)的能控判別矩陣Ic=1.0e+008*00.0000-0.00030.01540.0000-0.00030.0154-0.912500.0000-0.00250.14340.00000.00250.1434-8.7094>>rank(Tc)%求矩陣的值,若此數(shù)值是4,則該系統(tǒng)完全可控ans=4由上可以看出,其rank(Tc)=4,這說明兩輪自平衡小車系統(tǒng)是完全能控的,只有在此基礎(chǔ)才可以設(shè)計(jì)控制器,實(shí)現(xiàn)平衡控制。狀態(tài)能觀性問題是指對(duì)于任意給定的輸入u(t)在有限觀測(cè)時(shí)間tf>t0,使得根據(jù)[t0,tf]期間的輸出y(t)能唯一的確定系統(tǒng)在初始時(shí)刻的狀態(tài)x(t0),則該狀態(tài)x(t0)是能觀測(cè)的。若系統(tǒng)的每一個(gè)狀態(tài)都是能觀的,則稱此系統(tǒng)是狀態(tài)完全能觀。該系統(tǒng)狀態(tài)可觀性矩陣為: (4-22)線性非時(shí)變系統(tǒng)為完全能觀系統(tǒng)的充分必要條件是能觀判別矩陣滿秩。即若rank(To)=4,則系統(tǒng)能觀。同樣利用MATLAB仿真工具,調(diào)用其中函數(shù)為To=obsv(A,C);其代碼及結(jié)果如下所示。>>A=[0100:0-56.5160:0001:0-525239.50]:>>C=[1000:0010]:>>To=obsv(A,C)%求系統(tǒng)能觀判別矩陣To=1.0e+004*0.00010000 00.0001000.0001000000.00010-0.00560.001600-0.05250.0239000.3192-0.09040.001602.9663-0.84000.0239>>rank(To)%求矩陣的值,若數(shù)值為4,則該系統(tǒng)完全可觀ans=4從上中可得出:其rank(To)=4,則該系統(tǒng)能觀。在控制系統(tǒng)中,反饋控制信息是由系統(tǒng)的輸出或者狀態(tài)變量組合而成的。但是并非所有系統(tǒng)的狀態(tài)變量在物理上都能測(cè)得,于是能否通過對(duì)輸出的測(cè)量獲得全部的狀態(tài)變量的信息,便是系統(tǒng)的能觀測(cè)問題。此時(shí)系統(tǒng)能觀,可以設(shè)計(jì)控制器對(duì)那些不能測(cè)量的量進(jìn)行觀測(cè),觀測(cè)系統(tǒng)變動(dòng)對(duì)它們的影響。由上述分析可得該系統(tǒng)能控且能觀,滿足極點(diǎn)配置的條件,因此可以利用狀態(tài)反饋或輸出反饋來配置該系統(tǒng)的閉環(huán)極點(diǎn)。(6)極點(diǎn)配置控制器極點(diǎn)配置的問題,就是通過選擇反饋增益矩陣,將閉環(huán)系統(tǒng)的極點(diǎn)恰好配置在根平面上期望的位置,以獲得所希望的動(dòng)態(tài)性能。極點(diǎn)配置決定了控制系統(tǒng)的動(dòng)態(tài)性能和系統(tǒng)的穩(wěn)定性。本文通過狀態(tài)反饋來實(shí)現(xiàn)極點(diǎn)配置。系統(tǒng)采用狀態(tài)反饋對(duì)系統(tǒng)(ABC)任意配置極點(diǎn)的充要條件是系統(tǒng)能控。而第4.5.1節(jié)已經(jīng)證明該系統(tǒng)滿足其條件,因此可以利用狀態(tài)反饋法來任意配置系統(tǒng)的極點(diǎn)。對(duì)于系統(tǒng)(組4-2)引入狀態(tài)反饋,假定考慮進(jìn)入受控系統(tǒng)的信號(hào)為u=v-kx且D=0的情況,其中v為系統(tǒng)的外部參考輸入信號(hào),則可將系統(tǒng)的閉環(huán)狀態(tài)方程寫成(組4-3)。 由于穩(wěn)定是控制系統(tǒng)能夠運(yùn)行的前提,因此選擇調(diào)節(jié)時(shí)間和超調(diào)量作為考察系統(tǒng)動(dòng)態(tài)性能的指標(biāo)。為了讓系統(tǒng)滿足如下的性能要求:超調(diào)量:調(diào)節(jié)時(shí)間:取ε=0.6、,由可得該閉環(huán)系統(tǒng)的期望主導(dǎo)極點(diǎn)為:s1,2=-3±4i,同時(shí)要求另外的兩個(gè)極點(diǎn)在主導(dǎo)極點(diǎn)左邊且遠(yuǎn)離主導(dǎo)極點(diǎn),一般取其距離主導(dǎo)極點(diǎn)的4到5倍左右,本設(shè)計(jì)選取-15和-20。這樣高階系統(tǒng)可近似為二階系統(tǒng)來處理。所謂極點(diǎn)配置問題是指通過尋找適當(dāng)?shù)臓顟B(tài)反饋增益矩陣K,使得閉環(huán)系統(tǒng)極點(diǎn)(即矩陣A—BK的特征值)位于預(yù)先給定位置的狀態(tài)反饋控制器設(shè)計(jì)問題。其加入狀態(tài)反饋后的系統(tǒng)結(jié)構(gòu)圖如圖4.8所示。BB(4×1)C(2×4)A(4×4)K(1×4)圖4.8加入狀態(tài)反饋后的系統(tǒng)結(jié)構(gòu)圖由線性時(shí)不變系統(tǒng)的穩(wěn)定性分析可知,當(dāng)v=0時(shí),閉環(huán)系統(tǒng)方程的穩(wěn)定性由其變化系統(tǒng)矩陣(A-BK)的特征值決定,即其矩陣(A-BK)的所有特征值都具有負(fù)實(shí)部。而由經(jīng)典控制理論知道,矩陣(A-BK)的特征值也將影響諸如衰減速度、振蕩、超調(diào)等過渡過程特性。因此需要找到一個(gè)合適的矩陣K,使得矩陣(A-BK)的特征值位于復(fù)平面預(yù)先給定的特定位置,同時(shí)具有所期望的動(dòng)態(tài)響應(yīng)特性。2、程序流程圖3、程序代碼#include<REG52.H> #include<math.h>//Keillibrary#include<stdio.h>//Keillibrary #include<INTRINS.H>typedefunsignedcharuchar;typedefunsignedshortushort;typedefunsignedintuint;//****************************************//定義51單片機(jī)端口//****************************************#defineDataPortP2 //LCD1602數(shù)據(jù)端口sbitP30=P3^0;sbitP31=P3^1;sbitP32=P3^2;sbitP33=P3^3;sbitP34=P3^4;sbitP35=P3^5;sbitkey0=P1^0;sbitkey1=P1^1;sbitkey2=P1^2;sbitkey3=P1^3;sbitP14=P1^4;sbitP15=P1^5;sbitP16=P1^6;sbitP17=P1^7;sbitP00=P0^0;sbitP01=P0^1;sbitP02=P0^2;sbitP03=P0^3;sbitP04=P0^4;sbitP05=P0^5;sbitP06=P0^6;sbitP07=P0^7;sbitSCL=P3^6; //IIC時(shí)鐘引腳定義sbitSDA=P3^7; //IIC數(shù)據(jù)引腳定義sbitLCM_RS=P0^5; //LCD1602命令端口 sbitLCM_RW=P0^6; //LCD1602命令端口 sbitLCM_EN=P0^7; //LCD1602命令端口//****************************************//定義MPU6050內(nèi)部地址//****************************************#define SMPLRT_DIV 0x19 //陀螺儀采樣率,典型值:0x07(125Hz)#define CONFIG 0x1A //低通濾波頻率,典型值:0x06(5Hz)#define GYRO_CONFIG 0x1B //陀螺儀自檢及測(cè)量范圍,典型值:0x18(不自檢,2000deg/s)#define ACCEL_CONFIG 0x1C //加速計(jì)自檢、測(cè)量范圍及高通濾波頻率,典型值:0x01(不自檢,2G,5Hz)#define ACCEL_XOUT_H 0x3B#define ACCEL_XOUT_L 0x3C//#define ACCEL_YOUT_H 0x3D//#define ACCEL_YOUT_L 0x3E//#define ACCEL_ZOUT_H 0x3F//#define ACCEL_ZOUT_L 0x40#define TEMP_OUT_H 0x41#define TEMP_OUT_L 0x42#define GYRO_XOUT_H 0x43#define GYRO_XOUT_L 0x44 //#define GYRO_YOUT_H 0x45//#define GYRO_YOUT_L 0x46//#define GYRO_ZOUT_H 0x47//#define GYRO_ZOUT_L 0x48#define PWR_MGMT_1 0x6B //電源管理,典型值:0x00(正常啟用)#define WHO_AM_I 0x75 //IIC地址寄存器(默認(rèn)數(shù)值0x68,只讀)#define SlaveAddress 0xD0 //IIC寫入時(shí)的地址字節(jié)數(shù)據(jù),+1為讀取//****************************************//定義類型及變量//****************************************uchardis[4]; //顯示數(shù)字(-511至512)的字符數(shù)組int dis_data; //變量//int Temperature,Temp_h,Temp_l; //溫度及高低位數(shù)據(jù)//****************************************//函數(shù)聲明//****************************************voiddelay(unsignedintk); //延時(shí)//LCD相關(guān)函數(shù)voidInitLcd(); //初始化lcd1602voidlcd_printf(uchar*s,inttemp_data);voidWriteDataLCM(uchardataW); //LCD數(shù)據(jù)voidWriteCommandLCM(ucharCMD,ucharAttribc); //LCD指令voidDisplayOneChar(ucharX,ucharY,ucharDData); //顯示一個(gè)字符voidDisplayListChar(ucharX,ucharY,uchar*DData,L); //顯示字符串//MPU6050操作函數(shù)voidInitMPU6050(); //初始化MPU6050voidDelay5us();voidI2C_Start();voidI2C_Stop();voidI2C_SendACK(bitack);bitI2C_RecvACK();voidI2C_SendByte(uchardat);ucharI2C_RecvByte();voidI2C_ReadPage();voidI2C_WritePage();voiddisplay_ACCEL_x();voiddisplay_ACCEL_y();voiddisplay_ACCEL_z();ucharSingle_ReadI2C(ucharREG_Address); //讀取I2C數(shù)據(jù)voidSingle_WriteI2C(ucharREG_Address,ucharREG_data); //向I2C寫入數(shù)據(jù)//****************************************//整數(shù)轉(zhuǎn)字符串//****************************************voidlcd_printf(uchar*s,inttemp_data){ if(temp_data<0) { temp_data=-temp_data; *s='-'; } else*s=''; *++s=temp_data/100+0x30; temp_data=temp_data%100;//取余運(yùn)算 *++s=temp_data/10+0x30; temp_data=temp_data%10;//取余運(yùn)算 *++s=temp_data+0x30; }//****************************************//延時(shí)//****************************************voiddelay(unsignedintk) { unsignedinti,j; for(i=0;i<k;i++) { for(j=0;j<3;j++); } }//****************************************//LCD1602初始化//****************************************voidInitLcd() { WriteCommandLCM(0x38,1); WriteCommandLCM(0x08,1); WriteCommandLCM(0x01,1); WriteCommandLCM(0x06,1); WriteCommandLCM(0x0c,1); DisplayOneChar(0,0,'A'); DisplayOneChar(0,1,'G');} //****************************************//LCD1602寫允許//****************************************voidWaitForEnable(void) { DataPort=0xff; LCM_RS=0;LCM_RW=1;_nop_(); LCM_EN=1;_nop_();_nop_(); while(DataPort&0x01); LCM_EN=0; } //****************************************//LCD1602寫入命令//****************************************voidWriteCommandLCM(ucharCMD,ucharAttribc){ CMD=((CMD&0x01)<<7)|((CMD&0x02)<<5)|((CMD&0x04)<<3)|((CMD&0x08)<<1)|((CMD&0x10)>>1)|((CMD&0x20)>>3)|((CMD&0x40)>>5)|((CMD&0x80)>>7); if(Attribc)WaitForEnable(); LCM_RS=0;LCM_RW=0;_nop_(); DataPort=CMD;_nop_(); LCM_EN=1;_nop_();_nop_();LCM_EN=0;} //****************************************//LCD1602寫入數(shù)據(jù)//****************************************voidWriteDataLCM(uchardataW){ dataW=((dataW&0x01)<<7)|((dataW&0x02)<<5)|((dataW&0x04)<<3)|((dataW&0x08)<<1)|((dataW&0x10)>>1)|((dataW&0x20)>>3)|((dataW&0x40)>>5)|((dataW&0x80)>>7); WaitForEnable(); LCM_RS=1;LCM_RW=0;_nop_(); DataPort=dataW;_nop_(); LCM_EN=1;_nop_();_nop_();LCM_EN=0;} //****************************************//LCD1602寫入一個(gè)字符//****************************************voidDisplayOneChar(ucharX,ucharY,ucharDData){ Y&=1; X&=15; if(Y)X|=0x40; X|=0x80; WriteCommandLCM(X,0); WriteDataLCM(DData); } //****************************************//LCD1602顯示字符串//****************************************voidDisplayListChar(ucharX,ucharY,uchar*DData,L){ ucharListLength=0; Y&=0x1; X&=0xF; while(L--) { DisplayOneChar(X,Y,DData[ListLength]); ListLength++; X++; }}//**************************************//延時(shí)5微秒(STC90C52RC@12M)//不同的工作環(huán)境,需要調(diào)整此函數(shù)//當(dāng)改用1T的MCU時(shí),請(qǐng)調(diào)整此延時(shí)函數(shù)//**************************************voidDelay5us(){ _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();}//**************************************//I2C起始信號(hào)//**************************************voidI2C_Start(){SDA=1;//拉高數(shù)據(jù)線SCL=1;//拉高時(shí)鐘線Delay5us();//延時(shí)SDA=0;//產(chǎn)生下降沿Delay5us();//延時(shí)SCL=0;//拉低時(shí)鐘線}//**************************************//I2C停止信號(hào)//**************************************voidI2C_Stop(){SDA=0;//拉低數(shù)據(jù)線SCL=1;//拉高時(shí)鐘線Delay5us();//延時(shí)SDA=1;//產(chǎn)生上升沿Delay5us();//延時(shí)}//**************************************//I2C發(fā)送應(yīng)答信號(hào)//入口參數(shù):ack(0:ACK1:NAK)//**************************************voidI2C_SendACK(bitack){SDA=ack;//寫應(yīng)答信號(hào)SCL=1;//拉高時(shí)鐘線Delay5us();//延時(shí)SCL=0;//拉低時(shí)鐘線Delay5us();//延時(shí)}//**************************************//I2C接收應(yīng)答信號(hào)//**************************************bitI2C_RecvACK(){SCL=1;//拉高時(shí)鐘線Delay5us();//延時(shí)CY=SDA;//讀應(yīng)答信號(hào)SCL=0;//拉低時(shí)鐘線Delay5us();//延時(shí)returnCY;}//**************************************//向I2C總線發(fā)送一個(gè)字節(jié)數(shù)據(jù)//**************************************voidI2C_SendByte(uchardat){uchari;for(i=0;i<8;i++)//8位計(jì)數(shù)器{dat<<=1;//移出數(shù)據(jù)的最高位SDA=CY;//送數(shù)據(jù)口SCL=1;//拉高時(shí)鐘線Delay5us();//延時(shí)SCL=0;//拉低時(shí)鐘線Delay5us();//延時(shí)}I2C_RecvACK();}//**************************************//從I2C總線接收一個(gè)字節(jié)數(shù)據(jù)//**************************************ucharI2C_RecvByte(){uchari;uchardat=0;SDA=1;//使能內(nèi)部上拉,準(zhǔn)備讀取數(shù)據(jù),for(i=0;i<8;i++)//8位計(jì)數(shù)器{dat<<=1;SCL=1;//拉高時(shí)鐘線Delay5us();//延時(shí)dat|=SDA;//讀數(shù)據(jù)SCL=0;//拉低時(shí)鐘線Delay5us();//延時(shí)}returndat;}//**************************************//向I2C設(shè)備寫入一個(gè)字節(jié)數(shù)據(jù)//**************************************voidSingle_WriteI2C(ucharREG_Address,ucharREG_data){I2C_Start();//起始信號(hào)I2C_SendByte(SlaveAddress);//發(fā)送設(shè)備地址+寫信號(hào)I2C_SendByte(REG_Address);//內(nèi)部寄存器地址,I2C_SendByte(REG_data);//內(nèi)部寄存器數(shù)據(jù),I2C_Stop();//發(fā)送停止信號(hào)}//**************************************//從I2C設(shè)備讀取一個(gè)字節(jié)數(shù)據(jù)//**************************************ucharSingle_ReadI2C(ucharREG_Address){ ucharREG_data; I2C_Start();//起始信號(hào) I2C_SendByte(SlaveAddress);//發(fā)送設(shè)備地址+寫信號(hào) I2C_SendByte(REG_Address);//發(fā)送存儲(chǔ)單元地址,從0開始 I2C_Start();//起始信號(hào) I2C_SendByte(SlaveAddress+1);//發(fā)送設(shè)備地址+讀信號(hào) REG_data=I2C_RecvByte();//讀出寄存器數(shù)據(jù) I2C_SendACK(1);//接收應(yīng)答信號(hào) I2C_Stop();//停止信號(hào) returnREG_data;}//**************************************//初始化MPU6050//**************************************voidInitMPU6050(){ Single_WriteI2C(PWR_MGMT_1,0x00); //解除休眠狀態(tài) Single_WriteI2C(SMPLRT_DIV,0x07); Single_WriteI2C(CONFIG,0x06); Single_WriteI2C(GYRO_CONFIG,0x18); Single_WriteI2C(ACCEL_CONFIG,0x01);}//**************************************//合成數(shù)據(jù)//**************************************intGetData(ucharREG_Address){ charH,L; H=Single_ReadI2C(REG_Address); L=Single_ReadI2C(REG_Address+1); return(H<<8)+L;//合成數(shù)據(jù)}//**************************************//在1602上顯示10位數(shù)據(jù)//**************************************voidDisplay10BitData(intvalue,ucharx,uchary){ value/=19; value-=20; //角度值基準(zhǔn)校正 //轉(zhuǎn)換為10位數(shù)據(jù) lcd_printf(dis,value); //轉(zhuǎn)換數(shù)據(jù)顯示 DisplayListChar(x,y,dis,4); //啟始列,行,顯示數(shù)組,顯示長度}voidmain(){inti,j,k,m,n,num0=380,num1,num2=380,num3,num4=380,num5,num6=380,num7,cun1,t1,t2; charc='A'; delay(1000); //上電延時(shí) InitLcd(); //液晶初始化 InitMPU6050(); //初始化MPU6050 delay(500); while(1) { for(i=0;i<50000;i++) { if(key0==0) { delay(4000); if(key0==0) { c++; } } if(key1==0) { delay(4000); if(key1==0) { c--; } } if(key2==0&&c=='A') { delay(4000); if(key2==0) { num0+=19; num1++; } } if(key3==0&&c=='A') { delay(4000); if(key3==0) { num0-=19; num1--; } } if(key2==0&&c=='B') { delay(4000); if(key2==0) { num2+=19; num3++; } } if(key3==0&&c=='B') { delay(4000); if(key3==0) { num2-=19; num3--; } } if(key2==0&&c=='C') { delay(4000); if(key2==0) { num4+=19; num5++; } } if(key3==0&&c=='C') { delay(4000); if(key3==0) { num4-=19; num5--; } } if(key2==0&&c=='D') { delay(4000); if(key2==0) { num6+=19; num7++; } } if(key3==0&&c=='D') { delay(4000); if(key3==0) { num6-=19; num7--; } } m=GetData(ACCEL_XOUT_H)/96; //使m的值介于正負(fù)180 n=abs(m); j=m/5; k=n*3/5+num1/2+j*num1/3+j*j*num1/4+num3+num3*num3/2; cun1=n*4/5+num5/2+j*num5/2+j*j*num5/3+num7+num7*num7/2; t1=k; t2=cun1; if(

溫馨提示

  • 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)論