基于單片機(jī)的平衡小車(chē)的設(shè)計(jì) 電氣工程及其自動(dòng)化專(zhuān)業(yè)
《基于單片機(jī)的平衡小車(chē)的設(shè)計(jì) 電氣工程及其自動(dòng)化專(zhuān)業(yè)》由會(huì)員分享,可在線閱讀,更多相關(guān)《基于單片機(jī)的平衡小車(chē)的設(shè)計(jì) 電氣工程及其自動(dòng)化專(zhuān)業(yè)(31頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、 題目: 基于單片機(jī)的平衡小車(chē)的設(shè)計(jì) 摘要:兩輪自平衡車(chē)在我們的生活中已經(jīng)是越來(lái)越常見(jiàn),他的一個(gè)極其突出的特性就是不穩(wěn)定,與他很類(lèi)似的一個(gè)模型就是倒立擺。我們必須知道倒立擺的狀態(tài),然后對(duì)他進(jìn)行干擾才能使它保持穩(wěn)定狀態(tài)。本論文所研究的方案就是基于這種原理,用陀螺儀和加速度計(jì)來(lái)獲取到平衡車(chē)的當(dāng)前狀態(tài),然后控制電機(jī)來(lái)作出相應(yīng)的干擾,來(lái)讓小車(chē)保持平衡。 整個(gè)系統(tǒng)設(shè)計(jì)完成后,小車(chē)可以實(shí)現(xiàn)自主平衡功能。并且,在人為加入適量干擾后 小車(chē)也能夠自主調(diào)整并迅速恢復(fù)至穩(wěn)定狀態(tài)。系統(tǒng)還保留了大部分接口,可以進(jìn)行二次開(kāi)發(fā)和升級(jí),包括手機(jī)藍(lán)牙控制、wifi控制、視覺(jué)導(dǎo)航、軌跡跟蹤等。 關(guān)鍵詞: 加速
2、度;PID算法;陀螺儀;兩輪自平衡小車(chē) Abstract: two rounds of self-balancing vehicle is already more and more common in our life, he's a very prominent feature is unstable, and he is very similar to a model of inverted pendulum. We need to know the status of the inverted pendulum, and then to his interference to k
3、eep it stable. Mentioned in the present paper research plan is based on the principle of using gyroscope and accelerometer to get to the current state of the balance of the car, and then control the motor to make corresponding interference, to let the car balance. After completion of the whole syst
4、em design, the car can achieve balance function independently. And, in human after adding suitable amount of interference The car can also independent adjustment and quickly return to a stable state. System also has kept most of the interface, can undertake secondary development and upgrading, incl
5、uding mobile phone bluetooth, wifi, visual navigation, path tracking, etc. Keywords: Accelerometer;PID algorithm;Gyroscope;Balance of the car 目 錄 1 緒論 1 1.1 自平衡小車(chē)的研究意義 1 1.2 課題研究的主要任務(wù) 1 2 原理分析與關(guān)鍵技術(shù) 2 2.1 原理分析 2 2.2關(guān)鍵技術(shù) 2 2.2.1 系統(tǒng)建模 2 2.2.2 姿態(tài)檢測(cè) 2 2.2.3 控制算法 3 3 系統(tǒng)硬件設(shè)計(jì) 6 3.1 物理架
6、構(gòu) 7 3.2 元器件選型 8 3.2.1 微處理器 2 3.2.2 陀螺儀與加速度計(jì) 2 3.2.3 電機(jī)驅(qū)動(dòng) 3 3.2.4 編碼器 3 3.2.5 顯示屏 3 4 系統(tǒng)軟件設(shè)計(jì) 16 4.1 模塊初始化 17 4.2 PID算法設(shè)計(jì) 18 4.3 總體軟件架構(gòu) 27 4.4 調(diào)試技巧 27 5 總結(jié)與展望 37 5.1 總結(jié) 37 5.2 展望 37 參考文獻(xiàn) 38 附錄 38 致謝 38 III 1 緒論 1.1研究意義 近年來(lái),科技發(fā)展,時(shí)代進(jìn)步。其中各種科技產(chǎn)品也是如雨后春筍紛紛涌現(xiàn),用科技改變世界的時(shí)代也是在加速到來(lái)。但是
7、,日益擁堵的交通狀況問(wèn)題也是越來(lái)越嚴(yán)重。 改變交通現(xiàn)狀已經(jīng)刻不容緩,其中兩輪平衡車(chē)是極具代表性的一個(gè)產(chǎn)品,他適應(yīng)時(shí)代,應(yīng)運(yùn)而生。以其新穎,時(shí)尚,方便的優(yōu)勢(shì)迅速走入大家的生活。 這種平衡車(chē)與其他短途代步工具的最顯著的特點(diǎn)是:他只有兩個(gè)輪子,都是獨(dú)立驅(qū)動(dòng)工作,并且兩個(gè)輪子在一根軸上面,車(chē)的重量加上人的重量正好落在車(chē)軸上面,通過(guò)輪子前后運(yùn)動(dòng)來(lái)保持車(chē)生的平衡。由于是使用蓄電池供電,所以沒(méi)有污染,并且可以重復(fù)適用,壽命很高。而且電動(dòng)機(jī)能量轉(zhuǎn)換運(yùn)行效率較高并且只有很小的噪音。 由于兩個(gè)輪子都可以前進(jìn)后退,所以他可以在很狹窄的空間范圍當(dāng)中也可以進(jìn)退自如。對(duì)他的控制也是極其方便,只要通過(guò)身體的前后傾斜改
8、變平衡車(chē)的傾斜角度,當(dāng)陀螺儀檢測(cè)到角度的變化后,將數(shù)據(jù)傳送給單片機(jī),單片機(jī)進(jìn)行數(shù)據(jù)處理和融合,將輸出型號(hào)傳送給電機(jī)驅(qū)動(dòng)芯片,進(jìn)而來(lái)控制電機(jī)運(yùn)轉(zhuǎn),防止人摔倒。這樣完全可以避免在傳統(tǒng)汽車(chē)上出現(xiàn)的剎車(chē)片老化剎車(chē)不靈的情況,極大地保證了駕駛?cè)藛T的安全。 基于以上各種優(yōu)點(diǎn)可以看出兩輪自平衡車(chē)有著廣泛的應(yīng)用前景,目前市面上已經(jīng)涌現(xiàn)除了大量的平衡車(chē)。因此本論文對(duì)于平衡車(chē)的研究意義非凡。 1.2課題研究的主要內(nèi)容 本論文著重研究的兩輪平衡車(chē)系統(tǒng)主要是由單片機(jī)進(jìn)行控制。完成該設(shè)計(jì)后,小車(chē)能實(shí)現(xiàn)自我平衡,直立行走等基本功能。該系統(tǒng)采用了STM單片機(jī)作為核心的控制單元,并加上各種輔助傳感器,完成相對(duì)應(yīng)的電
9、路設(shè)計(jì)并編寫(xiě)相對(duì)應(yīng)程序完成平衡控制。 加速度計(jì)可以獲得小車(chē)的傾斜角度,陀螺儀可以捕獲小車(chē)的角速度,兩種數(shù)據(jù)捕獲后傳送給MCU,MCU對(duì)數(shù)據(jù)進(jìn)行處理,濾波然后加以融合。而編碼器可以捕獲平衡小車(chē)兩個(gè)輪子的即時(shí)速度。然后把即時(shí)速度和濾波后的數(shù)據(jù)進(jìn)行閉環(huán)數(shù)據(jù)處理,得到最終的輸出量把所有的數(shù)據(jù)量進(jìn)行數(shù)據(jù)疊加然后傳送給驅(qū)動(dòng)芯片,進(jìn)而來(lái)控制小車(chē)的行走狀態(tài)。 2 原理分析與關(guān)鍵技術(shù) 2.1 原理分析 舉一個(gè)例子,在生活中我們可以嘗試讓一個(gè)根木桿立在手心當(dāng)中而不倒下去,這一個(gè)看似簡(jiǎn)單的過(guò)程,其實(shí)就包括了反饋機(jī)制里面所有的條件。我們眼睛看到木桿往一邊倒下去,我們就會(huì)嘗試讓手往相反的方向去移動(dòng),讓木桿繼續(xù)保
10、持平衡。 控制給定 控制對(duì)象 執(zhí)行機(jī)構(gòu) 控制算法 傳感器 大腦 手掌 眼睛 木棒 圖2-1 保持木棍直立的反饋控制系統(tǒng) 車(chē)體垂直,車(chē)輪保持靜止 車(chē)體向前傾斜,車(chē)輪向前加速行駛 車(chē)體向后傾斜,車(chē)輪向后加速行駛 圖2-2 通過(guò)車(chē)輪控制車(chē)體平衡 應(yīng)用到平衡車(chē)上面也是一樣的。由于小車(chē)是兩輪共一個(gè)軸,所以小車(chē)只會(huì)向前或者向后傾斜,當(dāng)小車(chē)傾斜后,陀螺儀加速度計(jì)等傳感器就會(huì)感知到小車(chē)傾斜了,并且CPU會(huì)算出小車(chē)傾斜的角度和速度。電機(jī)在得知傾斜的角度和速度后以相對(duì)應(yīng)迅速向相同的方向移動(dòng),小車(chē)就可以保持平衡。這里的傳感器就相當(dāng)于木桿模型中的
11、眼睛,用來(lái)捕獲傾斜的角度和速度,而大腦控制手往那個(gè)方向動(dòng)的過(guò)程就相當(dāng)于CPU算出電機(jī)轉(zhuǎn)動(dòng)方向與速度的過(guò)程。最后手控制木桿就相當(dāng)于電機(jī)的轉(zhuǎn)動(dòng)。 2.2關(guān)鍵技術(shù) 2.2.1 系統(tǒng)建模 數(shù)學(xué)建模的主要理論依據(jù)是牛頓力學(xué)原理,建立模型后整個(gè)控制流程一目了然,而且一個(gè)良好的物理模型還有助于軟件方面的設(shè)計(jì)與實(shí)現(xiàn)。 mgsinθ ?macosθ mg θ m 圖2-3 受力分析 如圖1.2所示,倒立擺只有在直立時(shí)才算是處于平衡的,但是當(dāng)?shù)沽[向右傾斜時(shí),它就偏離了平衡位置。而此時(shí)小車(chē)的合力與位移方向相同,他就會(huì)加速向右傾斜,然后倒下去。 我們?yōu)榱俗屝≤?chē)不倒下穩(wěn)定在一個(gè)平衡位
12、置。在下面輪子上施加一個(gè)向右的外力,使輪子快速向右移動(dòng),來(lái)保持車(chē)身的平衡。以小車(chē)作為參考系,重心受到一個(gè)額外的慣性力,與車(chē)輪加速度大小相同,方向相反。因此倒立擺所受到的回復(fù)力為 F=mgsinθ?macosθ (3-1) 根據(jù)控制系統(tǒng)的特性,角θ需要控制在很小的范圍內(nèi),并且假設(shè)控制車(chē)輪加速度與角θ成正比,比例系數(shù)為k1,因此上式可近似處理為 F=mgθ?mk1θ (3-2) 此時(shí),只要k1>g,回復(fù)力的方向便和位移方
13、向相反,此時(shí)小車(chē)可以恢復(fù)到平衡位置。為使小車(chē)能在平衡位置盡快的穩(wěn)定下來(lái),還需要有阻尼力,阻尼力與角速度方向相反,大小成正比。式(3-2)可變?yōu)? F=mgθ?mk1θ?mk2θ' (3-3) 式中,k1,k2均為比例系數(shù),θ為小車(chē)傾角,θ'為角速度。只要滿足k1>g,k2>0,便可以將小車(chē)維持在直立狀態(tài)。k2是小車(chē)回到垂直位置的阻尼系數(shù),選取合適的阻尼系數(shù)可以保證小車(chē)可以盡快穩(wěn)定在垂直位置。因此為了控制小車(chē)穩(wěn)定,需要精確的測(cè)量小車(chē)傾角θ的大小和角速度θ'的大小,并以此控制車(chē)輪的加速度。 2.2.2 姿態(tài)檢測(cè)
14、 兩個(gè)輪子自的平衡小車(chē)的一個(gè)主要特征就是高度的不穩(wěn)定,對(duì)小車(chē)進(jìn)行控制好與壞的一個(gè)重要前提是傳感器能否采集到精確地?cái)?shù)據(jù)。目前,采用最多的解決方案是:傾斜角度由加速度計(jì)采集,角速度有陀螺儀采集,將兩種數(shù)據(jù)融合處理后得到小車(chē)的即時(shí)運(yùn)行狀態(tài)。但是,由于這些傳感器有一些自有的特征屬性,他們采集的數(shù)據(jù)會(huì)因溫度等外界環(huán)境的變化而變化。這些變化隨著時(shí)間的推移會(huì)產(chǎn)生很大的誤差,因此我們會(huì)采用一些濾波算法對(duì)數(shù)據(jù)進(jìn)行處理,使融合后的數(shù)據(jù)最接近真實(shí)的數(shù)據(jù)。 2.2.3控制算法 兩個(gè)輪子的平衡車(chē)的最終目標(biāo)是要在適當(dāng)?shù)耐饨绺蓴_下還能實(shí)現(xiàn)自我平衡。這就需要我們選擇合適的控制算法進(jìn)行控制,進(jìn)而讓小車(chē)迅速恢復(fù)到平衡狀態(tài)。傳
15、統(tǒng)的PID算法已經(jīng)問(wèn)世了很多年,他已經(jīng)經(jīng)歷了幾十年的實(shí)踐檢驗(yàn),所以PID算法是本論文要著重研究的控制算法。 3 系統(tǒng)硬件設(shè)計(jì) 3.1 系統(tǒng)架構(gòu) 本設(shè)計(jì)采用stm32f103c8t6作為主要控制器。用mpu6050作為輔助姿態(tài)傳感器,mpu6050獲取平衡車(chē)的姿態(tài)將數(shù)據(jù)傳送給主控制器。主控制器得到數(shù)據(jù)后通過(guò)互補(bǔ)濾波或者卡爾曼濾波進(jìn)行數(shù)據(jù)處理。然后經(jīng)過(guò)PID算法處理,將處理后的數(shù)據(jù)反饋給電機(jī)驅(qū)動(dòng)芯片TB6612,驅(qū)動(dòng)芯片得到數(shù)據(jù)后,然后控制電機(jī),電機(jī)轉(zhuǎn)動(dòng)時(shí)小車(chē)保持平衡。 主控制器 STM32F103C8T6 陀螺儀加速度計(jì) MPU6050 編碼器 電機(jī)驅(qū)動(dòng)芯片 TB
16、6612FNG 直流電機(jī) OLED 顯示屏 加速度 角速度 圖3-1 硬件設(shè)計(jì)總體框圖 3.2 元器件選型 3.2.1 微處理器 STM32 是由意法半導(dǎo)體推出的一款基于 ARM Cortex - M 系列內(nèi)核的高性能 32 位單片機(jī)。目前有 STM32L0,STM32L1,STM32L4 等九個(gè)產(chǎn)品線。其中“STM32”表示基于 ARM核心的 32 位微控制器。 時(shí)鐘、復(fù)位和電源管理2.0~3.6 伏供電和 I/O 引腳上電/斷電復(fù)位(POR/PDR)、可編程電壓監(jiān)測(cè)器(PVD) 4~16MHz 晶體振蕩器。 內(nèi)嵌帶校準(zhǔn)的 40kHz的RC振蕩器他有兩個(gè)12 位的
17、ADC通道數(shù)也可以達(dá)到16個(gè),而且他的模數(shù)轉(zhuǎn)換的范圍也可以達(dá)到0-3.6V。7 通道 DMA 控制器。支持的外設(shè)有定時(shí)器、ADC、SPI、I2C和USART。該控制器有多達(dá)48個(gè)快速I(mǎi)/O 端口,所有 I/O 口可以映像到16個(gè)外部中斷。 3.2.2 陀螺儀與加速度計(jì) 為了保證準(zhǔn)確的控制小車(chē)穩(wěn)定,我們就有必要準(zhǔn)確的測(cè)量平衡小車(chē)傾斜角度和電機(jī)轉(zhuǎn)速,其中電機(jī)轉(zhuǎn)速在下面一章節(jié)會(huì)介紹,主要是通過(guò)編碼器測(cè)量。本章節(jié)主要利用MPU6050來(lái)測(cè)量校車(chē)的傾斜角度。 本控制測(cè)量系統(tǒng)采用了集成度相當(dāng)高的6軸運(yùn)動(dòng)處理器,這樣就避免了用多個(gè)傳感器組合測(cè)量的方案,極大地減少了車(chē)身上的空間問(wèn)題。而且避免了陀螺儀
18、和加速度計(jì)在方向上安裝不能統(tǒng)一的問(wèn)題。 MPU6050中的陀螺儀和加速度計(jì)都是采用了3個(gè)ADC,其中ADC的精度可以達(dá)到16位。分辨率也是可以達(dá)到很高。在MPU6050采集到數(shù)據(jù)后,數(shù)據(jù)量是模擬量,模擬量被ADC轉(zhuǎn)化為數(shù)字量,然后傳送給內(nèi)部DMP進(jìn)行姿態(tài)解算。得到平衡小車(chē)的傾斜角度。 MPU6050的也是有很多種張配置,配置接口采用了I2C接口,速率可以達(dá)到4000kHZ。因?yàn)榻嵌葌?cè)量是有好很多種的周期,為了準(zhǔn)確跟蹤小車(chē)運(yùn)動(dòng)的快慢速。所以,陀螺儀的配置范圍為有±250,±500,±1000,±2000°/秒(dps),加速度計(jì)的配置范圍有±2,±4,±8,±16g。當(dāng)然MPU6050測(cè)量精
19、度越低,他的配置范圍也就越大。 +Z +Y +Z +X +Y +X 圖3-2 MPU6050實(shí)物圖與對(duì)應(yīng)坐標(biāo)軸圖 MPU6050的加速度計(jì)的測(cè)量原理如下圖。 圖3-3 加速度檢測(cè)的基本原理 在縱向方向上加兩個(gè)點(diǎn)極,形成一個(gè)電容。當(dāng)外部產(chǎn)生加速度后兩個(gè)電極之間的距離會(huì)發(fā)生改變,電容也會(huì)相應(yīng)的改變。電容的改變會(huì)導(dǎo)致電壓變化。電壓通過(guò)放大電路后再進(jìn)行處理,然后被ADC轉(zhuǎn)化為數(shù)字量。一套參數(shù)的傳遞就形成了加速度與電壓數(shù)值的關(guān)系。 而陀螺儀則是克里利奧力的原理,在器件里面安裝了一個(gè)能感知震動(dòng)的單元。,當(dāng)物體高速旋時(shí),原件里面
20、的震動(dòng)單元的震動(dòng)頻率也會(huì)相應(yīng)地改變,我們只要測(cè)出了物體的振動(dòng)頻率就可以很輕松的得知物體的旋轉(zhuǎn)角速度。 將MPU6050安裝在小車(chē)上時(shí),可以測(cè)量出小車(chē)傾斜的角速度,將角速度信號(hào)進(jìn)行積 分便可得到角度,如下圖所示。 測(cè)量 積分 t t ω θ 圖3-4 小車(chē)的角速度和角度 上面得到了小車(chē)的旋轉(zhuǎn)角速度,但是需要的是小車(chē)的傾斜角度,所以必須會(huì)對(duì)角速度進(jìn)行積分,得到角度。由于小車(chē)測(cè)量的是角速度。外界對(duì)他的干擾可以忽略不計(jì)。但是將角速度積分后,那些很小的干擾也會(huì)累加。從而使測(cè)量值與真實(shí)值存在較大的誤差。如下圖所示。 圖3-5 角度積分漂移 所
21、以這個(gè)過(guò)程會(huì)進(jìn)行一些數(shù)據(jù)濾波處理。但是還是無(wú)法消除誤差。擬采用加速度數(shù)據(jù)與陀螺儀數(shù)據(jù)融合的方式來(lái)處理這個(gè)問(wèn)題。但是由于加速度計(jì)測(cè)量很靈敏,容易摻雜一下外部的高頻率信號(hào)。但是他沒(méi)有積分,也就沒(méi)有積分誤差。但是陀螺儀就不一樣他受外部高頻噪聲的影響很小。但是他有積分誤差。因此可以使用互補(bǔ)濾波,將這兩種傳感器的優(yōu)勢(shì)互補(bǔ)。換句話說(shuō),互補(bǔ)濾波就是以陀螺儀測(cè)量的角度為準(zhǔn)。然后定時(shí)用加速度及測(cè)量的角度為輔進(jìn)行修正。 3.2.3 電機(jī)驅(qū)動(dòng)芯片 本控制系統(tǒng)準(zhǔn)備用東芝生產(chǎn)的一款驅(qū)動(dòng)芯TB6612FNG,他正好可以同時(shí)驅(qū)動(dòng)兩個(gè)電機(jī),非常滿足本論文設(shè)計(jì)的需求。而且它的驅(qū)動(dòng)電流也是相當(dāng)?shù)拇???梢赃_(dá)到1.2A, 峰值
22、可達(dá)2A、2.3A。芯片原理結(jié)構(gòu)如下圖,AO1/AO2/BO1/BO2是兩個(gè)電機(jī)的電源的供電口,AIN1/AIN2/BIN1/BIN2是控制兩個(gè)電機(jī)正反轉(zhuǎn)的管腳。而PWM1/PWM2就是接受的控制信號(hào)。單片機(jī)通過(guò)PID計(jì)算后得到PWM輸出信號(hào)。 芯片就是通過(guò)這兩個(gè)管腳來(lái)接受單片機(jī)發(fā)過(guò)來(lái)的pwm信號(hào),然后來(lái)控制電機(jī)的速度與正反轉(zhuǎn)。 圖3-6 TB6612FNG芯片功能示意圖 3.2.4 編碼器 編碼器是一種常用的用來(lái)檢測(cè)步進(jìn)電機(jī)的元器件,他的檢測(cè)原理是當(dāng)電機(jī)馬達(dá)轉(zhuǎn)動(dòng)的時(shí)候會(huì)掃描到光電管器件,然后就會(huì)觸發(fā)光電管器件發(fā)送出數(shù)字脈沖信號(hào)
23、。數(shù)字脈沖信號(hào)輸出到單片機(jī)的捕獲接口就可捕獲到脈沖信號(hào)的頻率進(jìn)而得知步進(jìn)電機(jī)的速度。關(guān)于電機(jī)正轉(zhuǎn)還是反轉(zhuǎn)的問(wèn)題,可以通過(guò)脈沖信號(hào)的相位來(lái)判斷。如果脈沖信號(hào)相位超前半個(gè)周期就說(shuō)明電機(jī)正轉(zhuǎn),相反,如果脈沖信號(hào)相位落后半個(gè)周期就說(shuō)明電機(jī)反轉(zhuǎn)。 圖3-7 光電編碼器 3.2.5 顯示屏 OLED是一種有機(jī)發(fā)光二極管,我們就是采用這種顯示屏來(lái)作為顯示的。OLED也有很多的特點(diǎn),比如說(shuō),制作簡(jiǎn)單,響應(yīng)速度快,可以做到很薄,他可以自己發(fā)光,不需要背光源,對(duì)比度很高,色彩顯示鮮艷,適應(yīng)的溫度范圍廣等等。總之OLED屏是下一代顯示材料的趨勢(shì)。 圖
24、3-8 OLED顯示器 本論文采用的OLED顯示器為0.96寸,他的長(zhǎng)寬比例為27mm*26mm。但是他的分辨率卻可以達(dá)到128*64。模塊的去東街口主要有兩種,串行SPI接口和IIC接口。串行接口的速率要比IIC的借口要稍微快一點(diǎn),但是這種接口需要4根管腳來(lái)驅(qū)動(dòng),相比IIC兩根接口的驅(qū)動(dòng)方式要臉?lè)室恍┵Y源。在兩種接口都可以滿足需求的情況下我們選擇IIC接口。只要用2根線就可以驅(qū)動(dòng)。 4 系統(tǒng)軟件設(shè)計(jì) 4.1 模塊初始化 IIC初始化:IIC初始化用于配置MPU6050,由于MPU6050的配置采用的是IIC接口,所以這個(gè)初始化是必要的,另外IIC還用于驅(qū)
25、動(dòng)OLED顯示屏。 下面列出重要的函數(shù) 名(具體函數(shù)體見(jiàn)附錄) 初始化IIC對(duì)應(yīng)的引腳 void IIC_Init(void) {} 產(chǎn)生IIC起始信號(hào) int IIC_Start(void) {} 產(chǎn)生IIC停止信號(hào) void IIC_Stop(void) {} 等待應(yīng)答信號(hào) int IIC_Wait_Ack(void) {} 產(chǎn)生ACK應(yīng)答 void IIC_Ack(void) {} 產(chǎn)生NACK應(yīng)答 void IIC_NAck(void) {} IIC寫(xiě)一個(gè)字節(jié) void IIC_Send_Byte(u8 txd) {} IIC讀取一個(gè)字
26、節(jié) u8 IIC_Read_Byte(unsigned char ack) {} IIC寫(xiě)字符串 int i2cWrite(uint8_t addr, uint8_t reg, uint8_t len, uint8_t *data) {} IIC讀字符串 int i2cRead(uint8_t addr, uint8_t reg, uint8_t len, uint8_t *buf) {} 串口初始化:串口初始化用于打印調(diào)試信息,方便我們調(diào)試程序。 初始化串口引腳,串口時(shí)鐘和波特率 void uart_init(u32 pclk2,u32 bound) {}
27、 配置串口中斷函數(shù) void USART2_IRQHandler(void) {} 中斷定時(shí)器初始化:用于產(chǎn)生50ms的中斷周期,來(lái)進(jìn)行一次PID算法運(yùn)算。 初始化中斷定時(shí)器 void EXTI_Init() {} PWM初始化:用于輸出PWM值,電機(jī)驅(qū)動(dòng)通過(guò)改值的大小來(lái)直接控制電機(jī)的速度與方向。 初始化PWM分頻器和自動(dòng)重裝值 void MiniBalance_PWM_Init(u16 arr,u16 psc) {} 配置電機(jī)輸出引腳 void MiniBalance_Motor_Init(void) {} 設(shè)置PWM值,改變電機(jī)速度 void
28、 Set_Pwm(int moto1,int moto2) {} 設(shè)置電機(jī)方向 int myabs(int a) {} 編碼器初始化:用于測(cè)量電機(jī)的實(shí)時(shí)轉(zhuǎn)速 初始化左右編碼器 void Encoder_Init_TIM2(void) {} void Encoder_Init_TIM3(void) {} 獲取電機(jī)的速度 int Read_Encoder(u8 TIMX) {} MPU6050初始化:初始化MPU6050,測(cè)量小車(chē)的實(shí)時(shí)狀態(tài)和傾斜角度 讀取MPU6050內(nèi)置溫度傳感器數(shù)據(jù) int Read_Temperature(void) {
29、} 讀取MPU6050內(nèi)置DMP姿態(tài)信息 void Read_DMP(void) {} 初始化MPU6050內(nèi)置DMP void DMP_Init(void) {} 初始化MPU6050以進(jìn)入可用狀態(tài) void MPU6050_initialize(void) {} 設(shè)置MPU6050是否為AUX IIC線的主機(jī) void MPU6050_setI2CBypassEnabled(void) {} 檢測(cè)MPU6050是否已連接 uint8_t MPU6050_testConnection(void) {} 讀取MPU6050 WHO_AM_
30、I 標(biāo)識(shí) uint8_t MPU6050_getDeviceID(void) {} 設(shè)置MPU6050是否進(jìn)入睡眠狀態(tài) void MPU6050_setSleepEnabled(uint8_t enabled) {} 設(shè)置MPU6050加速度計(jì)的最大量程 void MPU6050_setFullScaleAccelRange(uint8_t range) {} 設(shè)置MPU6050的時(shí)鐘源 void MPU6050_setClockSource(uint8_t source) {} 將新的ADC數(shù)據(jù)更新到FIFO數(shù)組,進(jìn)行濾波處理 void MPU605
31、0_newValues(int16_t ax,int16_t ay,int16_t az,int16_t gx,int16_t gy,int16_t gz) {} Flash初始化:用于保存PID數(shù)據(jù) 解鎖Flash void STMFLASH_Unlock(void) {} 上鎖Flash void STMFLASH_Lock(void) {} 得到Flash狀態(tài) u8 STMFLASH_GetStatus(void) {} 等待Flash操作完成 u8 STMFLASH_WaitDone(u16 time) {} 擦除Flash頁(yè) u
32、8 STMFLASH_ErasePage(u32 paddr) {} 從Flash指定的地址寫(xiě)入半字 u8 STMFLASH_WriteHalfWord(u32 faddr, u16 dat) {} 從Flash指定的地址讀出半字 u16 STMFLASH_ReadHalfWord(u32 faddr) {} 不檢查Flash寫(xiě)入數(shù)據(jù) void STMFLASH_Write_NoCheck(u32 WriteAddr,u16 *pBuffer,u16 NumToWrite) {} 從Flash指定的地址寫(xiě)入指定長(zhǎng)度的數(shù)據(jù) void STMFLASH_W
33、rite(u32 WriteAddr,u16 *pBuffer,u16 NumToWrite) {} 從Flash指定的地址讀出指定長(zhǎng)度的數(shù)據(jù) void STMFLASH_Read(u32 ReadAddr,u16 *pBuffer,u16 NumToRead) {} Flash測(cè)試 void Test_Write(u32 WriteAddr,u16 WriteData) {} Flash讀 void Flash_Read(void) {} Flash寫(xiě) void Flash_Write(void) {} 4.2 PID算法設(shè)
34、計(jì) PID控制公式如下。 (4-2) ut=Kpet+1T10tetdt+TDdetdt 實(shí)際使用中,PID算法不必使用所有控制(比例控制、積分控制、微分控制),只要能滿足使用要求即可。常見(jiàn)的有PD控制和PI控制。在本控制系統(tǒng)中,速度控制使用了PI控制,角度控制使用了PD控制。相應(yīng)控制控制如下: 速度控制輸出=車(chē)速*Kp+路程*Ki 角度控制輸出=傾角*Kp+角速度*Kd 其中,Kp為比例系數(shù),Kd為微分系數(shù),Ki為阻尼系數(shù)。 在完成速度控制與角度控制之后,需要將獲得的數(shù)據(jù)進(jìn)行疊加,并且加入藍(lán)牙方向控制,以完成小車(chē)的左右轉(zhuǎn)。最后對(duì)所得數(shù)據(jù)進(jìn)行判斷與轉(zhuǎn)換,以數(shù)據(jù)的正負(fù)控制電機(jī)
35、的轉(zhuǎn)向,以數(shù)據(jù)的數(shù)值控制占空比,調(diào)節(jié)PWM輸出來(lái)控制轉(zhuǎn)速,完成左右電機(jī)的差分控制。 由于小車(chē)輪胎與地面存在靜摩擦力,因此當(dāng)占空比很小時(shí),電機(jī)驅(qū)動(dòng)電流很小,電機(jī)可以認(rèn)為沒(méi)有發(fā)生轉(zhuǎn)動(dòng)。所有需要根據(jù)實(shí)際情況加上死區(qū)常量用來(lái)克服這種情況下的靜摩擦力。 輸出控制算法程序框圖如下所示。 (b) (a) 互補(bǔ)濾波 獲取PD控制輸出值 結(jié)束 開(kāi)始 獲取各車(chē)輪的車(chē)速 判斷電機(jī)轉(zhuǎn)向 對(duì)速度積分獲取路程值 疊加藍(lán)牙速度控制 是否超出積分上限 獲取PI控制輸出值 取最大值 結(jié)束 開(kāi)始 獲取角度值與角速度值 Y N 圖4-2 角度控制與速度控制流程圖 int EXTI3_
36、IRQHandler(void) { if(PBin(3)==0) { EXTI->PR=1<<3; //判斷是否由外部中斷 Encoder_Left=Read_Encoder(2); //獲取電機(jī)轉(zhuǎn)速 Encoder_Right=Read_Encoder(3);//獲取電機(jī)轉(zhuǎn)速 Get_Angle(Way_Angle); //獲得當(dāng)前角度 Balance_Pwm =balance(Angle_Balance,Gyro
37、_Balance); //PID控制計(jì)算 Velocity_Pwm=velocity(Encoder_Left,Encoder_Right);// Moto1=Balance_Pwm+Velocity_Pwm; //輸出pwm值 Moto2=Balance_Pwm+Velocity_Pwm; //輸出pwm值 Xianfu_Pwm(); //限制幅度
38、 Set_Pwm(Moto1,Moto2);//控制電機(jī) return 0; } } 4.3總體軟件架構(gòu) int main(void) { Stm32_Clock_Init(9); JTAG_Set(JTAG_SWD_DISABLE); JTAG_Set(SWD_ENABLE); delay_init(72); KEY_Init(); OLED_Init(); Flash_Init();
39、 uart_init(72,115200); IIC_Init(); MPU6050_Init(); Flash_Read(); EXTI_Init(); Display_All(); While(1); } 由于整個(gè)平衡車(chē)的處理復(fù)雜度不算特別高,所以整個(gè)軟件系統(tǒng)的設(shè)計(jì)沒(méi)有采用才做系統(tǒng)的架構(gòu)模式,而是采用了相對(duì)簡(jiǎn)單且容易實(shí)現(xiàn)的前后臺(tái)架構(gòu)。 從上到下,首先完成的是對(duì)系統(tǒng)的時(shí)鐘初始化。這一點(diǎn)是非常必要的,應(yīng)為單片機(jī)可以工作在多種頻率下,應(yīng)為我們有大量的數(shù)據(jù)處理計(jì)
40、算,所以要配置到單片機(jī)的最高頻率。也就是72兆赫茲。這里我沒(méi)當(dāng)然也不會(huì)考慮到功率問(wèn)題。這種頻率完全有能力處理起來(lái)整個(gè)平衡車(chē)的任務(wù)。 其次是關(guān)閉單片機(jī)的JTAG調(diào)試口,應(yīng)為JTAG調(diào)試口占用的管腳較多,而且好需要專(zhuān)門(mén)的JTAG調(diào)試器來(lái)輔助工作,而這種調(diào)試器非常的昂貴,有的達(dá)到幾千元。因此我們將調(diào)試接口配置為SWD模式,而SWD模式下的調(diào)試器只要幾十元就可以買(mǎi)的到,并且它所占用的管腳資源也是比JTAG要少得多。 接下來(lái)我們是初始化delay函數(shù),在很多場(chǎng)合延時(shí)對(duì)我們來(lái)說(shuō)用的很頻繁。我們事先就寫(xiě)了一個(gè)精準(zhǔn)的延時(shí)函數(shù),包括納秒級(jí),微妙級(jí)和秒級(jí)三種。這就可以滿足我們大部分的需求了。 后面是對(duì)按鍵的
41、初始化,它的作用是在調(diào)試階段調(diào)參數(shù)時(shí),不只有一個(gè)參數(shù)要調(diào)。我們可以用按鍵的形式來(lái)選擇去改變哪一個(gè)參數(shù),這樣一來(lái)我們就不必每次都改寫(xiě)整個(gè)函數(shù)去調(diào)整參數(shù)了。 后面是OLED的初始化,在調(diào)試階段,OLED是用來(lái)作為輔助調(diào)試手段的。他可以記錄電機(jī)轉(zhuǎn)速,PWM輸出,PID參數(shù)和平衡小車(chē)的傾斜角度。在調(diào)試完成后還可以作為輔助顯示手段。 Flash_Init()是初始化單片機(jī)的內(nèi)部存儲(chǔ)芯片,用于保存PID的參數(shù)值。 后面是串口初始化,用來(lái)打印調(diào)試信息。 IIC的初始化用來(lái)配置MPU6050,以及驅(qū)動(dòng)顯示屏。后面是MPU6050的初始化,用來(lái)初始化陀螺儀。 然后是讀取flash中保存的參數(shù),主
42、要是上次保存的PID參數(shù),模式參數(shù)以及一些其他的參數(shù)。 下面是中斷的初始化,這個(gè)初始化非常重要,我么把他設(shè)置到50ms,當(dāng)50毫秒時(shí)間到達(dá)后,進(jìn)入中斷函數(shù),獲取電機(jī)轉(zhuǎn)速,小車(chē)傾斜角度和小車(chē)方向。然后進(jìn)行PID計(jì)算輸出到電機(jī),讓電機(jī)以特定的速度運(yùn)轉(zhuǎn),保持小車(chē)平衡。 最后是顯示所有信息到OLED屏幕,和一個(gè)死循環(huán)。我們?cè)谠O(shè)計(jì)時(shí)死循環(huán)中什么任務(wù)也沒(méi)有做,其實(shí)中里面可以添加一些其他的功能函數(shù),比如要坐上位機(jī)通訊時(shí)的功能可以放到這里面。這是就形成了所謂的前后臺(tái)系統(tǒng)了。 開(kāi)始 將速度控制、角度控制進(jìn)行疊加 增加死區(qū)常量 是否飽和 控制電機(jī)轉(zhuǎn)向與轉(zhuǎn)速 是否摔倒 停止 取最
43、大值 Y Y N 圖4-3控制流程 4.4調(diào)試技巧 平衡車(chē)的調(diào)試還是有很多技巧的,首先我們能想到的就是最常用的串口調(diào)試,這種調(diào)試只能應(yīng)用在硬件初始化的過(guò)程。比如,陀螺儀的初始化,顯示屏的初始化等等,一旦到了PID參數(shù)整定的調(diào)試工作,這種調(diào)試方法就不奏效了。應(yīng)為我問(wèn)要在實(shí)物上調(diào)試,并且小車(chē)還會(huì)在調(diào)試過(guò)程中運(yùn)動(dòng)。用串口調(diào)試就顯得有些力不從心了。因此我們采取了另外一種調(diào)試方法。OLED顯示屏加上編碼器和單片機(jī)內(nèi)部flash結(jié)合起來(lái)調(diào)試。下面我們來(lái)具體介紹。 首先我們知道平衡車(chē)上有一個(gè)編碼器,我們?cè)陬l繁該P(yáng)ID參數(shù)時(shí)可以轉(zhuǎn)動(dòng)編碼器,然后
44、設(shè)置對(duì)應(yīng)的PID參數(shù)顯示到顯示屏上面,順時(shí)針轉(zhuǎn)就加參數(shù)值,逆時(shí)針轉(zhuǎn)就減參數(shù)值。然后保存芯片內(nèi)部flash存儲(chǔ)芯片。這樣我們下次重啟平衡車(chē)時(shí)就可以直接讀取上次我們?cè)O(shè)置的PID參數(shù),而不用每次到改完參數(shù)后要重新燒寫(xiě)程序到單片機(jī)了。這樣就讓我們調(diào)參數(shù)的過(guò)程變得輕松許多。 5 總結(jié)與展望 5.1 總結(jié) 本設(shè)計(jì)系統(tǒng)的硬件系統(tǒng)以ARM公司的STM32為控制核心,使用MPU6050檢測(cè)小車(chē)的車(chē)身姿態(tài),通過(guò)編碼器獲取小車(chē)當(dāng)前轉(zhuǎn)速,實(shí)現(xiàn)對(duì)車(chē)速的閉環(huán)控制。通過(guò)TB6612FNG驅(qū)動(dòng)電路對(duì)兩個(gè)電機(jī)實(shí)現(xiàn)差分控制,進(jìn)而單獨(dú)的控制兩個(gè)電機(jī)。通過(guò)藍(lán)牙擴(kuò)展獲得上位機(jī)發(fā)送的控制信號(hào),也可以實(shí)現(xiàn)人機(jī)交互
45、的功能。 軟件系統(tǒng)設(shè)計(jì)中,根據(jù)單片機(jī)使用手冊(cè)設(shè)置各個(gè)寄存器;根據(jù)IIC總線協(xié)議編寫(xiě)通信程序,并且根據(jù)芯片說(shuō)明配置MPU6050芯片。使用互補(bǔ)濾波融合加速度計(jì)與陀螺儀數(shù)據(jù)并實(shí)現(xiàn)角度控制。使用PID算法計(jì)算角度控制與速度控制的最終輸出量。使得小車(chē)在保持平衡的同時(shí)通過(guò)藍(lán)牙可實(shí)現(xiàn)人機(jī)交互。 5.2 展望 由于時(shí)間倉(cāng)促,能力又有限,該設(shè)計(jì)還有許多需要改進(jìn)的地方。 1. 采用更先進(jìn)、速度更快的控制器,如ARM,X86等。 2. 使用更先進(jìn)的數(shù)據(jù)融合算法,如卡爾曼濾波算法。 3. 使用更先進(jìn)的控制算法,如模糊控制,神經(jīng)網(wǎng)絡(luò)等。 4. 調(diào)試手段有待進(jìn)一步優(yōu)化。 5. 可以對(duì)平衡車(chē)添加一些人機(jī)
46、互動(dòng)功能。比如,添加一個(gè)語(yǔ)音助手,能夠通過(guò)語(yǔ)音對(duì)平衡車(chē)進(jìn)行控制,讓小車(chē)完成像左轉(zhuǎn)彎右轉(zhuǎn)彎自旋轉(zhuǎn)等指定的動(dòng)作。還可以連接藍(lán)牙或者wifi用手機(jī)對(duì)小車(chē)進(jìn)行控制。 參考文獻(xiàn) [1]肖洪兵. 跟我學(xué)用單片機(jī). 北京:北京航空航天大學(xué)出版社,2002.8 。 [2]何立民. 單片機(jī)高級(jí)教程. 第1版.北京:北京航空航天大學(xué)出版社,2001。 [3]趙曉安. MCS-51單片機(jī)原理及應(yīng)用. 天津:天津大學(xué)出版社,2001.3。 [4]李廣第. 單片機(jī)基礎(chǔ). 第1版.北京:北京航空航天大學(xué)出版社,1999。 [5]徐惠民.安德寧. 單片微型計(jì)算機(jī)原理接口與應(yīng)用. 第1版. 北京:北
47、京郵電大學(xué)出版社,1996。 [6]何立民.從Cygnal 80C51F看8位單片機(jī)發(fā)展之路. 單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2002年,第5期。 [7]夏繼強(qiáng). 單片機(jī)實(shí)驗(yàn)與實(shí)踐教程. 北京:北京航空航天大學(xué)出版社, 2001。 [8]陳志強(qiáng) 胡輝. 單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)實(shí)踐指南. 自編教材。 [9]肖洪兵. 單片機(jī)應(yīng)用技術(shù). 自編教材。 [10]肖洪兵 高茂科. CAI課件 自主開(kāi)發(fā)。 [11]V.Yu.Teplov,A.V.Anisimov.ThermostattingSystem Using a Single-Chip Microcomputer and [12]Therm
48、oelectric Modules Based on the Peltier Effect[J] ,2002?。 [13]Yeager Brent.How to troubleshoot your electronic scale[J]..Powder and Bulk Engineering.1995。? [14]Meehan Joanne,Muir Lindsey.SCM in Merseyside SMEs:Benefits and barriers[J]..TQM Journal.2008。? 附錄 1.系統(tǒng)設(shè)計(jì)的電路框圖 2.部分源代碼 #include
49、"sys.h" u8 Way_Angle=1; //獲取角度的算法,1:四元數(shù) u8 Flag_Show=1; //停止標(biāo)志位和 顯示標(biāo)志位 默認(rèn)停止 顯示打開(kāi) int Encoder_Left,Encoder_Right; //左右編碼器的脈沖計(jì)數(shù) int Moto1,Moto2; //電機(jī)PWM變量 應(yīng)是Motor的 float Angle_Balance,Gyro_Balance,Gyro_Turn; //平衡傾角 平衡陀螺儀 轉(zhuǎn)向陀螺儀 u32 Distance
50、; //超聲波測(cè)距 u8 delay_50,delay_flag,Bi_zhang=0,PID_Send,Flash_Send; //默認(rèn)情況下 float Acceleration_Z; //Z軸加速度計(jì) float PA=100,PB=500,PC=888,PD=6813; //PID參數(shù) u16 PID_Parameter[10],Flash_Parameter[10]; //Flash相關(guān)數(shù)組
51、int Balance_Pwm,Velocity_Pwm,Turn_Pwm; float kp=0,kd=0; float Kp_v=0,Ki_v=0,Kd_v=0; float my_Encoder_Integral; float my_v_kp1; float my_v_kp2; int balance_pwm; u8 key1=0; char Encoder_num; float offset; int my_pwm; void ofset(void); int main(void) { Stm32_Clock_Init(9);
52、 delay_init(72); JTAG_Set(JTAG_SWD_DISABLE); JTAG_Set(SWD_ENABLE); KEY_Init(); OLED_Init(); OLED_ShowString(0,0,"Key :"); OLED_ShowString(66,0,"Angle:"); OLED_ShowString(0,1,"KP_b: 1"); OLED_ShowStrin
53、g(0,2,"KD_b: 2"); OLED_ShowString(0,3,"KP_v: 3"); OLED_ShowString(0,4,"KI_v: 4"); OLED_ShowString(0,5,"KD_v: 5"); OLED_ShowString(0,7,"Pwm : "); OLED_ShowString(0,6,"Moto:"); uart_init(72,115200); uart2_init(3
54、6,9600); MiniBalance_PWM_Init(7199,0); //TIM4 通道3 4 PB8 9 Encoder_Init_TIM2(); //PA0 1 Encoder_Init_TIM3(); //PA6 7 IIC_Init(); //=====模擬IIC初始化 MPU6050_initialize(); //=====MPU6050初始化 DMP_Init
55、(); //=====初始化DMP Flash_Read(); OLED_Num_String(35,1,kp); OLED_Num_String(35,2,kd*10); OLED_Num_String(35,3,Kp_v); OLED_Num_String(35,4,Ki_v*10); OLED_Num_String(35,5,Kd_v*10); #if 1 ofset(); OLED_Num_String(35,1,kp); OLED_Num_String(35,2,kd*10);
56、 OLED_Num_String(35,3,Kp_v); OLED_Num_String(35,4,Ki_v*10); OLED_Num_String(35,5,Kd_v*10); #endif EXTI_Init(); //=====MPU6050 5ms定時(shí)中斷初始化 while(1) { #if 1 OLED_Num_String(35,6,Encoder_Left); OLED_Num_String(70,6,Encoder_Right); OLED_Nu
57、m_String1(35,7,my_pwm); OLED_Num_String1(90,7,(int)my_Encoder_Integral);//積分 OLED_Num_String1(70,1,(int)my_v_kp1);//比例 OLED_Num_String1(70,2,(int)my_v_kp2);//微分 OLED_Num_String(96,0,Angle_Balance); #endif } void ofset() { while(key1!=1) { while(key1==10
58、) { Encoder_Right=Read_Encoder(3); if(Encoder_Right>0)kp++; if(Encoder_Right<-0)kp--; OLED_Num_String(35,1,kp); delay_ms(5); } while(key1==2) { Encoder_Right=Read_Encoder(3); if(Encoder_Right>0)kd+=0.1; if(Encoder_Right<-0)kd-=0.
59、1; OLED_Num_String(35,2,kd*10); delay_ms(5); } while(key1==3) { Encoder_Right=Read_Encoder(3); if(Encoder_Right>0)Kp_v++; if(Encoder_Right<-0)Kp_v--; OLED_Num_String(35,3,Kp_v); delay_ms(5); } while(key1==4) { Encoder_Right=Re
60、ad_Encoder(3); if(Encoder_Right>0)Ki_v+=0.1; if(Encoder_Right<-0)Ki_v-=0.1; OLED_Num_String(35,4,Ki_v*10); delay_ms(5); } while(key1==5) { Encoder_Right=Read_Encoder(3); if(Encoder_Right>0)Kd_v+=0.1; if(Encoder_Right<-0)Kd_v-=0.1; OLED_Num_Str
61、ing(35,5,Kd_v*10); delay_ms(5); } } } 致謝 本論文是在我的導(dǎo)師鮑娟老師的親切關(guān)懷和悉心指導(dǎo)下完成的。他嚴(yán)謹(jǐn)?shù)目茖W(xué)態(tài)度,精益求精的工作作風(fēng),誨人不倦的高尚師德,嚴(yán)以律己、寬以待人的崇高風(fēng)范,樸實(shí)無(wú)華、平易近人的人格魅力深深地感染和激勵(lì)著我。從課題的選擇到項(xiàng)目的最終完成,王丹老師都始終給予我細(xì)心的指導(dǎo)和不懈的支持,在此謹(jǐn)向X老師致以誠(chéng)摯的謝意和崇高的敬意。 感謝電子信息工程學(xué)院的老師對(duì)我的教育培養(yǎng)。他們細(xì)心指導(dǎo)我的學(xué)習(xí),在此,我要向諸位老師深深地鞠上一躬。 感謝給我提供參考文獻(xiàn)的學(xué)者們,謝謝他們給我提供了大量的文
62、獻(xiàn),使我在寫(xiě)論文的過(guò)程中有了參考的依據(jù)。 感謝我的爸爸媽媽?zhuān)兄x代寫(xiě)論文他們?yōu)槲宜冻龅囊磺?。養(yǎng)育之恩,無(wú)以回報(bào),你們永遠(yuǎn)健康快樂(lè)是我最大的心愿。 彈指一揮間,大學(xué)四年已經(jīng)接近了尾聲。當(dāng)自己懷著忐忑不安的心情完成這篇畢業(yè)論文的時(shí)候,自己也從當(dāng)年一個(gè)從山里走出的懵懂孩子變成了一個(gè)成熟青年,回想自己的十幾年的求學(xué)生涯,雖然只是一個(gè)本科畢業(yè),但也實(shí)屬不容易。首先,從小學(xué)到大學(xué)的學(xué)費(fèi)和生活費(fèi)就不是一個(gè)小數(shù)目,這當(dāng)然要感謝我的爸爸媽媽?zhuān)麄兌际寝r(nóng)民,沒(méi)有他們的勤勤懇懇和細(xì)心安排,我是無(wú)論如何也完成不了我的大學(xué)生活。 沒(méi)有他們的支持和鼓勵(lì),我也不可能完成我經(jīng)濟(jì)學(xué)第二專(zhuān)業(yè)的學(xué)習(xí)。當(dāng)然,一個(gè)
63、農(nóng)民家庭要同時(shí)供兩個(gè)大學(xué)生上學(xué),沒(méi)有別人的幫助和接濟(jì)是相當(dāng)困難的。因此我要感謝那些在我求學(xué)時(shí)對(duì)我經(jīng)濟(jì)和精神上幫助的親戚、朋友、老師和同學(xué)們,我的生活因你們而精彩和充實(shí)。 漢口學(xué)院,這里嚴(yán)謹(jǐn)?shù)膶W(xué)風(fēng)、優(yōu)美的校園環(huán)境使我大學(xué)四年過(guò)的很充實(shí)和愉快。我第一學(xué)期是在哲學(xué)系度過(guò)的。在這短短的半年時(shí)間里,我有幸和許多優(yōu)秀的同學(xué)一起學(xué)習(xí),聽(tīng)睿智的哲學(xué)老師講授哲學(xué)。后來(lái)由于一些本可抗拒但一時(shí)沖動(dòng)的原因,我依依不舍的離開(kāi)了哲學(xué)系,離開(kāi)了親愛(ài)的哲學(xué)系的老師和同學(xué)們。 雖然只有短短的半年時(shí)光,但我確實(shí)學(xué)到了很多有用的知識(shí),尤其是對(duì)我思想和方法上的指導(dǎo)。這些有用的東西一直對(duì)我大學(xué)的學(xué)習(xí)和生活有很重要的指導(dǎo)作用,我相信,這些東西將伴隨我走完整個(gè)人生的道路。 28
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑施工重大危險(xiǎn)源安全管理制度
- 安全培訓(xùn)資料:典型建筑火災(zāi)的防治基本原則與救援技術(shù)
- 企業(yè)雙重預(yù)防體系應(yīng)知應(yīng)會(huì)知識(shí)問(wèn)答
- 8 各種煤礦安全考試試題
- 9 危險(xiǎn)化學(xué)品經(jīng)營(yíng)單位安全生產(chǎn)管理人員模擬考試題庫(kù)試卷附答案
- 加壓過(guò)濾機(jī)司機(jī)技術(shù)操作規(guī)程
- 樹(shù)脂砂混砂工藝知識(shí)總結(jié)
- XXXXX現(xiàn)場(chǎng)安全應(yīng)急處置預(yù)案
- 某公司消防安全檢查制度總結(jié)
- 1 煤礦安全檢查工(中級(jí))職業(yè)技能理論知識(shí)考核試題含答案
- 4.燃?xì)獍踩a(chǎn)企業(yè)主要負(fù)責(zé)人模擬考試題庫(kù)試卷含答案
- 工段(班組)級(jí)安全檢查表
- D 氯化工藝作業(yè)模擬考試題庫(kù)試卷含答案-4
- 建筑起重司索信號(hào)工安全操作要點(diǎn)
- 實(shí)驗(yàn)室計(jì)量常見(jiàn)的30個(gè)問(wèn)問(wèn)答題含解析