基于加速度傳感器ADXL345的計(jì)步器設(shè)計(jì)_第1頁
基于加速度傳感器ADXL345的計(jì)步器設(shè)計(jì)_第2頁
基于加速度傳感器ADXL345的計(jì)步器設(shè)計(jì)_第3頁
基于加速度傳感器ADXL345的計(jì)步器設(shè)計(jì)_第4頁
基于加速度傳感器ADXL345的計(jì)步器設(shè)計(jì)_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第1頁基于加速度傳感器ADXL345的計(jì)步器設(shè)計(jì)摘要:計(jì)步器是一種頗受歡迎的日常鍛煉進(jìn)度監(jiān)控器,可以激勵(lì)人們挑戰(zhàn)自己,增強(qiáng)體質(zhì),幫助瘦身。早期設(shè)計(jì)利用加重的機(jī)械開關(guān)檢測步伐,并帶有一個(gè)簡單的計(jì)數(shù)器?;蝿?dòng)這些裝置時(shí),可以聽到有一個(gè)金屬球來回滑動(dòng),或者一個(gè)擺錘左右擺動(dòng)敲擊擋塊。計(jì)步器功能可以根據(jù)計(jì)算人的運(yùn)動(dòng)情況來分析人體的健康狀況。而人的運(yùn)動(dòng)情況可以通過很多特性來進(jìn)行分析。與傳統(tǒng)的機(jī)械式傳感器不同,ADXL345是電容式三軸傳感器,由它捕獲人體運(yùn)動(dòng)時(shí)加速度信號(hào),更加準(zhǔn)確。信號(hào)通過低通濾波器濾波,由單片機(jī)內(nèi)置A/D轉(zhuǎn)換器對信號(hào)進(jìn)行采樣、A/D轉(zhuǎn)換。軟件采用自適應(yīng)算法實(shí)現(xiàn)計(jì)步功能,減少誤計(jì)數(shù),更加精確。單片機(jī)STC89C52控制液晶顯示計(jì)步狀態(tài)。整機(jī)工作電流只有1-1.5mA,實(shí)現(xiàn)超低功耗。關(guān)鍵詞:計(jì)步器;加速度傳感器;ADXL345;低功耗0前言隨著社會(huì)的發(fā)展,人們的物質(zhì)生活水平日漸提高,人們也越來越關(guān)注自己的健康。計(jì)步器作為一種測量儀器,可以計(jì)算行走的步數(shù)和消耗的能量,所以人們可以定量的制定運(yùn)動(dòng)方案來健身,并根據(jù)運(yùn)行情況來分析人體的健康狀況,因而越發(fā)流行。手持式的電子計(jì)步器是適應(yīng)市場需求的設(shè)計(jì),使用起來簡單方便。計(jì)步器是一種頗受歡迎的日常鍛煉進(jìn)度監(jiān)控器,可以激勵(lì)人們挑戰(zhàn)自己,增強(qiáng)體質(zhì),幫助瘦身。早期設(shè)計(jì)利用加重的機(jī)械開關(guān)檢測步伐,并帶有一個(gè)簡單的計(jì)數(shù)器?;蝿?dòng)這些裝置時(shí),可以聽到有一個(gè)金屬球來回滑動(dòng),或者一個(gè)擺錘左右擺動(dòng)敲擊擋塊。電子計(jì)步器主要組成部分是振動(dòng)傳感器和電子計(jì)數(shù)器。步行的時(shí)候人的重心會(huì)上下移動(dòng)。以腰部的上下位移最為明顯,所以記步器掛在腰帶上最為適宜。所謂的振動(dòng)傳感器其實(shí)就是一個(gè)平衡錘在上下振動(dòng)時(shí)平衡被破壞使一個(gè)觸點(diǎn)能出現(xiàn)通/斷動(dòng)作,由電子計(jì)數(shù)器完成了主要的記錄與顯示功能,其他的屬于熱量消耗,路程換算均由電路完成。計(jì)步器中一般采用一種加速度計(jì)來感受外界的震動(dòng)。常用的加速度計(jì)原理如下:在一段塑料管中密封著一小塊磁鐵,管外纏繞著線圈,當(dāng)塑料管運(yùn)動(dòng)時(shí),磁鐵由于慣性在管中反向運(yùn)動(dòng),切割線圈,由于電磁感應(yīng),線圈中產(chǎn)生電流,人體運(yùn)動(dòng)時(shí),上下起伏的加速度近似為正弦過程,線圈的輸出電流也是正弦波,測量正弦波的頻率就可以得出運(yùn)動(dòng)的步數(shù),再計(jì)算的出速度,距離,和消耗卡路里。1總體方案設(shè)計(jì)1.1設(shè)計(jì)要求(1)掌握加速度傳感器ADXL345的工作原理。(2)掌握LCD1602的工作原理及編程方法。(3)該系統(tǒng)能夠有效的檢測人體步行動(dòng)作。(4)能夠顯示并且記錄單位時(shí)間內(nèi)的步數(shù),一段時(shí)間內(nèi)總步數(shù),行走的距離以及消耗的熱量。(5)使用單片機(jī)技術(shù)處理數(shù)據(jù)。1.2單片機(jī)芯片的選擇方案和論證采用AT89S51芯片作為硬件核心,內(nèi)部具有4KBROM存儲(chǔ)空間,能于3V的超低壓工作,而且與MCS-51系列單片機(jī)完全兼容,但是運(yùn)用于電路設(shè)計(jì)中時(shí)由于不具備ISP在線編程技術(shù),所以在對電路進(jìn)行調(diào)試時(shí),由于程序的錯(cuò)誤修改或?qū)Τ绦虻男略龉δ苄枰獰氤绦驎r(shí),對芯片的多次拔插會(huì)對芯片造成一定的損壞。采用STC89C52芯片,STC89C52是一種低功耗、高性能的8位CMOS微控制器,具有8K的可編程Flash存儲(chǔ)器。同樣具有AT89S51的功能,且具有在線編程可擦除技術(shù),當(dāng)對電路進(jìn)行調(diào)試時(shí),由于程序的錯(cuò)誤修改或?qū)Τ绦虻男略龉δ苄枰獰氤绦驎r(shí),不需要對芯片多次拔插,所以不會(huì)對芯片造成損壞,因此選擇采用STC89C52作為主控制系統(tǒng)核心。1.3顯示模塊選擇方案和論證方案一:采用LED數(shù)碼管動(dòng)態(tài)掃描,LED數(shù)碼管價(jià)格適中,對于顯示數(shù)字合適,采用動(dòng)態(tài)掃描法與單片機(jī)連接時(shí),雖然占用的單片機(jī)口線少,但連線還需要花費(fèi)一點(diǎn)時(shí)間,所以也不用此種作為顯示。方案二:采用點(diǎn)陣式數(shù)碼管顯示,點(diǎn)陣式數(shù)碼管是由八行八列的發(fā)光二極管組成,對于顯示文字比較適合,若采用在顯示數(shù)字顯得太浪費(fèi),且價(jià)格也相對較高,所以在此也不用此種作為顯示。方案三:采用LCD1602液晶顯示屏;它是一種專門用來顯示字母、數(shù)字、符號(hào)等的點(diǎn)陣型液晶模塊。1602LCD可以顯示的內(nèi)容為16X2,即可以顯示兩行。該液晶顯示屏的顯示功能強(qiáng)大,內(nèi)置192種字符,可顯示大量符號(hào)、數(shù)字,清晰可見,而且功率消耗小壽命長抗干擾能力強(qiáng)。綜上,在此設(shè)計(jì)中采用1602液晶顯示屏。在此設(shè)計(jì)中,采用的按鍵復(fù)位電路。按鍵復(fù)位電路如圖3所示。圖3復(fù)位電路(2)復(fù)位電路工作原理上電復(fù)位要求接通電源后,單片機(jī)自動(dòng)實(shí)現(xiàn)復(fù)位操作。上電瞬間RESET引腳獲得高電平,隨著電容的充電,RERST引腳的高電平將逐漸下降。RERST引腳的高電平只要能保持足夠的時(shí)間(2個(gè)機(jī)器周期),單片機(jī)就可以進(jìn)行復(fù)位操作。上電與按鍵均有效的復(fù)位電路不僅在上電時(shí)可以自動(dòng)復(fù)位,而且在單片機(jī)運(yùn)行期間,利用按鍵也可以完成復(fù)位操作。2、晶振電路的設(shè)計(jì)晶振電路用于產(chǎn)生單片機(jī)工作所需要的時(shí)鐘信號(hào),而時(shí)序所研究的是指令執(zhí)行中各信號(hào)之間的相互關(guān)系。單片機(jī)本身就如一個(gè)復(fù)雜的同步時(shí)序電路,為了保證同步工作方式的實(shí)現(xiàn),電路應(yīng)在唯一的時(shí)鐘信號(hào)控制下嚴(yán)格地工作。通常在引腳XTALl和XTAL2跨接石英晶體和兩個(gè)補(bǔ)償電容構(gòu)成自激振蕩器,如圖4中X1、C1、C2??梢愿鶕?jù)情況選擇6MHz、12MHz或24MHz等頻率的石英晶體,補(bǔ)償電容通常選擇30nF左右的瓷片電容。圖4時(shí)鐘振蕩電路2.2.2計(jì)步器傳感器采集模塊ADXL345的內(nèi)部功能結(jié)構(gòu)如圖5所示,X、Y、Z三個(gè)相互正交的方向上的加速度由G-Cell傳感器感知,經(jīng)過容壓變換器、增益放大、濾波器和溫度補(bǔ)償后以電壓信號(hào)輸出。圖5ADXL345內(nèi)部結(jié)構(gòu)功能框圖所謂的G-Cell傳感器是由半導(dǎo)體材料(多晶硅)經(jīng)半導(dǎo)體工藝加工得到,其結(jié)構(gòu)可簡化為三塊電容極板,如圖6。兩端的極板圈定,中間的極板在加速度的作用下,偏離無加速度的位置,這樣它到兩端極板的距離發(fā)生變化,造成電容值的變化.這個(gè)變化值經(jīng)容壓變換、增益放大,濾波等后體現(xiàn)在最后的電壓輸出值上,從而完成對加速度的測量。圖6G-Cell傳感器的物理模型ADXL345的三個(gè)相互正交的測量方向如圖7,固定在人體上后,這三個(gè)方向上的數(shù)據(jù)意義也就隨之確定了。圖7ADXL345的三測量軸向引腳配置(頂視圖):圖8引腳功能圖ADXL345是一款小而薄的超低功耗3軸加速度計(jì),分辨率高(13位),測量范圍達(dá)±16g。數(shù)字輸出數(shù)據(jù)為16位二進(jìn)制補(bǔ)碼格式,可通過SPI(3線或4線)或I2C數(shù)字接口訪問。ADXL345非常適合移動(dòng)設(shè)備應(yīng)用。它可以在傾斜檢測應(yīng)用中測量靜態(tài)重力加速度,還可以測量運(yùn)動(dòng)或沖擊導(dǎo)致的動(dòng)態(tài)加速度。其高分辨率(3.9mg/LSB),能夠測量不到1.0°的傾斜角度變化。如圖9所示,為傳感器底座,接口電路連接:11234P111234P120.1uFC7XoutYoutZoutVCC1357911246101281314ADXL345SDOSDASCLVDDGNDGNDRESERESEINT2GNDNCVSCSINT1XoutZoutS1Yout圖9傳感器連接模塊此模塊電路主要功能就用于做ADXL345加速度傳感器的一個(gè)轉(zhuǎn)接口,而且利用ADXL345該加速度傳感器產(chǎn)生相應(yīng)的變化值。相當(dāng)于整個(gè)系統(tǒng)的信號(hào)產(chǎn)生模塊。2.2.3顯示模塊的設(shè)計(jì)本設(shè)計(jì)中由于要對時(shí)間進(jìn)行顯示,所以選擇液晶顯示屏1602模塊作為輸出。1602字符型LCD通常有14條引腳線或16條引腳線的LCD,多出來的2條線是背光電源線。它可以顯示兩行,每行16個(gè)字符,采用單+5V電源供電,外圍電路配置簡單,價(jià)格便宜,具有很高的性價(jià)比。1602液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器(CGROM)已經(jīng)存儲(chǔ)了160個(gè)不同的點(diǎn)陣字符圖形,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號(hào)等,每一個(gè)字符都有一個(gè)固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時(shí)模塊把地址41H中的點(diǎn)陣字符圖形顯示出來,就能看到字母“A”。管腳功能如表3所示:表3LCD1602引腳功能引腳符號(hào)功能說明1VSS一般接地2VDD接電源(+5V)3V0液晶顯示器對比度調(diào)整端。4RSRS為寄存器選擇。5R/WR/W為讀寫信號(hào)線。6EE(或EN)端為使能(enable)端,下降沿使能。7DB0~DB7三態(tài)、雙向數(shù)據(jù)總線LCD1602主要管腳介紹:V0為液晶顯示器對比度調(diào)整端,接正電源時(shí)對比度最弱,接地電源時(shí)對比度最高,對比度過高時(shí)會(huì)產(chǎn)生鬼影使用時(shí)可以通過一個(gè)10K的電位器調(diào)整對比度。RS為寄存器選擇端,高電平時(shí)選擇數(shù)據(jù)寄存器,低電平時(shí)選擇指令寄存器。R/W為讀寫信號(hào)線端,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫操作。當(dāng)RS和R/W共同為低電平時(shí)可以寫入指令或者顯示地址;當(dāng)RS為高電平R/W為低電平時(shí)可以寫入數(shù)據(jù)。E為使能端,當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。將LCD1602的RS端和P2.0,R/W端和P2.1,E端和P2.2相連,當(dāng)RS=0時(shí),對LCD1602寫入指令;當(dāng)RS=1時(shí),對LCD1602寫入數(shù)據(jù)。當(dāng)R/W端接高電平時(shí)芯片處于讀數(shù)據(jù)狀態(tài),反之處于寫數(shù)據(jù)狀態(tài),E端為使能信號(hào)端。當(dāng)R/W為高電平,E端也為高電平,RS為低電平時(shí),液晶顯示屏顯示需要顯示的示數(shù)。圖10為1602液晶顯示屏與單片機(jī)的硬件連接圖。圖10LCD液晶與單片機(jī)硬件連線圖3系統(tǒng)軟件設(shè)計(jì)3.1系統(tǒng)主程序設(shè)計(jì)圖11系統(tǒng)主程序流程圖3.2計(jì)步器算法的實(shí)現(xiàn)在可用于分析跑步或步行的特征當(dāng)中,我們選擇“加速度”作為相關(guān)參數(shù)。個(gè)體(及其相關(guān)軸)的運(yùn)動(dòng)包括三個(gè)分量,分別是前向(“滾動(dòng)”)、豎向(“偏航”)和側(cè)向(“俯仰”),如圖12所示。ADXL345檢測其三個(gè)軸—x、y和z上的加速度。計(jì)步器處于未知方向,因此測量精度不應(yīng)嚴(yán)重依賴于運(yùn)動(dòng)軸與加速度計(jì)測量軸之間的關(guān)系。圖12跑步時(shí)的三個(gè)分量讓我們考慮步行的特性。一個(gè)步伐,我們將其定義為單位步行周期,步行周期各階段與豎向和前向加速度變化之間有一定的關(guān)系。要實(shí)現(xiàn)檢測步數(shù)首先要對人走路的姿態(tài)有一定了解。行走時(shí),腳、腿、腰部,手臂都在運(yùn)動(dòng),它們的運(yùn)動(dòng)都會(huì)產(chǎn)生相應(yīng)的加速度,并且會(huì)在某點(diǎn)有一個(gè)峰值。從腳的加速度來檢測步數(shù)是最準(zhǔn)確的,但是考慮到攜帶的方便,我們選擇利用腰部的運(yùn)動(dòng)來檢測步數(shù)。圖13顯示了與一名跑步者的豎向、前向和側(cè)向加速度相對應(yīng)的x、y和z軸測量結(jié)果的典型圖樣。無論如何穿戴計(jì)步器,總有至少一個(gè)軸具有相對較大的周期性加速度變化,因此峰值檢測和針對所有三個(gè)軸上的加速度的動(dòng)態(tài)閾值決策算法對于檢測單位步行或跑步周期至關(guān)重要。圖13從一名跑步者測得的x、y和z軸加速度的典型圖樣(1)步伐參數(shù)數(shù)字濾波器:首先,為使信號(hào)波形變得平滑,需要一個(gè)數(shù)字濾波器??梢允褂盟膫€(gè)寄存器和一個(gè)求和單元,如圖14所示。當(dāng)然,可以使用更多寄存器以使加速度數(shù)據(jù)更加平滑,但響應(yīng)時(shí)間會(huì)變慢。圖14數(shù)字濾波器圖15顯示了來自一名步行者所戴計(jì)步器的最活躍軸的濾波數(shù)據(jù)。對于跑步者,峰峰值會(huì)更高。圖15最活躍軸的濾波數(shù)據(jù)動(dòng)態(tài)閾值和動(dòng)態(tài)精度:系統(tǒng)持續(xù)更新三軸加速度的最大值和最小值,每采樣50次更新一次。平均值(Max+Min)/2稱為“動(dòng)態(tài)閾值”。接下來的50次采樣利用此閾值判斷個(gè)體是否邁出步伐。由于此閾值每50次采樣更新一次,因此它是動(dòng)態(tài)的。這種選擇具有自適應(yīng)性,并且足夠快。除動(dòng)態(tài)閾值外,還利用動(dòng)態(tài)精度來執(zhí)行進(jìn)一步濾波。步伐邁出的條件定義為:當(dāng)加速度曲線跨過動(dòng)態(tài)閾值下方時(shí),加速度曲線的斜率為負(fù)值(sample_new<sample_old)。峰值檢測:步伐計(jì)數(shù)器根據(jù)x、y、z三軸中加速度變化最大的一個(gè)軸計(jì)算步數(shù)。如果加速度變化太小,步伐計(jì)數(shù)器將忽略。步伐計(jì)數(shù)器利用此算法可以很好地工作,但有時(shí)顯得太敏感。當(dāng)計(jì)步器因?yàn)椴叫谢蚺懿街獾脑蚨浅Q杆倩蚍浅>徛卣駝?dòng)時(shí),步伐計(jì)數(shù)器也會(huì)認(rèn)為它是步伐。為了找到真正的有節(jié)奏的步伐,必須排除這種無效振動(dòng)。利用“時(shí)間窗口”和“計(jì)數(shù)規(guī)則”可以解決這個(gè)問題?!皶r(shí)間窗口”用于排除無效振動(dòng)。假設(shè)人們最快的跑步速度為每秒5步,最慢的步行速度為每2秒1步。這樣,兩個(gè)有效步伐的時(shí)間間隔在時(shí)間窗口[0.2s-2.0s]之內(nèi),時(shí)間間隔超出該時(shí)間窗口的所有步伐都應(yīng)被排除。ADXL345的用戶可選輸出數(shù)據(jù)速率特性有助于實(shí)現(xiàn)時(shí)間窗口。表4列出了TA=25°C、VS=2.5V、VDDI/O=1.8V時(shí)的可配置數(shù)據(jù)速率(以及功耗)。表4數(shù)據(jù)速率和功耗輸出數(shù)據(jù)速率(Hz)帶寬(Hz)速率代碼IDD(μA)32001600111114616008001110100800400110114540020011001452001001011145100501010145502510011002512.510006512.56.250111556.253.125011040此算法使用50Hz數(shù)據(jù)速率(20ms)。采用interval的寄存器記錄兩步之間的數(shù)據(jù)更新次數(shù)。如果間隔值在10與100之間,則說明兩步之間的時(shí)間在有效窗口之內(nèi);否則,時(shí)間間隔在時(shí)間窗口之外,步伐無效?!坝?jì)數(shù)規(guī)則”用于確定步伐是否是一個(gè)節(jié)奏模式的一部分。步伐計(jì)數(shù)器有兩個(gè)工作狀態(tài):搜索規(guī)則和確認(rèn)規(guī)則。步伐計(jì)數(shù)器以搜索規(guī)則模式開始工作。假設(shè)經(jīng)過四個(gè)連續(xù)有效步伐之后,發(fā)現(xiàn)存在某種規(guī)則(inregulation),那么步伐計(jì)數(shù)器就會(huì)刷新和顯示結(jié)果,并進(jìn)入“確認(rèn)規(guī)則”工作模式。在這種模式下工作時(shí),每經(jīng)過一個(gè)有效步伐,步伐計(jì)數(shù)器就會(huì)更新一次。但是,如果發(fā)現(xiàn)哪怕一個(gè)無效步伐,步伐計(jì)數(shù)器就會(huì)返回搜索規(guī)則模式,重新搜索四個(gè)連續(xù)有效步伐。3.3系統(tǒng)程序的編譯 編譯是對程序進(jìn)行查找錯(cuò)誤的過程,在編譯之前需要對keil軟件進(jìn)行設(shè)置,首先建立一個(gè)工程,保存該工程時(shí)選擇與自己硬件相同的單片機(jī)型號(hào)。然后新建文件,編寫完程序,保存時(shí)為后綴為“.c”。點(diǎn)擊編譯按鈕,若出現(xiàn)錯(cuò)誤,則修改錯(cuò)誤,若無錯(cuò),則生成“.hex”文件,以供仿真與硬件使用。編譯軟件如圖16所示。圖16系統(tǒng)程序的編譯圖3.4系統(tǒng)電路軟件仿真系統(tǒng)仿真需要在proteus軟件里進(jìn)行,在仿真之前,要先設(shè)計(jì)好系統(tǒng)電路以及元器件各自的參數(shù),在proteus里面找到元器件并連接好電路。同時(shí)設(shè)置它們的參數(shù)。并且用調(diào)試助手將程序燒錄到單片機(jī)中,進(jìn)行仿真。調(diào)試助手界面如圖17所示。仿真圖如圖18。圖17調(diào)試助手界面圖單片主控電路電源接口電路LCD1602液晶接口按鍵電路圖18系統(tǒng)仿真圖4系統(tǒng)硬件電路的測試如表5為在實(shí)際步數(shù)中顯示步數(shù)以及總步數(shù)不復(fù)位情況下記錄。下圖表6為在實(shí)際步數(shù)中顯示步數(shù)每5步復(fù)位一次總步數(shù)不復(fù)位情況下記錄。由圖可得到實(shí)物對步數(shù)統(tǒng)計(jì)準(zhǔn)確率在90%以上。表5實(shí)際測試不復(fù)位記錄表實(shí)際步數(shù)51015202530顯示步數(shù)5914182227總步數(shù)5914182227表6實(shí)際測試每5步復(fù)位一次實(shí)際步數(shù)51015202530顯示步數(shù)454555總步數(shù)4913182328基于ADXL345的計(jì)步器的電路比較復(fù)雜,對于焊接方面不可輕視,需要有一定的焊接基礎(chǔ)和嘗試,只要電路系統(tǒng)中出于一處的錯(cuò)誤,就會(huì)對檢測造成很大的不便,而且電路的交線較多,所以在焊接的時(shí)候要邊焊接,邊檢測是否有電路,斷路,跳線情況發(fā)生,如果有,則要及時(shí)修正,否則會(huì)對續(xù)后的電路焊接造成極大地困難。對于各種鋒利的引腳要注意處理,否則會(huì)刺破帶有包皮的導(dǎo)線,則會(huì)對電路造成短路現(xiàn)象。在本次課題的設(shè)計(jì)調(diào)試中遇到了很多的問題?;叵脒@些問題只要認(rèn)真多思考都是可以避免的,以下為主要的問題:(1)在顯示步數(shù)、總步數(shù)、路程以及卡路里有時(shí)LCD液晶顯示屏被屏蔽掉,造成不亮現(xiàn)象。解決:根據(jù)儀器的測試,發(fā)現(xiàn)電路的驅(qū)動(dòng)能力不足,在接入2.4K的上拉電阻后,電路的驅(qū)動(dòng)能力才能滿足,即可解決不亮現(xiàn)象。(2)燒入程序后,LCD液晶顯示屏不顯示或者亮度不好。解決:不顯示時(shí)首先使用萬用表對電路進(jìn)行測試,觀察是否存在漏焊,虛焊,或者元件損壞的現(xiàn)象。若無此問題查看燒寫的程序是否正確無誤,對程序進(jìn)行認(rèn)真修改。當(dāng)顯示亮度不好時(shí)一遍旋轉(zhuǎn)10K歐的滑動(dòng)變阻器,一遍觀看LCD顯示屏,直到看到合適的亮度為止。經(jīng)過多次的反復(fù)調(diào)試試與分析,可以對電路的原理及功能更加熟悉,同時(shí)提高了設(shè)計(jì)能力與及對電路的分析能力。同時(shí)在軟件的編程方面得到更到的提高,對編程能力得到加強(qiáng),同時(shí)對所學(xué)的知識(shí)得到很大的提高與鞏固。如下為硬件實(shí)物圖如圖18所示。計(jì)步器工作時(shí)的實(shí)物圖如圖19所示。圖18計(jì)步器實(shí)物圖圖19計(jì)步器工作時(shí)的實(shí)物圖5結(jié)論及進(jìn)一步設(shè)想至此,關(guān)于課程設(shè)計(jì)的所有內(nèi)容就介紹完了,進(jìn)行這次課程設(shè)計(jì)一切都是從零開始,從最簡單查資料、了解各個(gè)元件的功能起步,再確定設(shè)計(jì)方案、畫流程圖、編寫程序到最后進(jìn)行仿真,這次課題設(shè)計(jì)可以說成功完成。系統(tǒng)的硬件、軟件設(shè)計(jì)合理,功能完備,運(yùn)行穩(wěn)定、可靠。實(shí)驗(yàn)結(jié)果表明此系統(tǒng)實(shí)現(xiàn)后具有讀取方便、顯示直觀、功能多樣、電路簡潔、等諸多優(yōu)點(diǎn),符合電子儀器儀表的發(fā)展趨勢,具有廣闊的市場前景。在整個(gè)設(shè)計(jì)過程中,充分發(fā)揮了人的主觀能動(dòng)性,自主學(xué)習(xí),學(xué)到了許多沒學(xué)到的知識(shí)。程序編寫中,由于思路不清晰,開始時(shí)遇到了很多的問題,經(jīng)過靜下心來思考查資料,和同學(xué)討論,向老師請教,理清了思路,完成對程序的編寫。通過設(shè)計(jì)提高了對單片機(jī)的認(rèn)識(shí),進(jìn)一步熟悉和掌握單片機(jī)的結(jié)構(gòu)及工作原理。通過實(shí)際程序設(shè)計(jì)和調(diào)試,逐步掌握模塊化程序設(shè)計(jì)方法和調(diào)試技術(shù),提高軟件設(shè)計(jì)、調(diào)試能力;通過這次設(shè)計(jì)熟悉以單片機(jī)核心的應(yīng)用系統(tǒng)開發(fā)的全過程,掌握硬件電路設(shè)計(jì)的基本方法和技術(shù),掌握相關(guān)電路參數(shù)的計(jì)算方法。最終較好的完成了設(shè)計(jì),達(dá)到了預(yù)期的目的,完了最初的設(shè)想。但是由于時(shí)間和個(gè)人能力的原因,整個(gè)系統(tǒng)看起來還是顯得非常的簡單,只實(shí)現(xiàn)了一些最基本的功能,還有許多不足和可以擴(kuò)展的地方。由于LCD1602還有剩余位置可以顯示其他字符,我們可以在系統(tǒng)中加入時(shí)鐘芯片,可以實(shí)時(shí)顯示時(shí)間,消除從手機(jī)上看時(shí)間的麻煩。也可以加入濕度傳感器,實(shí)時(shí)監(jiān)測環(huán)境濕度并顯示,或者也可以加入煙霧傳感器、等組成綜合系統(tǒng),使該系統(tǒng)在起到計(jì)步器的作用外還可以起到提醒人們適不適合戶外運(yùn)動(dòng)的作用。所以,該拓展部分是非常有價(jià)值,且非常有必要的。參考文獻(xiàn)[1]曹赟,周宇,徐寅林.加速度傳感器在步態(tài)信號(hào)采集系統(tǒng)中的應(yīng)用[J].信息化研究,2009,35(9).[2]錢朋安,葛運(yùn)建,唐毅等.加速度計(jì)在人體運(yùn)動(dòng)檢測中的應(yīng)用[J].計(jì)算機(jī)技術(shù)與應(yīng)用進(jìn)展,2004:632—636.[3]陳義華.基于加速度傳感器的定位系統(tǒng)研究[D].福建:廈門大學(xué),2006.[4]孟維國.三軸加速度計(jì)ADXL345的特點(diǎn)及其應(yīng)用[J].電子設(shè)計(jì)工程,2007(2):47-50.[5]賈朱紅,張曉冬.基于I2C總線的單主多從單片機(jī)之問的通信[J].微計(jì)算機(jī)信息,2009,25(3-2):101.[6]高吉祥.模擬電子線路設(shè)計(jì)[M].北京:北京電子工業(yè)出版社,2007.[7]陳爾紹.電子控制電路實(shí)例[M].北京:電子工業(yè)出版社,2004.[8]王彥朋.大學(xué)生電子設(shè)計(jì)與應(yīng)用[M].北京:中國電力出版社,2007.[9]屈翠香,李剛.具有數(shù)字信號(hào)輸出的三軸加速度傳感器ADXL345[J].國外電子元器件,1999(8):8—12.[10]彭勃,何曉平,蘇偉.微機(jī)械靜電伺服加速度計(jì)[J].中國慣性技術(shù)學(xué)報(bào),2000,8(1):63—66.[11]劉宗林,李圣怡,吳學(xué)忠.新型三軸加速度計(jì)[J].傳感器技術(shù)學(xué)報(bào),2004,17(3):488—492.課設(shè)體會(huì)兩周的課程設(shè)計(jì)結(jié)束了,在這次課程設(shè)計(jì)里確實(shí)感到收貨頗豐。從課設(shè)一開始課設(shè)題目的分析,選擇最佳方案,到后來的程序的編寫,proteus仿真,以及到最后的硬件電路的焊接,每一個(gè)環(huán)節(jié)都讓我能學(xué)到很多之前從未學(xué)到的知識(shí)和技能。本次課程設(shè)計(jì)是一個(gè)比較綜合的課程設(shè)計(jì),包含數(shù)字電路,模擬電路,電路,單片機(jī)等相關(guān)課程的知識(shí),由于我之前對這些課程的知識(shí)的掌握并不是特別扎實(shí),所以在做課設(shè)的過程中遇到很多阻礙,但通過圖書館查資料,網(wǎng)上搜尋,同學(xué)幫助等途徑都得到了一一解決,在此要特別感謝幫助我的老師和同學(xué)的制導(dǎo)。由于本次課設(shè)中所用到的液晶顯示器和加速度傳感器之前從未通透的學(xué)過,在做課設(shè)之前都重新學(xué),這個(gè)獨(dú)立學(xué)習(xí)的過程是非常令人難忘的。本次課設(shè)需要焊接硬件,這就需要有一定的焊接基礎(chǔ),之前學(xué)過一點(diǎn)焊接知識(shí),在本次課設(shè)中完全運(yùn)用上了,雖然焊接不是很完美,但也沒出現(xiàn)很嚴(yán)重的錯(cuò)誤。通過本次課設(shè),我明白了我們需要學(xué)習(xí)的知識(shí)還有很多,需要腳踏實(shí)地,扎實(shí)的掌握本專業(yè)的知識(shí),除此之外,還要學(xué)習(xí)其他知識(shí),全面學(xué)習(xí),才能在以后生活工作中減少不必要的麻煩。[2016年1月15日完成]附錄1電路原理圖附錄2程序清單#include<REG51.H> #include<INTRINS.H>#defineucharunsignedchar#defineuintunsignedint #defineDataPortP0//LCD1602數(shù)據(jù)端口sbit SCL=P1^5;//IIC時(shí)鐘引腳定義;sbit SDA=P1^4;//IIC數(shù)據(jù)引腳定義ucharcodetable_num[]="0123456789abcdefg";/************LCD1602設(shè)置*************/sbitrs=P1^0; //寄存器選擇信號(hào)H:數(shù)據(jù)寄存器 L:指令寄存器sbitrw=P1^1; //寄存器選擇信號(hào)H:數(shù)據(jù)寄存器 L:指令寄存器sbite=P1^2; //片選信號(hào)下降沿觸發(fā) /************清零按鍵設(shè)置********/sbitkey1=P1^6;sbitkey2=P1^7;sbitkey3=P1^3;#define SlaveAddress0xA6 /*定義器件在IIC總線中的從地址,根據(jù)ALTADDRESS地址引腳不同修改ALTADDRESS引腳接地時(shí)地址為0xA6,接電源時(shí)地址為0x3A*/longbushu,zong;//步數(shù)ucharBUF[8];//接收數(shù)據(jù)緩存區(qū) ucharge,shi,bai,qian,wan;//顯示變量intdis_data;//變量intc;ints;inth=30.5;voidMultiple_Read_ADXL345();//連續(xù)的讀取內(nèi)部寄存器數(shù)據(jù)#defineRdCommand0x01//定義ISP的操作命令#definePrgCommand0x02#defineEraseCommand0x03#defineError1#defineOk0#defineWaitTime0x01//定義CPU的等待時(shí)間sfrISP_DATA=0xe2;//寄存器申明sfrISP_ADDRH=0xe3;sfrISP_ADDRL=0xe4;sfrISP_CMD=0xe5;sfrISP_TRIG=0xe6;sfrISP_CONTR=0xe7;uchara_a;/**************打開ISP,IAP功能**********/voidISP_IAP_enable(void){ EA=0;//關(guān)中斷 ISP_CONTR=ISP_CONTR&0x18;//0001,1000 ISP_CONTR=ISP_CONTR|WaitTime;//寫入硬件延時(shí) ISP_CONTR=ISP_CONTR|0x80;//ISPEN=1}/**************關(guān)閉ISP,IAP功能****************/voidISP_IAP_disable(void){ ISP_CONTR=ISP_CONTR&0x7f;//ISPEN=0 ISP_TRIG=0x00; EA=1;//開中斷}/*****************公用的觸發(fā)代碼**********/voidISPgoon(void){ ISP_IAP_enable();//打開ISP,IAP功能 ISP_TRIG=0x46;//觸發(fā)ISP_IAP命令字節(jié)1 ISP_TRIG=0xb9;//觸發(fā)ISP_IAP命令字節(jié)2 _nop_();}/**********字節(jié)讀************/unsignedcharbyte_read(unsignedintbyte_addr){ EA=0; ISP_ADDRH=(unsignedchar)(byte_addr>>8);//地址賦值 ISP_ADDRL=(unsignedchar)(byte_addr&0x00ff); ISP_CMD=ISP_CMD&0xf8;//清除低3位 ISP_CMD=ISP_CMD|RdCommand;//寫入讀命令 ISPgoon();//觸發(fā)執(zhí)行 ISP_IAP_disable//關(guān)閉ISP,IAP功能 EA=1; return(ISP_DATA);//返回讀到的數(shù)據(jù)}/************扇區(qū)擦除************/voidSectorErase(unsignedintsector_addr){ unsignedintiSectorAddr; iSectorAddr=(sector_addr&0xfe00);//取扇區(qū)地址 ISP_ADDRH=(unsignedchar)(iSectorAddr>>8); ISP_ADDRL=0x00; ISP_CMD=ISP_CMD&0xf8;//清空低3位 ISP_CMD=ISP_CMD|EraseCommand;//擦除命令3 ISPgoon();//觸發(fā)執(zhí)行 ISP_IAP_disable();//關(guān)閉ISP,IAP功能}/**********字節(jié)寫********/voidbyte_write(unsignedintbyte_addr,unsignedcharoriginal_data){ EA=0;// SectorErase(byte_addr); ISP_ADDRH=(unsignedchar)(byte_addr>>8);//取地址 ISP_ADDRL=(unsignedchar)(byte_addr&0x00ff); ISP_CMD=ISP_CMD&0xf8;//清低3位 ISP_CMD=ISP_CMD|PrgCommand;//寫命令2 ISP_DATA=original_data;//寫入數(shù)據(jù)準(zhǔn)備 ISPgoon();//觸發(fā)執(zhí)行 ISP_IAP_disable();//關(guān)閉IAP功能 EA=1;}/**********把數(shù)據(jù)保存到單片機(jī)內(nèi)部eeprom中**************/voidwrite_eeprom() //保存數(shù)據(jù){ SectorErase(0x2000); byte_write(0x2000,bushu); byte_write(0x2001,bushu>>8); byte_write(0x2002,bushu>>16); byte_write(0x2003,zong); byte_write(0x2004,zong>>8); byte_write(0x2005,zong>>16); byte_write(0x2055,a_a); }/******************把數(shù)據(jù)從單片機(jī)內(nèi)部eeprom中讀出來*****************/voidread_eeprom() //讀出保存數(shù)據(jù){ bushu=byte_read(0x2002); bushu<<=8; bushu|=byte_read(0x2001); bushu<<=8; bushu|=byte_read(0x2000); zong=byte_read(0x2005); zong<<=8; zong|=byte_read(0x2004); zong<<=8; zong|=byte_read(0x2003); a_a=byte_read(0x2055);}/**************開機(jī)自檢eeprom初始化*****************/voidinit_eeprom() //開始初始化保存的數(shù)據(jù){ read_eeprom(); //讀出保存數(shù)據(jù) if(a_a!=14) //新的單片機(jī)初始單片機(jī)內(nèi)問eeprom { zong=0; bushu=0; a_a=14; write_eeprom(); //保存數(shù)據(jù) } }voidconversion(uinttemp_data){wan=temp_data/10000+0x30;temp_data=temp_data%10000;//取余運(yùn)算 qian=temp_data/1000+0x30;temp_data=temp_data%1000;//取余運(yùn)算bai=temp_data/100+0x30;temp_data=temp_data%100;//取余運(yùn)算shi=temp_data/10+0x30;temp_data=temp_data%10;//取余運(yùn)算ge=temp_data+0x30; }voiddelay_1ms(uintq){ uinti,j; for(i=0;i<q;i++) for(j=0;j<120;j++);}voiddelay_uint(uintq){ while(q--);}voidwrite_com(ucharcom){ e=0; rs=0; rw=0; P0=com; delay_uint(25); e=1; delay_uint(100); e=0;}voidwrite_data(uchardat){ e=0; rs=1; rw=0; P0=dat; delay_uint(25); e=1; delay_uint(100); e=0; }/***********lcd1602上顯示十進(jìn)制數(shù)************/voidwrite_bushu(ucharhang,ucharadd,longdate){ if(hang==1) write_com(0x80+add); else write_com(0x80+0x40+add); if(date>=1000000) write_data(0x30+date/1000000%10); if(date>=100000) write_data(0x30+date/100000%10); if(date>=10000) write_data(0x30+date/10000%10); if(date>=1000) write_data(0x30+date/1000%10); if(date>=100) write_data(0x30+date/100%10); if(date>=10) write_data(0x30+date/10%10); write_data(0x30+date%10); }/*************lcd1602上顯示這字符函數(shù)**************/voidwrite_string(ucharhang,ucharadd,uchar*p){ if(hang==1) write_com(0x80+add); else write_com(0x80+0x40+add); while(1) { if(*p=='\0')break; write_data(*p); p++; } } /***********lcd1602初始化設(shè)置*************/voidinit_1602() //lcd1602初始化{ write_com(0x38); write_com(0x0c); write_com(0x06); delay_uint(1000); write_string(1,0,"B:0Z:0"); write_string(2,0,"S:0C:0"); }/**********lcd1602上顯示特定的字符***********/voidwrite_zifu(ucharhang,ucharadd,uchardate){ if(hang==1) write_com(0x80+add); else write_com(0x80+0x40+add); write_data(date); }voidDelay5us(){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();}voidDelay5ms(){uintn=560;while(n--);}/*********起始信號(hào)************/voidADXL345_Start(){SDA=1;//拉高數(shù)據(jù)線SCL=1;//拉高時(shí)鐘線Delay5us();//延時(shí)SDA=0;//產(chǎn)生下降沿Delay5us();//延時(shí)SCL=0;//拉低時(shí)鐘線}/******停止信號(hào)********/voidADXL345_Stop(){SDA=0;//拉低數(shù)據(jù)線SCL=1;//拉高時(shí)鐘線Delay5us();//延時(shí)SDA=1;//產(chǎn)生上升沿Delay5us();//延時(shí)}/********發(fā)送應(yīng)答信號(hào)入口參數(shù):ack(0:ACK1:NAK)**********/voidADXL345_SendACK(bitack){SDA=ack;//寫應(yīng)答信號(hào)SCL=1;//拉高時(shí)鐘線Delay5us();//延時(shí)SCL=0;//拉低時(shí)鐘線Delay5us();//延時(shí)}/**************************************接收應(yīng)答信號(hào)**************************************/bitADXL345_RecvACK(){SCL=1;//拉高時(shí)鐘線Delay5us();//延時(shí)CY=SDA;//讀應(yīng)答信號(hào)SCL=0;//拉低時(shí)鐘線Delay5us();//延時(shí)returnCY;}/**************************************向IIC總線發(fā)送一個(gè)字節(jié)數(shù)據(jù)**************************************/voidADXL345_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í)}ADXL345_RecvACK();}/*************從IIC總線接收一個(gè)字節(jié)數(shù)據(jù)*******/ucharADXL345_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;}//******單字節(jié)寫入***********//voidSingle_Write_ADXL345(ucharREG_Address,ucharREG_data){ADXL345_Start();//起始信號(hào)ADXL345_SendByte(SlaveAddress);//發(fā)送設(shè)備地址+寫信號(hào)ADXL345_SendByte(REG_Address);//內(nèi)部寄存器地址,參考中文pdf22頁ADXL345_SendByte(REG_data);//內(nèi)部寄存器數(shù)據(jù),參考中文pdf22頁ADXL345_Stop();//發(fā)送停止信號(hào)}//********單字節(jié)讀取************//ucharSingle_Read_ADXL345(ucharREG_Address){ucharREG_data;ADXL345_Start();//起始信號(hào)ADXL345_SendByte(SlaveAddress);//發(fā)送設(shè)備地址+寫信號(hào)ADXL345_SendByte(REG_Address);//發(fā)送存儲(chǔ)單元地址,從0開始 ADXL345_Start();//起始信號(hào)ADXL345_SendByte(SlaveAddress+1);//發(fā)送設(shè)備地址+讀信號(hào)REG_data=ADXL345_RecvByte();//讀出寄存器數(shù)據(jù) ADXL345_SendACK(1); ADXL345_Stop();//停止信號(hào)returnREG_data;}//*****連續(xù)讀出ADXL345內(nèi)部加速度數(shù)據(jù),地址范圍0x32~0x37*****//voidMultiple_read_ADXL345(void){uchari;ADXL345_Start();//起始信號(hào)ADXL345_SendByte(SlaveAddress);//發(fā)送設(shè)備地址+寫信號(hào)ADXL345_SendByte(0x32);//發(fā)送存儲(chǔ)單元地址,從0x32開始 ADXL345_Start();//起始信號(hào)ADXL345_SendByte(SlaveAddress+1);//發(fā)送設(shè)備地址+讀信號(hào) for(i=0;i<6;i++)//連續(xù)讀取6個(gè)地址數(shù)據(jù),存儲(chǔ)中BUF{BUF[i]=ADXL345_RecvByte();//BUF[0]存儲(chǔ)0x32地址中的數(shù)據(jù)if(i==5){ADXL345_SendACK(1);//最后一個(gè)數(shù)據(jù)需要回NOACK}else{ADXL345_SendACK(0);//回應(yīng)ACK}}ADXL345_Stop();//停止信號(hào)Delay5ms();}//******初始化ADXL345,根據(jù)需要請參考pdf進(jìn)行修改***//voidInit_ADXL345(){Single_Write_ADXL345(0x31,0x0B);//測量范圍,正負(fù)16g,13位模式Single_Write_ADXL345(0x2C,0x08);//速率設(shè)定為12.5參考pdf13頁Single_Write_ADXL345(0x2D,0x08);//選擇電源模式參考pdf24頁Single_Write_ADXL345(0x2E,0x80);//使能DATA_READY中斷Single_Write_ADXL345(0x1E,0x00);//X偏移量根據(jù)測試傳感器的狀態(tài)寫入pdf29頁

溫馨提示

  • 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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論