




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、2015年全國大學(xué)生電子設(shè)計(jì)競賽風(fēng)板控制裝置(I題)【高職高專組】2015年8月15日摘 要 本系統(tǒng)通過對(duì)直流小風(fēng)扇風(fēng)速的調(diào)節(jié)實(shí)現(xiàn)對(duì)風(fēng)板轉(zhuǎn)角的控制,使風(fēng)板轉(zhuǎn)角能夠隨風(fēng)速變化而改變,且能快速達(dá)到設(shè)定角度并穩(wěn)定。IAP15F2K61S2單片機(jī)為控制核心,通過鍵盤設(shè)定風(fēng)板板角度,1602實(shí)時(shí)顯示角度。單片機(jī)輸出PWM波控制風(fēng)扇的風(fēng)速,通過GY521mpu-6050測量風(fēng)板的傾角反饋至單片機(jī),采用PID控制經(jīng)典算法,使系統(tǒng)實(shí)現(xiàn)精確控制,然后微調(diào)風(fēng)速的大小使風(fēng)板角度達(dá)到穩(wěn)定。并且在達(dá)到設(shè)定范圍時(shí)進(jìn)行聲光提示。通過調(diào)試與測試,實(shí)現(xiàn)了基本部分與發(fā)揮部分,最終實(shí)現(xiàn)在懸掛重物的情況下風(fēng)板能達(dá)到設(shè)定角度控制,且最
2、終絕對(duì)值誤差不超過5度. 關(guān)鍵字:1602; GY521mpu-6050;PWM;PID算法 2 目 錄1系統(tǒng)方案11.1 角度測量方案選擇11.2 風(fēng)扇控制方案選擇21.3顯示方案選擇21.4控制器方案選擇22系統(tǒng)理論分析與計(jì)算32.1 風(fēng)扇調(diào)試原理32.2角度測量原理32.3 PID控制算法的分析33電路與程序設(shè)計(jì)43.1電路的設(shè)計(jì)43.1.1系統(tǒng)總體框圖43.1.2角度檢測電路43.1.3 風(fēng)扇驅(qū)動(dòng)電路53.1.4按鍵及顯示電路53.1.5電源電路63.2程序的設(shè)計(jì)63.2.1程序功能描述與設(shè)計(jì)思路63.2.2程序流程圖64測試方案與測試結(jié)果74.1測試方法與儀器74.2測試過程及數(shù)據(jù)7
3、4.3測試分析與結(jié)論8附錄1:電路原理圖10附錄2:實(shí)物圖11 1系統(tǒng)方案 根據(jù)題目要求,本系統(tǒng)可以分為控制部分和信號(hào)檢測部分.控制部分則包括顯示模塊、按鍵模塊、聲光報(bào)警模塊、風(fēng)扇驅(qū)動(dòng)模塊四個(gè)基本部分。信號(hào)檢測部分為角度測量模,測量風(fēng)板的角度。下面分別論證這幾個(gè)模塊的選擇。1.1 角度測量方案選擇 方案一:采用MMA7260重力加速度傳感器,由于加速度傳感器在靜止放置時(shí)受到重力作用,因此會(huì)有 1g的重力加速度。利用這個(gè)性質(zhì),通過測量重力加速度在加速度傳感器的 X 軸和 Y 軸上的分量,可以計(jì)算出其在垂直平面上的傾斜角度。根據(jù)如圖1.1所示,有Ax = gsin,Ay =gcos 。則=tan即
4、 =arctan().這樣,根據(jù)以上原理一個(gè)2 軸加速度傳感器可以測量在X-Y 平面上的傾斜角度。該方案原理簡單,操作方便,但使用起來運(yùn)算量較大,程序較為復(fù)雜,對(duì)于單片機(jī)來說,會(huì)顯得有點(diǎn)吃力,因此我們放棄選用該方案。 圖1.1加速度傳感器角度測量原理 方案二:MPU-6000為全球首例整合性6軸運(yùn)動(dòng)處理組件,相較于多組件方案,免除了組合陀螺儀與加速器時(shí)之軸間差的問題,減少了大量的包裝空間。MPU-6000能以數(shù)字輸出6軸或9軸的旋轉(zhuǎn)矩陣、四元數(shù)(quaternion)、歐拉角格式(Euler Angle forma)的融合演算數(shù)據(jù)。內(nèi)建之運(yùn)作時(shí)間偏差與磁力感測器校正演算技術(shù),免除了客戶須另外進(jìn)
5、行校正的需求。符合設(shè)計(jì)要求,同時(shí)也是我們平時(shí)有接觸的模塊。故綜合考慮實(shí)際中選擇方案二。1.2 風(fēng)扇控制方案選擇方案一:采用可控硅控制調(diào)速,通過控制雙向可控硅的導(dǎo)通角,使輸出端電壓發(fā)生改變,從而使施加在電風(fēng)扇的輸入電壓發(fā)生改變,以調(diào)節(jié)風(fēng)扇的轉(zhuǎn)速,實(shí)現(xiàn)各檔位風(fēng)速的無級(jí)調(diào)速。但可控硅控制控制原理決定了只能滯后觸發(fā),因此,晶閘管可控制整流器對(duì)交流電源來說相當(dāng)于一個(gè)感性負(fù)載,吸取滯后的無功電流,因此功率因素低。并且晶閘管整流裝置的輸出電壓是脈動(dòng)的,而且脈波數(shù)總是有限的。如果主電路電感不是非常大,則輸出電流總存在連續(xù)和斷續(xù)兩種情況,因而機(jī)械特性也有連續(xù)和斷續(xù)兩段,因此功率因素低,故我們不選用該方案。方案二
6、:采用直流斬波控制,改變電壓輸出開關(guān)斷時(shí)間,將直流電源電壓斷續(xù)加到負(fù)載上,即可實(shí)現(xiàn)風(fēng)扇調(diào)速控制,它具有效率高、體積小、成本低等優(yōu)點(diǎn)。我們可以采用單片機(jī)由軟件來實(shí)現(xiàn)PWM波,簡化系統(tǒng)硬件設(shè)計(jì),通過改變PWM波的占空比的值即可改變電樞端電壓的平均值從而達(dá)到調(diào)速的目的。再加上PID算法控制,而整個(gè)系統(tǒng)的PWM波形的產(chǎn)生是通過PID算法調(diào)節(jié) ,這樣提高了系統(tǒng)的穩(wěn)定性和可靠性,讓系統(tǒng)控制更加精確。故綜合考慮實(shí)際中選擇方案二。1.3顯示方案選擇 方案一:使用數(shù)碼管顯示,通過數(shù)碼管顯示被測角度和設(shè)定角度。該方案程序簡單,但硬件占用單片機(jī)I/O口較多,對(duì)于盡量節(jié)約端口,讓線路簡單來說不是好方法,而且顯示也不夠
7、直觀靈活,只能顯示數(shù)字,不能顯示漢字顯示功能提示, 故不適合本次設(shè)計(jì)應(yīng)用。 方案二:使用液晶屏LCD1602,具有體積小,使用方便等特點(diǎn)。并且可以顯示字母,數(shù)字等功能,觀察顯示很直觀,通過字幕顯示各種菜單界面 、設(shè)定角度、測量角度等。該方案程序較復(fù)雜,但顯示觀察清晰,顯示直接明白,完全符合本系統(tǒng)設(shè)計(jì)功能。故為最佳方案,我們選擇方案二。1.4控制器方案選擇 方案一:采用FPGA(現(xiàn)場可編程門陣列)作為系統(tǒng)的控制器;將所有的器件集成在一塊芯片上,這樣外圍電路較少,控制板的體積小,穩(wěn)定性高,擴(kuò)展性能好;而且FPGA采用并行的輸入/輸出方式,系統(tǒng)處理速度快,再加上FPGA有方便的開發(fā)環(huán)境和豐富的開發(fā)工
8、具等資源可利用,易于調(diào)試;但是FPGA得成本偏高,算術(shù)運(yùn)算能力不強(qiáng),而本設(shè)計(jì)系統(tǒng)的設(shè)計(jì)會(huì)用到較多算術(shù)運(yùn)算,所以FPGA的高速處理的優(yōu)勢得不到充分體現(xiàn)。 方案二:采用STC公司的IAP15F2K61S2單片機(jī)作為系統(tǒng)的控制器。單片機(jī)算術(shù)運(yùn)算功能強(qiáng),軟件編程靈活,可用軟件較簡單的實(shí)現(xiàn)各種算術(shù)和邏輯控制,并且由于其成本低,體積小和功耗低等優(yōu)點(diǎn),使其在各個(gè)領(lǐng)域應(yīng)用廣泛;另外,由于本設(shè)計(jì)中會(huì)用到較多的算術(shù)運(yùn)算,所以對(duì)本系統(tǒng)來說非常適合利用單片機(jī)作為控制器。 基于以上分析,選擇方案二。2系統(tǒng)理論分析與計(jì)算2.1 風(fēng)扇調(diào)試原理 單片機(jī)控制的小型直流電機(jī)的一般采用PWM脈沖調(diào)制方式實(shí)現(xiàn)速度的控制。 PWM基本
9、原理: PWM即脈沖寬度調(diào)制(定義),是直流電源電壓基本不變的情況下通過電子開關(guān)的通斷,改變施加到電機(jī)電樞端得直流電壓脈沖寬度(即所謂的占空比),以調(diào)節(jié)輸入電機(jī)電樞的電壓平均值的調(diào)速方式。 通過改變固定周期內(nèi)直流電壓的占空比來改變電機(jī)兩端的直流平均電壓,進(jìn)而達(dá)到控制風(fēng)力大小的一種方法。PWM可以應(yīng)用在許多方面,如電機(jī)調(diào)速、溫度控制、壓力控制等。 通過改變直流電機(jī)電樞上電壓的"占空比"來改變平均壓的大小,從而控制電動(dòng)機(jī)的轉(zhuǎn)速。只要按一定規(guī)律,改變通、斷電的時(shí)間,即可讓電機(jī)轉(zhuǎn)速得到控制。設(shè)電機(jī)始終接通電源時(shí),電機(jī)轉(zhuǎn)速最大為Vmax, 設(shè)占空比為D=t1T,則電機(jī)的平均速度為式中
10、,Vd - 電機(jī)的平均速度; Vmax- -電機(jī)全通電時(shí)的速度(最大); D=t1T -占空比。 由此可見,當(dāng)我們改變占空比D:t1T時(shí),就可以得到不同的電機(jī)平均速度Vd ,嚴(yán)格地講,平均速度 Vd與占空比 D并不是嚴(yán)格的線性關(guān)系,在一般的應(yīng)用中,可以將其近似地看成線性關(guān)系。2.2角度測量原理 mpu6050工作原理:作為一款物理傳感器,其工作原理是利用物理效應(yīng),諸如壓電效應(yīng),將被測信號(hào)量的微小變化轉(zhuǎn)換成電信號(hào)。MPU6050是一款9軸運(yùn)動(dòng)處理傳感器。它集成了3軸MEMS陀螺儀,3軸MEMS加速度計(jì),以及一個(gè)可擴(kuò)展的數(shù)字運(yùn)動(dòng)處理器DMP(Digital Motion Processor),可用
11、I2C接口連接一個(gè)第三方的數(shù)字傳感器,比如磁力計(jì)。擴(kuò)展之后就可以通過其I2C或SPI接口輸出一個(gè)9軸的信號(hào)(SPI接口僅在MPU-6000可用)。MPU-6050也可以通過其I2C接口連接非慣性的數(shù)字傳感器,比如壓力傳感器。極大提高系統(tǒng)最小精度,符合題目要求。2.3 PID控制算法的分析 PID控制算法是控制理論中應(yīng)用很廣泛的一種算法,對(duì)于一般控制系統(tǒng)來說,PID算法從某種意義來說具有通用性,對(duì)各種系統(tǒng)具有廣泛的適用性,通過現(xiàn)場的參數(shù)調(diào)試,可以達(dá)到很好的控制效果。對(duì)于我們這次風(fēng)板控制系統(tǒng)的設(shè)計(jì),我們同樣也可以使用PID控制算法,具體算法如下: e(i)=t測-t設(shè) E= (2) 算法中,u(i
12、)為當(dāng)時(shí)的功率輸出。T為采樣時(shí)間,E為誤差積累,KP為比例常數(shù),Ti為積分常數(shù),Td為微分常數(shù)。根據(jù)實(shí)際系統(tǒng),調(diào)節(jié)這三個(gè)常數(shù),可以達(dá)到更好的效果。3電路與程序設(shè)計(jì)3.1電路的設(shè)計(jì)3.1.1系統(tǒng)總體框圖系統(tǒng)總體框圖如圖3.1所示:單片機(jī)LCD1602聲光系統(tǒng)角度傳感器風(fēng)板調(diào)速裝置電機(jī)(風(fēng)扇)獨(dú)立鍵盤 圖3.1系統(tǒng)總體框圖3.1.2角度檢測電路 采用GY-52角度傳感器,免除了組合陀螺儀與加速器時(shí)之軸間差的問題,減少了大量的包裝空間。MPU-6000整合了3軸陀螺儀、3軸加速器,可以直接輸出角度轉(zhuǎn)換為數(shù)字信號(hào)傳遞給單片機(jī)進(jìn)行調(diào)速控制。其電路圖如圖3.2所示: 圖3.2角度檢測電路3.1.3 風(fēng)扇驅(qū)
13、動(dòng)電路 采用單片機(jī)產(chǎn)生PWM波,簡化硬件電路設(shè)計(jì),實(shí)現(xiàn)性價(jià)比高特點(diǎn),改變PWM波的占空比的值即可改變電樞端電壓的平均值從而達(dá)到調(diào)速的目的。外加LM298驅(qū)動(dòng)電路,即可完全實(shí)現(xiàn)調(diào)速控制。LM298N它采用單片集成塑裝, 是一個(gè)高電壓、大電流全雙橋驅(qū)動(dòng)器,由標(biāo)準(zhǔn)的TTL電平控制。L298N支持50V以內(nèi)的電機(jī)控制電壓,在直流運(yùn)轉(zhuǎn)條件下,可以通過高達(dá)2A的電流,因此它滿足了一般小型電機(jī)的控制要求。接法見圖3.3,圖中二極管的作用是消除電機(jī)的反向電動(dòng)勢,保護(hù)電路,因此采用整流二極管比較合適。PWM控制信號(hào)由in1、in2輸入。如果in1為高電平,in2為低電平時(shí)電機(jī)為正向轉(zhuǎn)速,反之in1為低電平,in
14、2為高電平時(shí),電機(jī)為反向轉(zhuǎn)速。本設(shè)計(jì)將in2直接接地,即采用單向制動(dòng)的方式。圖3.3 L298N模塊實(shí)物圖3.1.4按鍵及顯示電路 圖3.4 1602顯示電路本設(shè)計(jì)采用1個(gè)鍵作為鍵盤,分別為選擇2種模式。按是一種,不按又是一種。圖3.5 按鍵輸入電路3.1.5電源電路電源由變壓部分、濾波部分、穩(wěn)壓部分組成。為整個(gè)系統(tǒng)提供5V或者12V電壓,確保電路的正常穩(wěn)定工作。我們采取的是單電源供電,把12v的直流電供給電機(jī),用降壓芯片把電壓穩(wěn)定到5V,提供給單片機(jī)工作,并實(shí)現(xiàn)了互不干擾。同時(shí)單片機(jī)可以間接控制電機(jī)的調(diào)速。LM337可調(diào)穩(wěn)壓3.2程序的設(shè)計(jì)3.2.1程序功能描述與設(shè)計(jì)思路1、 程序功能描述:
15、可以輸出精確的角度信息,并利用PWM來高速調(diào)節(jié)電機(jī)的開關(guān)從而實(shí)現(xiàn)對(duì)電機(jī)速度控制,使得角度傳感器,風(fēng)板,電機(jī),單片機(jī),LCD1602,形成了一個(gè)簡單的系統(tǒng)。2、程序設(shè)計(jì)思路:先是利用角度傳感器對(duì)風(fēng)板的角度進(jìn)行精確的實(shí)時(shí)顯示,利用角度傳感器傳輸?shù)臄?shù)據(jù)對(duì)pwm進(jìn)行控制,使得電機(jī)的風(fēng)速得到控制,最后風(fēng)速來反饋給角度傳感器,形成了一個(gè)封閉的反饋使的閉環(huán)系統(tǒng)。4測試方案與測試結(jié)果4.1測試方法與儀器測試方法:先通過Keil C軟件實(shí)現(xiàn)程序調(diào)試和進(jìn)行初步仿真,再通過protues仿真軟件搭建電理圖,實(shí)現(xiàn)對(duì)程序功能的實(shí)現(xiàn)仿真,并且用虛擬仿真軟件Multisim對(duì)硬件電路實(shí)現(xiàn)功能仿真,確保電路無誤后,在制作硬質(zhì)
16、電路板,焊接電路,實(shí)現(xiàn)軟硬件聯(lián)合調(diào)試。測試儀器:量角器、秒表、直尺、模擬示波器、數(shù)字示波器、數(shù)字萬用表、指針式萬用表。4.2測試過程及數(shù)據(jù) 1.測試基本功能一:用手搬動(dòng)風(fēng)板時(shí),數(shù)字顯示風(fēng)板的轉(zhuǎn)角。實(shí)際測試時(shí),風(fēng)板角度能夠從45-135度變化,符合題目要求。 2.測試基本功能二:當(dāng)懸掛10克重物時(shí),使風(fēng)板角度 能夠在45-135度范圍變化,并實(shí)時(shí)顯示角度。在完成要求的同時(shí),要求誤差不超過5度,反應(yīng)時(shí)間15秒,測試如下: 風(fēng)力大小(%)角度(°)403044454750506553805595601056512073135 表1 基本功能二測試 3.測試基本功能三:當(dāng)間距為10cm時(shí),通
17、過控制按鍵控制風(fēng)力大小,在 45°±5°范圍內(nèi)。要求控制過程在10 秒內(nèi)完成,實(shí)時(shí)顯示,并由聲光提示,以便進(jìn)行測試。測試數(shù)據(jù)如表2所示: 風(fēng)力大?。?)角度(°)用時(shí)(s)52486.351483.143443.1 表2. 基本功能測試三 4. 測試發(fā)揮功能一: 當(dāng)間距掛10克重物時(shí),通過鍵盤設(shè)定風(fēng)板轉(zhuǎn)角,其范圍為45-135要在 15秒內(nèi)達(dá)到設(shè)定值,并實(shí)時(shí)顯示。最大誤差的絕對(duì)值不超過5°測試數(shù)據(jù)如 表3所示:設(shè)定角度(°)實(shí)際角度(°)風(fēng)力大?。?)調(diào)整時(shí)間(s)303000501412137024171690282213
18、110364312130547611150180800 5測試發(fā)揮功能二:在功能一的基礎(chǔ)上,通過鍵盤設(shè)定模式,要求在兩個(gè)預(yù)設(shè)角度間擺動(dòng)四次,擺動(dòng)周期不超過5秒,最大誤差的絕對(duì)值不超過 5°。測試數(shù)據(jù)達(dá)到要求4.3測試分析與結(jié)論根據(jù)上述測試數(shù)據(jù),系統(tǒng)完全符合要求,誤差在允許范圍內(nèi),實(shí)現(xiàn)全部功能,有些指標(biāo)還很高精度。由此可以得出以下結(jié)論:綜上所述,本設(shè)計(jì)達(dá)到設(shè)計(jì)要求。26附錄1:電路原理圖角度傳感器電路原理圖附錄2:實(shí)物圖附錄3:系統(tǒng)程序#include <stc15f2k60s2.H>#include <math.h> /Keil library #includ
19、e <stdio.h> /Keil library#include <INTRINS.H>typedef unsigned char uchar;typedef unsigned short ushort;typedef unsigned int uint;/*/ 定義51單片機(jī)端口/*#define DataPort P0/LCD1602數(shù)據(jù)端口sbit SCL=P24;/IIC時(shí)鐘引腳定義sbit SDA=P23;/IIC數(shù)據(jù)引腳定義sbit LCM_RS=P22;/LCD1602命令端口sbit LCM_RW=P21;/LCD1602命令端口sbit LCM_EN
20、=P20;/LCD1602命令端口 /*/ 定義MPU6050內(nèi)部地址/*#defineSMPLRT_DIV0x19/陀螺儀采樣率,典型值:0x07(125Hz)#defineCONFIG0x1A/低通濾波頻率,典型值:0x06(5Hz)#defineGYRO_CONFIG0x1B/陀螺儀自檢及測量范圍,典型值:0x18(不自檢,2000deg/s)#defineACCEL_CONFIG0x1C/加速計(jì)自檢、測量范圍及高通濾波頻率,典型值:0x01(不自檢,2G,5Hz)#defineACCEL_XOUT_H0x3B#defineACCEL_XOUT_L0x3C#defineACCEL_YOU
21、T_H0x3D#defineACCEL_YOUT_L0x3E#defineACCEL_ZOUT_H0x3F#defineACCEL_ZOUT_L0x40#definePWR_MGMT_10x6B/電源管理,典型值:0x00(正常啟用)#defineWHO_AM_I0x75/IIC地址寄存器(默認(rèn)數(shù)值0x68,只讀)#defineSlaveAddress0xD0/IIC寫入時(shí)的地址字節(jié)數(shù)據(jù),+1為讀取/*/定義類型及變量/*uchar dis4;/顯示數(shù)字(-511至512)的字符數(shù)組intdis_data;/變量/intTemperature,Temp_h,Temp_l;/溫度及高低位數(shù)據(jù)/*
22、/函數(shù)聲明/*void delay(unsigned int k);/延時(shí)/LCD相關(guān)函數(shù)void InitLcd();/初始化lcd1602void lcd_printf(uchar *s,int temp_data);void WriteDataLCM(uchar dataW);/LCD數(shù)據(jù)void WriteCommandLCM(uchar CMD,uchar Attribc);/LCD指令void DisplayOneChar(uchar X,uchar Y,uchar DData);/顯示一個(gè)字符void DisplayListChar(uchar X,uchar Y,uchar *
23、DData,L);/顯示字符串/MPU6050操作函數(shù)void InitMPU6050();/初始化MPU6050void Delay5us();void I2C_Start();void I2C_Stop();void I2C_SendACK(bit ack);bit I2C_RecvACK();void I2C_SendByte(uchar dat);uchar I2C_RecvByte();void I2C_ReadPage();void I2C_WritePage();void display_ACCEL_x();void display_ACCEL_y();void display_
24、ACCEL_z();uchar Single_ReadI2C(uchar REG_Address);/讀取I2C數(shù)據(jù)void Single_WriteI2C(uchar REG_Address,uchar REG_data);/向I2C寫入數(shù)據(jù)/*/整數(shù)轉(zhuǎn)字符串/*void lcd_printf(uchar *s,int temp_data)*+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; /
25、*/延時(shí)/*void delay(unsigned int k)unsigned int i,j;for(i=0;i<k;i+)for(j=0;j<121;j+);/*/LCD1602初始化/*void InitLcd()WriteCommandLCM(0x38,1);WriteCommandLCM(0x08,1);WriteCommandLCM(0x01,1);WriteCommandLCM(0x06,1);WriteCommandLCM(0x0c,1);DisplayOneChar(0,0,'A');DisplayOneChar(0,1,'G')
26、;/*/LCD1602寫允許/*void WaitForEnable(void)DataPort=0xff;LCM_RS=0;LCM_RW=1;_nop_();LCM_EN=1;_nop_();_nop_();while(DataPort&0x80);LCM_EN=0;/*/LCD1602寫入命令/*void WriteCommandLCM(uchar CMD,uchar Attribc)if(Attribc)WaitForEnable();LCM_RS=0;LCM_RW=0;_nop_();DataPort=CMD;_nop_();LCM_EN=1;_nop_();_nop_();L
27、CM_EN=0;/*/LCD1602寫入數(shù)據(jù)/*void WriteDataLCM(uchar dataW)WaitForEnable();LCM_RS=1;LCM_RW=0;_nop_();DataPort=dataW;_nop_();LCM_EN=1;_nop_();_nop_();LCM_EN=0;/*/LCD1602寫入一個(gè)字符/*void DisplayOneChar(uchar X,uchar Y,uchar DData)Y&=1;X&=15;if(Y)X|=0x40;X|=0x80;WriteCommandLCM(X,0);WriteDataLCM(DData);
28、/*/LCD1602顯示字符串/*void DisplayListChar(uchar X,uchar Y,uchar *DData,L)uchar ListLength=0; Y&=0x1; X&=0xF; while(L-) DisplayOneChar(X,Y,DDataListLength);ListLength+; X+; /*/延時(shí)5微秒(STC90C52RC12M)/不同的工作環(huán)境,需要調(diào)整此函數(shù)/當(dāng)改用1T的MCU時(shí),請調(diào)整此延時(shí)函數(shù)/*void Delay5us()_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
29、_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();/*/I2C起始信號(hào)/*void I2C_Start() SDA = 1; /拉高數(shù)據(jù)線 SCL = 1; /拉高時(shí)鐘線 Delay5us(); /延時(shí) SDA = 0; /產(chǎn)生下降沿 Delay5us(); /延時(shí) SCL = 0; /拉低時(shí)鐘線/*/I2C停止信號(hào)/*void I2C_Stop() SDA
30、= 0; /拉低數(shù)據(jù)線 SCL = 1; /拉高時(shí)鐘線 Delay5us(); /延時(shí) SDA = 1; /產(chǎn)生上升沿 Delay5us(); /延時(shí)/*/I2C發(fā)送應(yīng)答信號(hào)/入口參數(shù):ack (0:ACK 1:NAK)/*void I2C_SendACK(bit ack) SDA = ack; /寫應(yīng)答信號(hào) SCL = 1; /拉高時(shí)鐘線 Delay5us(); /延時(shí) SCL = 0; /拉低時(shí)鐘線 Delay5us(); /延時(shí)/*/I2C接收應(yīng)答信號(hào)/*bit I2C_RecvACK() SCL = 1; /拉高時(shí)鐘線 Delay5us(); /延時(shí) CY = SDA; /讀應(yīng)答信號(hào)
31、SCL = 0; /拉低時(shí)鐘線 Delay5us(); /延時(shí) return CY;/*/向I2C總線發(fā)送一個(gè)字節(jié)數(shù)據(jù)/*void I2C_SendByte(uchar dat) uchar i; 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ù)/*uchar I2C_RecvByte() uchar i; uc
32、har dat = 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í) return dat;/*/向I2C設(shè)備寫入一個(gè)字節(jié)數(shù)據(jù)/*void Single_WriteI2C(uchar REG_Address,uchar REG_data) I2C_Start(); /起始信號(hào) I2C_SendByte(SlaveAddress); /發(fā)送
33、設(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ù)/*uchar Single_ReadI2C(uchar REG_Address)uchar REG_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
34、(SlaveAddress+1); /發(fā)送設(shè)備地址+讀信號(hào)REG_data=I2C_RecvByte(); /讀出寄存器數(shù)據(jù)I2C_SendACK(1); /接收應(yīng)答信號(hào)I2C_Stop(); /停止信號(hào)return REG_data;/*/初始化MPU6050/*void InitMPU6050()Single_WriteI2C(PWR_MGMT_1, 0x00);/解除休眠狀態(tài)Single_WriteI2C(SMPLRT_DIV, 0x07);Single_WriteI2C(CONFIG, 0x06);Single_WriteI2C(GYRO_CONFIG, 0x18);Single_Wr
35、iteI2C(ACCEL_CONFIG, 0x01);/*/合成數(shù)據(jù)/*int GetData(uchar REG_Address)char H,L;H=Single_ReadI2C(REG_Address);L=Single_ReadI2C(REG_Address+1);return (H<<8)+L; /合成數(shù)據(jù)/*/在1602上顯示10位數(shù)據(jù)/*void Display10BitData(int value,uchar x,uchar y)lcd_printf(dis, value);/轉(zhuǎn)換數(shù)據(jù)顯示DisplayListChar(x,y,dis,4);/啟始列,行,顯示數(shù)組,
36、顯示長度/* /sbit mac1=P10;sbit mac=P11;void pwm_init()CMOD=0X02;CH=0;CL=0;CCAPM0=0X42;CCAP0L=0X9a;CCAP0H=0X9a;Delay5us();CCAPM1=0X42;CCAP1L=0X9a;CCAP1H=0X9a;Delay5us();CR=1;sbit key=P25;sbit key1=P26;sbit key2=P27;sbit key3=P17;sbit led=P16;uint flag=0,flag1=0;uchar flag3=0;uint temp;uint cnt=0,cnt1=0;u
37、char code angl13="060"uchar code angl210="100 090"void Delay50ms(uint r)/11.0592MHzunsigned char i, j, k;uint t;for(t=0;t<r;t+)_nop_();_nop_();i = 3;j = 26;k = 223;dodowhile (-k); while (-j); while (-i);uint jd()int v10,i; int y,z;uint te;for(i=0;i<10;i+)y=GetData(ACCEL_YOU
38、T_H);Delay5us(); z=GetData(ACCEL_ZOUT_H);Delay5us(); y/=64;z/=64;if(y<0)y=-y;vi=(float)(atan2(z,y)*180)/3.14159265);vi=90-vi;te=v0+v1+v2+v4+v4+v5+v6+v7+v8+v9;te=(te/10)+(te%10);Display10BitData(te,2,0);return te;void ang1_93() /需要進(jìn)一步優(yōu)化基本的第一問if(temp<140)CCAP0L=150-36;CCAP0H=150-36;CCAP1L=150-30
39、;CCAP1H=150-30;if(temp=105)led=0;/調(diào)整時(shí)間,if(temp>94)&&(temp<101)&&(led=0)Delay50ms(1);flag+; if(flag=90)led=1;flag1=1;if(flag1=1)CCAP0L=150;CCAP0H=150;CCAP1L=150-36;CCAP1H=150-36;Delay50ms(10);CCAP0L=0x9a;CCAP0H=0x9a;CCAP1L=0x9a;CCAP1H=0x9a;void ang2_70_105()uint flag2=0;int j,t2
40、;int pwm_counter0=0,pwm_counter1=0;for(j=0;j<2;j+)tj=jd();delay(15);if(t1-t0)>0)flag2=1;else if(t1-t0)<0)flag2=2;/負(fù)數(shù)if(temp<85)if(flag2=2)pwm_counter1+;pwm_counter1+;delay(1);CCAP1L=150-pwm_counter1;CCAP1H=150-pwm_counter1;if(pwm_counter1>=51)pwm_counter1=51;if(flag2=1)pwm_counter1+;p
41、wm_counter1+;delay(1);CCAP1L=150-pwm_counter1;CCAP1H=150-pwm_counter1;pwm_counter0-;delay(1);CCAP0L=150-pwm_counter0;CCAP0H=150-pwm_counter0;if(pwm_counter1>=51)pwm_counter1=51;if(pwm_counter0<=0)pwm_counter0=0;if(temp>95)if(flag2=1) pwm_counter0+;pwm_counter0+;delay(1);CCAP0L=150-pwm_counter0;CCAP0H=150-pwm_counter0;pwm_counter1-;delay(1);CCAP1L=150-pwm_counter1;CCAP1H=150-pwm_counter1;if(pwm_counter0>=47)pwm_counter0=48;if(pwm_counter1<=0)pwm_counter1=0;if(flag2=2)pwm_counter0+;pwm_counter
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 寶塔內(nèi)外絲行業(yè)深度研究報(bào)告
- 亮化工程項(xiàng)目申請報(bào)告
- 勞務(wù)提成合同范本
- 2021-2026年中國防砸安全鞋市場深度評(píng)估及行業(yè)投資前景咨詢報(bào)告
- 2025年中國披頭巾行業(yè)發(fā)展?jié)摿Ψ治黾巴顿Y戰(zhàn)略研究報(bào)告
- 2025年熱冷軋板項(xiàng)目投資可行性研究分析報(bào)告
- 2025年中國大型風(fēng)力發(fā)電機(jī)葉片市場前景預(yù)測及投資規(guī)劃研究報(bào)告
- 小學(xué)解方程思維能力提升訓(xùn)練500題
- 小學(xué)解方程能力提升計(jì)劃書500題
- 科技助力學(xué)校安全防災(zāi)減災(zāi)的科普之旅
- 2024年03月遼寧朝陽市事業(yè)單位定向招考聘用退役士兵100人筆試歷年(2016-2023年)真題薈萃帶答案解析
- 茶葉運(yùn)營方案
- 改變學(xué)習(xí)方式促進(jìn)學(xué)生發(fā)展結(jié)題報(bào)告
- 軟件監(jiān)理報(bào)告
- 中國常見食物營養(yǎng)成分表
- 09J202-1 坡屋面建筑構(gòu)造(一)-2
- 光伏電站土建工程施工技術(shù)方案
- 2024年上海英語高考卷及答案完整版
- 物業(yè)公司客戶服務(wù)課件
- 腦卒中患者的康復(fù)護(hù)理查房
- 酶工程技術(shù)在茶葉深加工中的應(yīng)用
評(píng)論
0/150
提交評(píng)論