基于AVR單片機(jī)的自行車行車記錄儀,包括軟硬件具體方案
1. 引言
自行車行車記錄儀(以下簡稱碼表)在國內(nèi)外已經(jīng)有了廣泛的應(yīng)用,但是不管是國外的還是國產(chǎn)的碼表都存在著很多缺點。
首先,對于國產(chǎn)碼表來說,缺點主要有:
安裝相當(dāng)麻煩,根據(jù)使用者評價,一般安裝需要半小時以上,而國外的進(jìn)口碼表則只要5分鐘即可安裝完畢,所以在設(shè)計該碼表時需要在這方面進(jìn)行改進(jìn)。
即時速度顯示混亂,其實這是計算精度不夠造成,速度高于25M/S以后(特別是30M/S以后)當(dāng)前速度就開始有波動,速度越快波動越大,這個問題還導(dǎo)致最高速度不可信,所以在設(shè)計時選擇的CPU必須是具有較高計算速度,且實時性能較好的,這里選用了AVR的MEGA64高性能8位單片機(jī),此單片機(jī)資源豐富,最高速度可以達(dá)到16MIPS/S。
里程和速度的清零功能未能真正實現(xiàn),它不能像國外的SIGMA那樣清除指定的數(shù)據(jù),而是全部清零重置,連總里程和時鐘都清零了,所以這個設(shè)計也是非常的失敗的,需要改進(jìn)。
時鐘不準(zhǔn),根據(jù)大部分使用者的反應(yīng),一個月快了差不多半小時。
某些國產(chǎn)表的輪徑設(shè)置最小只能適應(yīng)20*2.0cm的輪胎,也就是說折疊車基本用不上,這點也是需要改進(jìn)的。
最后一點對于普通用戶來說都是比較反感的,說明書以及液晶上的顯示都是全英文的,而且液晶顯示簡單,說明書也只是一個小紙片而已,對自行車碼表沒點了解、沒有點鉆研精神還不一定能搞清里面的功能和用法。
再次,對于外國的碼表來說,觀點主要有以下:
除了以上的第六個缺點以外,其它缺點基本都是不存在的,但是一個比較致命的要害是價格高,一般的消費(fèi)群體買不起。就拿比較出名的德國品牌sigma,最便宜的到70多,但是功能實在單一。而功能強(qiáng)大,性能又好的則貴至好幾百元,上千元不等,型號很多,價格范圍波動也很大。
最后,總結(jié)出不管是國內(nèi)還是國外碼表,都存在以下缺點:
顯示都是英文,對于一般的用戶使用比較的不方便,而且安裝較麻煩,初始化設(shè)置十分的繁瑣。
功能單一,一般便宜的碼表,往往只具備速度的記錄,行車總里程,行車總時間的記錄等等,并且通過液晶查看,不能有效的統(tǒng)一歷史數(shù)據(jù),或者只能查閱近幾天的歷史數(shù)據(jù)。
實現(xiàn)該系統(tǒng)所需要的知識如下:
單片機(jī)C語言編程;IIC,單總線等串行總線編程;模塊化程序設(shè)計;霍爾傳感器原理及實現(xiàn)方法;液晶顯示編程;打印機(jī)實現(xiàn)原理;protel畫原理圖以及畫PCB等。
核心元件,單片機(jī),這里選擇ATMEL公司的8位中高端單片機(jī)Atmega64,選擇它的理由主要有以下幾點:
在存儲方面,使用的是ATMEL公司的AT24LC64 EEPROM存儲器,該存儲器走的是IIC(ATMEL公司開發(fā)的兩線串行總線)總線模式,雖然可以用一般的單片機(jī)模擬IIC總線,但是為了提高效率則必須選擇具有IIC總線接口的單片機(jī),這個一般的51單片機(jī)已經(jīng)不能滿足,所以需考慮其它單片機(jī)。
打印機(jī)模塊,有下面的打印機(jī)實現(xiàn)原理(圖4.5)可知,我們必須選擇具有雙邊沿觸發(fā)的單片機(jī),有這個功能的單片機(jī)ATMEL的AVR系列的中高端單片機(jī)能滿足,比如Atmega64及以上的單片機(jī)都具有這一功能。
霍爾傳感器,霍爾傳感器測速必須具有兩個內(nèi)置外設(shè),一個是外部下降沿中斷,一個是內(nèi)部定時器,Atmega64也能很好的滿足。
內(nèi)存空間要求:在做用戶界面以及制作貪吃蛇等游戲時都必須開很大的緩存,所以必須具備一定的內(nèi)存容量,初步估計需要2K內(nèi)存以上,而Atmega64擁有4K內(nèi)存,能夠完全滿足。
更重要的是,這款單片機(jī)價格便宜,只要20余元便能購置一片,所以選擇這個單片機(jī)時比較合適的。
下面將從硬件系統(tǒng),軟件系統(tǒng),各個模塊的實現(xiàn)原理,軟硬件調(diào)試這幾個方面來詳細(xì)的講述這一個系統(tǒng)。
2. 系統(tǒng)框架
2.1 系統(tǒng)框架結(jié)構(gòu)圖
系統(tǒng)框架結(jié)構(gòu)圖如圖2.1所示
圖2.1 系統(tǒng)框架圖
2.1.2 主控板
如上圖2.1所示,主控板為系統(tǒng)核心,主要包含單片機(jī)ATmega64(ATEML公司8位中高端單片機(jī))以及,各個模塊接口。
2.1.3 打印機(jī)
如上圖2.1所示,打印機(jī)模塊需要一個驅(qū)動板以及一個打印機(jī)模塊,打印機(jī)為EPSON公司的M-150II微型打點打印機(jī),一行可以打96個點。
2.1.4 存儲模塊
如上圖2.1所示,存儲模塊用的是ATMEL公司的AT24LC64 EEPROM(電可擦除編寫存儲器)存儲器,大小一共是8千字節(jié)。
2.1.5 溫度傳感器
如上圖2.1所示,溫度傳感器用的達(dá)拉斯公司的DS18B20單總線數(shù)字溫度傳感器,支持多個掛同一條總線,且測試溫度較準(zhǔn)。
2.1.6 霍爾傳感器
如上圖2.1所示,霍爾傳感器使用的是A3144先行霍爾元件,在下面的第三章,硬件設(shè)計中將看到對霍爾傳感器的改良。
2.1.7 液晶顯示器
如上圖2.1所示,液晶顯示器使用的STN7920控制器的12864液晶顯示器,該液晶寬128個點,高64個點,故名12864,并且自帶中文字庫,可顯示區(qū)域大。
2.2 解決的主要內(nèi)容
如何利用好強(qiáng)大的MEGA64單片機(jī)資源而不浪費(fèi),以及充分理解該單片機(jī)相關(guān)的控制單元內(nèi)在的物理邏輯,由此才能深入的理解單片機(jī)的運(yùn)行以及啟動過程,并發(fā)現(xiàn)問題時能得到及時解決。
行車記錄儀的硬件設(shè)計— 記錄儀總共涉及到溫度,時間,電源,液晶,打印機(jī)等多個模塊組成,在設(shè)計硬件時需要充分考慮到各種干擾,美觀度等因素。
多層菜單設(shè)計— 多層菜單是一個比較復(fù)雜的邏輯,如果設(shè)計不好會導(dǎo)致整個工程的混亂,使代碼變得難于理解,甚至不能繼續(xù)接下去的工作,所以多層菜單設(shè)計需要一個較好的算法來實現(xiàn)它。
各種總線協(xié)議驅(qū)動— 單片機(jī)內(nèi)置IIC,SPI等總線協(xié)議,在溫度獲取,flash存儲中等都需要用到這些總線,所以這些總線協(xié)議的驅(qū)動也是比較關(guān)鍵的。
打印機(jī)驅(qū)動電路— 在本設(shè)計中,用到了EPSON的M-150II打印機(jī),其工作電流大,需要專門的硬件驅(qū)動電路,在設(shè)計這一塊電路時,必須做好和主控板(記錄儀)的接口,以方便用戶進(jìn)行數(shù)據(jù)導(dǎo)出和統(tǒng)計。
2.3 實現(xiàn)的主要功能
顯示實時速度和平均速度
顯示總里程和單次行車?yán)锍?/p>
顯示時間和溫度
節(jié)電保護(hù)
行車信息存儲
用戶菜單UI界面
時間修改
輪徑設(shè)置,里程設(shè)置,等一些參數(shù)的設(shè)置
打印行車記錄統(tǒng)計信息
貪吃蛇小游戲
3. 硬件系統(tǒng)設(shè)計
3.1 主控板
主控板主要包括:CPU,Atmega64;時鐘芯片,DS1302;存儲芯片,24LC64;JTAG在線仿真接口;中斷獨立按鍵模塊;LED調(diào)試電路;12864液晶顯示接口;DS18B20溫度傳感器接口;霍爾傳感器接口;打印機(jī)驅(qū)動板接口。
對單片機(jī)的選擇主要有以下要求:
在存儲方面,使用的是ATMEL公司的AT24LC64 EEPROM存儲器,該小存儲器走的是IIC總線模式,雖然可以用一般的單片機(jī)模擬IIC總線,但是為了提高效率則必須選擇具有IIC總線接口的單片機(jī),這個一般的51單片機(jī)已經(jīng)不能滿足,所以需考慮其它單片機(jī)。
時鐘模塊,用的是達(dá)拉斯的DS1302芯片,只需普通的端口操作就能完成。
打印機(jī)模塊,有下面的打印機(jī)實現(xiàn)原理可知,我們必須選擇具有雙邊沿觸發(fā)的單片機(jī),有這個功能的單片機(jī)ATMEL的AVR系列的中高端單片機(jī)能滿足,比如Atmega64及以上的單片機(jī)都具有這一功能。
霍爾傳感器,霍爾傳感器測速必須具有兩個內(nèi)置外設(shè),一個是外部下降沿中斷,一個是內(nèi)部定時器。
內(nèi)存空間要求:在做用戶界面以及制作貪吃蛇等游戲時都必須開很大的緩存,所以必須具備一定的內(nèi)存容量,初步估計需要2K內(nèi)存以上。
由以上幾點分析,這里我選擇了ATMEL公司的AVR系列單片機(jī)Atmega64,該款單片機(jī)價格便宜,功能強(qiáng)大,能滿足上面幾點的全部要求。
結(jié)論:最終選擇的單片機(jī)為ATMEL公司的Atmega64八位高性能單片機(jī)。
主控系統(tǒng)的核心如圖3.1所示。
圖3.1 核心板最小系統(tǒng)
3.2 霍爾傳感器
霍爾傳感器是實現(xiàn)行車記錄儀最核心的部件,記錄儀的核心記錄參數(shù)(車速),便是由霍爾傳感器實現(xiàn)的,所以在制作霍爾傳感器時必須嚴(yán)格把關(guān)。
3.2.1霍爾傳感器工作原理
霍爾傳感器,顧名思義,利用的是霍爾效應(yīng)。
霍爾效應(yīng)的本質(zhì)是:固體材料中的載流子在外加磁場中運(yùn)動時,因為受到洛侖茲力的作用而使軌跡發(fā)生偏移,并在材料兩側(cè)產(chǎn)生電荷積累,形成垂直于電流方向的電場,最終使載流子受到的洛侖茲力與電場斥力相平衡,從而在兩側(cè)建立起一個穩(wěn)定的電勢差即霍爾電壓。正交電場和電流強(qiáng)度與磁場強(qiáng)度的乘積之比就是霍爾系數(shù)。平行電場和電流強(qiáng)度之比就是電阻率。大量的研究揭示:參加材料導(dǎo)電過程的不僅有帶負(fù)電的電子,還有帶正電的空穴。
本記錄儀中使用的霍爾元件A3144E正是利用這一效應(yīng)而產(chǎn)生的。其實物結(jié)構(gòu)圖如圖3.2所示
圖3.2 霍爾元件結(jié)構(gòu)圖
霍爾元件工作原理:實物結(jié)構(gòu)圖如上圖3.2所示,3腳為信號腳,1腳和2腳分別接電源和地。在沒有經(jīng)過磁場時,輸出為高電平,當(dāng)磁場漸漸變強(qiáng)時,則輸出的電平會漸漸變低,當(dāng)磁場周期性的出現(xiàn)時,在輸出腳便會出現(xiàn)一個正弦波電壓,霍爾元件信號輸出如圖3.3所示
圖3.3 霍爾元件信號輸出
3.2.2 霍爾傳感器改良
如上圖3.3所示在周期性磁場的作用下,霍爾元件,A3144E輸出的是一個周期性的正弦波,而單片機(jī)能識別的只是1或0的高低電平,如果把這個信號直接接單片機(jī)則有很多缺點:
單片機(jī)無法識別該信號除了高電平和低電平時的電平
霍爾元件靈敏度低,只有在磁鐵靠的很近的時候才有反應(yīng)
針對以上缺點,需要對霍爾傳感器進(jìn)行改良,目的為了提高靈敏度和改善輸出波形,改良的電路圖如圖3.4所示
圖3.4 改良的霍爾傳感器
工作原理:改良的霍爾傳感器如上圖3.4所示,在沒有磁場的情況下,3144輸出高電平,則運(yùn)算放大器輸出低電平,當(dāng)經(jīng)過磁場時,3144輸出電平漸漸變低,當(dāng)電平低于放大器負(fù)極時則放大器輸出低電平,從而通過單片機(jī)采集這個低電平信號。
由以上工作原理可知,可以通過調(diào)節(jié)滑動變阻器R3,從而來調(diào)節(jié)觸發(fā)電平。并且通過點亮燈LED1來指示信號的輸出。
改良后的霍爾傳感器信號輸出波形如圖3.5所示
圖3.5 霍爾傳感器輸出信號
霍爾傳感器信號輸出如上圖3.5可知,經(jīng)過改良后的霍爾傳感器能輸出一個單片機(jī)能識別的方波,并且可以通過調(diào)節(jié)滑動變阻器R3來調(diào)節(jié)傳感器的觸發(fā)電平,同時通過指示燈LED1來指示信號的輸出,最主要達(dá)到了增強(qiáng)信號的可處理性的目的。
3.3 打印機(jī)
打印機(jī)在打印的時候需要大電流提供,而單片機(jī)的IO管腳最多只能提供20mA的電流,所以打印機(jī)在打印之前需要有額外的驅(qū)動電路來提供打印需要的電流。打印機(jī)實物接口如下圖3.6所示
圖3.6 打印機(jī)實物接口
其中的信號接口如圖3.7所示
圖 3.7 打印機(jī)信號接口
打印機(jī)電機(jī)驅(qū)動如下圖 3.8所示,打印機(jī)主要信號包括,電機(jī)驅(qū)動信號:Motor(+),4個打印針驅(qū)動信號:(6,7,8,9)。
電機(jī)驅(qū)動電路如下圖3.8所示
圖3.8 打印機(jī)電機(jī)驅(qū)動
打印機(jī)電機(jī)驅(qū)動如上圖3.8所示,信號由AVR_PRINT_ON腳輸入,高電平驅(qū)動,當(dāng)產(chǎn)生高電平時,通過三極管Q1驅(qū)動打印機(jī)打印。
打印針的驅(qū)動如下圖3.9所示
圖3.9 打印針驅(qū)動
AVR_PRINT_A為信號輸入腳,低電平驅(qū)動,當(dāng)該腳為低電平時,通過三極管Q3和Q4驅(qū)動打印針PRINT_A打印。
3.4 其它外圍電路
除了以上涉及核心電路外,其它比如時間顯示,數(shù)據(jù)存儲,溫度顯示等,都分別需要不同的硬件模塊提供支持。
3.4.1 時鐘模塊
這里時鐘采用了達(dá)拉斯的DS1302時鐘芯片,時鐘模塊電路圖如圖3.10所示
圖3.10 DS1302時鐘模塊
該模塊采用串行工作模式,通過SCLK(Signal Clock,信號時鐘), I/O(Input And Output,輸入輸出信號),RST(Reset 復(fù)位信號)三線控制芯片工作。
3.4.2 數(shù)據(jù)儲存模塊
數(shù)據(jù)存儲采用了ATMEL公司的24LC64 EEPROM(可編程電可擦除存儲芯片),模塊電路圖如圖3.11所示
圖3.11 EEPROM存儲電路
該模塊采用的是標(biāo)準(zhǔn)的I2C總線模式,操作簡單方便,總?cè)萘繛?4Kbit,8K字節(jié),對于存儲記錄儀的參數(shù)是綽綽有余。
3.4.3 溫度傳感模塊
溫度傳感器采用的是達(dá)拉斯的DS18B20,單總線模式,溫度傳感器模塊電路圖如圖3.12所示
圖 3.12 溫度傳感器模塊
溫度傳感器模塊如上圖3.1所示,DS18B20采用的是單總線模式,該數(shù)字溫度傳感器最大的的特點是,只需一個IO管腳便可以控制其工作,并且該傳感器傳感溫度精確,最小可以精確到0.0625℃。
3.4.4 獨立按鍵模塊
獨立按鍵模塊是提供用戶來控制和使用UI界面,原理圖如下圖3.13所示
圖3.13 獨立按鍵電路
獨立按鍵電路如上圖3.13所示,每個按鍵按下時都會產(chǎn)生一個中斷,在設(shè)計嵌入式軟件時可以通過在按鍵中斷內(nèi)判斷按鍵值,并且可以通過定時器去除抖動,這種軟件設(shè)計可以避免軟件延時去抖,從而提高了整套軟件的運(yùn)行效率。
4. 軟件系統(tǒng)設(shè)計
本套軟件主要實現(xiàn)自行車行車記錄的智能控制,其實現(xiàn)的功能主要有以下幾點:
顯示平均行車速度,實時行車速度,時間和溫度
記錄行車速度、行車總里程、單次行車?yán)锍?/p>
記錄總行車時間,單次行車時間
輪胎圓周設(shè)定,總里程初值設(shè)定
自動關(guān)機(jī),節(jié)電保護(hù)
行車統(tǒng)計信息打印
貪吃蛇小游戲
時間顯示和時間設(shè)置
4.1 軟件總體框架
軟件總體流程圖如下圖4.1所示
圖4.1 嵌入式軟件整體流程圖
4.2 軟件說明
該嵌入式軟件設(shè)計的思想主要是模塊化的程序設(shè)計思想,其中需要驅(qū)動的模塊主要有以下幾點:
DS1302時鐘模塊驅(qū)動
DS18B20數(shù)字溫度傳感器模塊驅(qū)動
24LC64 EEPROM存儲模塊驅(qū)動
12864液晶顯示模塊驅(qū)動
霍爾傳感器計速模塊驅(qū)動
EPSON M-150II微型打點打印機(jī)驅(qū)動
軟件主要包含三層結(jié)構(gòu),分別為應(yīng)用層,封裝層以及驅(qū)動層。其軟件層次結(jié)構(gòu)如下圖4.2所示
圖 4.2 嵌入式軟件層次結(jié)構(gòu)
這種軟件設(shè)計的好處是便于移植,當(dāng)更換某一芯片時,只需要改變相應(yīng)芯片的驅(qū)動層,而不用修改封裝和應(yīng)用層,便可以使軟件繼續(xù)正常運(yùn)轉(zhuǎn)。
而如果更換單片機(jī)這一核心元件,也只需更改所有的驅(qū)動層便可以把軟件移植到其它單片機(jī)平臺,在編寫涉及到硬件的代碼時,可以盡量使用宏定義或者編寫多層結(jié)構(gòu),使底層硬件操作的代碼達(dá)到最少,從而方便移植。
4.3 各個模塊實現(xiàn)原理
4.3.1 處理器模塊
首先在選擇CPU(Central Processing Unit,計算機(jī)中央處理器)之前,必須先分析完成這個作品所選的CPU必須具備的功能,如果CPU選的功能太過簡單就不能達(dá)到預(yù)期的效果,很多東西不能實現(xiàn),而如果選擇很先進(jìn)的CPU或者32位的高級單片機(jī),首先第一個是不能充分利用這個單片機(jī),第二是在成本上也會大幅上升,所以在選擇單片機(jī)時必須對所需要的功能進(jìn)行合理的分析。
分析情況:
在顯示方面使用的是12864液晶的帶字庫液晶,該液晶操作簡單,只需普通的IO端口操作便可以解決控制,所以它對單片機(jī)沒有特殊的要求。
在存儲方面,使用的是ATMEL公司的AT24LC64 EEPROM存儲器,該存儲器走的是IIC(ATMEL公司開發(fā)的兩線串行總線)總線模式,雖然可以用一般的單片機(jī)模擬IIC總線,但是為了提高效率則必須選擇具有IIC總線接口的單片機(jī),這個一般的51單片機(jī)已經(jīng)不能滿足,所以需考慮其它單片機(jī)。
時鐘模塊,用的是達(dá)拉斯的DS1302芯片,只需普通的端口操作就能完成。
打印機(jī)模塊,有下面的打印機(jī)實現(xiàn)原理(圖4.5)可知,我們必須選擇具有雙邊沿觸發(fā)的單片機(jī),有這個功能的單片機(jī)ATMEL的AVR系列的中高端單片機(jī)能滿足,比如Atmega64及以上的單片機(jī)都具有這一功能。
霍爾傳感器,霍爾傳感器測速必須具有兩個內(nèi)置外設(shè),一個是外部下降沿中斷,一個是內(nèi)部定時器。
內(nèi)存空間要求:在做用戶界面以及制作貪吃蛇等游戲時都必須開很大的緩存,所以必須具備一定的內(nèi)存容量,初步估計需要2K內(nèi)存以上。
由以上6點分析,這里我選擇了ATMEL公司的AVR系列單片機(jī)Atmega64,該款單片機(jī)價格便宜,功能強(qiáng)大,能滿足上面7點的全部要求。其資源如下:
工作于16M時性能高達(dá)16MIPS,速度快
64K flash程序代碼空間
4K 的內(nèi)部SRAM,足夠滿足UI界面以及其他的緩存
內(nèi)置IIC和SPI總線接口
8路外部中斷,有4路能實現(xiàn)雙邊沿中斷
3路定時急速器(2路8位,1路16位)
兩個串行USART口
53個普通IO端口(大部分復(fù)用)
由以上八點可以看出,該款單片機(jī)完全能夠滿足這個產(chǎn)品需要的功能,并且Atmega64為基于RSIC結(jié)構(gòu)的8位低功耗CMOS微處理器,降低功耗,是做行車記錄儀的首選單片機(jī)。
結(jié)論:最終選擇的單片機(jī)為ATMEL公司的Atmega64八位高性能單片機(jī)。
4.3.2 用戶UI界面原理
在這個嵌入式軟件中,最關(guān)鍵也是最富有挑戰(zhàn)的便是用戶界面,即菜單系統(tǒng),如果只是用簡單的switch,case語句,那在三層菜單的基礎(chǔ)上,那將會是一個非常龐大的代碼,并且可讀性差,維護(hù)十分困難,當(dāng)需要增加或則刪減菜單時都是一件非常痛苦的事情。
通過各種資料的搜索與整理,并且通過自己的改良,用了一種基于節(jié)點編號的方法實現(xiàn)了這個菜單系統(tǒng)。
首先、菜單是有層次的,并且每一層菜單都有不同的不同的條數(shù),比如第一層菜單有四條,第一層菜單第一條的子菜單都3條,而第一層菜單第二條的子菜單有2條。
加入以個十百來標(biāo)識菜單所在的層次,以每一位的大小來標(biāo)識當(dāng)前菜單再當(dāng)前層次的條數(shù),則可以推斷出每條菜單都有一個唯一的ID,我們稱之為節(jié)點。
基于節(jié)點編號的菜單系統(tǒng)的結(jié)構(gòu)如下圖4.3所示
圖4.3 基于節(jié)點編號的菜單系統(tǒng)結(jié)構(gòu)
結(jié)構(gòu)分析:菜單系統(tǒng)結(jié)構(gòu)圖如上圖4.3所示,可見很明顯,菜單為3層菜單結(jié)構(gòu),第一層總共有兩條菜單,其編號分別是1和2,在例如在第三層中節(jié)點編號為133的菜單,由該節(jié)點知,該條菜單再當(dāng)前層次的第三條,并且位于上層菜單的第三條,位于上上層菜單(即一級菜單)的第一條。其它菜單的結(jié)構(gòu)和這個一樣。
由以上分析可知,菜單的結(jié)構(gòu)很明顯的構(gòu)成了一個標(biāo)準(zhǔn)的二叉樹,并且其父子節(jié)點有很明顯的算術(shù)關(guān)系,其關(guān)系如下。
父節(jié)點 = 當(dāng)前節(jié)點%10;(%操作為求余操作)
子節(jié)點 = 當(dāng)前節(jié)點*10 + 1;
如果沒有父節(jié)點或者子節(jié)點,則分別把這兩個節(jié)點設(shè)置成空節(jié)點。
有了這個方法,要實現(xiàn)一個菜單系統(tǒng)便是一個很簡單的事情了,這套菜單系統(tǒng)還能實現(xiàn)翻頁等復(fù)雜操作,并且增加或刪除節(jié)點十分方便I,只需修改相應(yīng)節(jié)點的編號就可以實現(xiàn)。
菜單與實時顯示界面的分離:在這套菜單系統(tǒng)中,用戶可以通過按返回鍵激活菜單或者通過返回鍵返回實時界面,其實現(xiàn)原理也非常簡單,只需設(shè)置一個標(biāo)志位來標(biāo)識是否激活菜單,從而達(dá)到實時界面與菜單的分離。
4.3.3 測速實現(xiàn)原理
測速的核心部件是霍爾元件,利用霍爾元件,再進(jìn)行一些改良,如上硬件設(shè)計中提到的圖3.4所示。從而使傳感器在周期性的磁場作用下產(chǎn)生一個固定周期的方波。
那么,如何利用輸出的一個方波來實現(xiàn)測速的目的呢?這里利用了單片機(jī)的兩個內(nèi)置外設(shè):
外部IO中斷
8位定時器T2
當(dāng)出現(xiàn)方波的下降沿時,單片機(jī)可以利用外部中斷采集到這個下降沿,并跳轉(zhuǎn)到中斷服務(wù)入口,在中斷服務(wù)中可以通過打開定時器來實現(xiàn)記錄每個方波或者一定方波個數(shù)n的時間t。
這里假設(shè)輪胎的圓周長是len厘米。則由以上數(shù)據(jù)可知如下公式。
速度 V = n*len/t (cm/s),其中l(wèi)en的單位為厘米,t的單位為秒。
4.3.4 微型打印機(jī)原理
在這里使用的打印機(jī)是EPSON公司的M-150II微型打點打印機(jī),其總共包含4個打印針,每個打印針分別可以打印24個點,其在打印紙上的分布點如下圖4.4所示
圖4.4 打印機(jī)點在打印紙上的分布
由以上硬件設(shè)計中的圖3.7所示知,控制打印機(jī)運(yùn)轉(zhuǎn)的主要有4種信號:
復(fù)位控制信號Reset Decetor
時序控制信號 Timing Decteor
電機(jī)運(yùn)轉(zhuǎn)控制信號 Motor
四個打印針控制信號 Print Solenoid
打印機(jī)點在打印紙上的分布如上圖4.4所示,當(dāng)打印機(jī)從左往右運(yùn)動時,分別產(chǎn)生96個Timing Dector信號,單片機(jī)以這個信號為基準(zhǔn)進(jìn)行打點控制,每一個信號分別控制一個點,總共96個信號對應(yīng)96個點,打打印完一行后,打印機(jī)需通過點擊回到起始原點,當(dāng)回到原點時,打印機(jī)通過Reset Decotor信號輸出低電平開始新的一行的打印。
而打印機(jī)在打印的時候,每個打印針電路上的瞬間電流都是很大的,所以必須要通過驅(qū)動電路實現(xiàn),其驅(qū)動電路已經(jīng)在上面硬件電路設(shè)計中的打印機(jī)模塊講明了。
Timing Dector信號如下圖4.5所示
圖4.5 打印機(jī)Timing Dector信號
如上圖4.5所示,打印機(jī)輸出的為正弦波信號,通過驅(qū)動電路把信號轉(zhuǎn)換成方波,此時的波形頻率為需要的波形頻率的1/2,這里可以通過兩種方法進(jìn)行改良:一種是硬件進(jìn)行分頻,另一種是利用單片機(jī)的雙邊沿促發(fā)功能。
第一種方法比較麻煩,需要拖入較大硬件,而第二種方法只要所選的單片機(jī)具有雙邊沿促發(fā)功能便可以很好的解決問題。
而這里選用的Atmega64總共有8個外部中斷,分別是INT0~INT7,慶幸的是,其中有4個具有雙邊沿促發(fā)功能,分別是INT4~INT7,這里選用的是INT6。
5. 軟硬件系統(tǒng)調(diào)試
5.1 硬件調(diào)試
在完成硬件PCB的加工之后,首先第一步便是進(jìn)行硬件焊接以及調(diào)試,在調(diào)試過程中碰到過許多問題,并且經(jīng)過分析和實踐意義解決,接下去分析在硬件調(diào)試過程中碰到的各類問題與解決方法。
遇到的問題:
主控板電源,電流不夠,當(dāng)初設(shè)計的時候主要是為了降壓在主控板的電源之后加了一個二極管來限制電壓,結(jié)果是焊接了一個IN4148的小電流二極管,導(dǎo)致液晶很暗,并且不能調(diào)處液晶對比度,電源模塊的電路圖如圖5.1所示
圖5.1 主控板電源模塊
解決方法是,使用大電流的二極管,SS26,很好的解決了這一問題。
霍爾傳感器,感應(yīng)靈敏度太低,在設(shè)計電路的時候以為霍爾元件在周期性磁場的作用下能直接輸出單片機(jī)能接收的方波,但是實際測試并非如此,單用霍爾元件直接接單片機(jī),靈敏度很低,要固定也不方便,原設(shè)計圖霍爾傳感器接口如圖5.2所示
圖5.2 霍爾元件接口
解決方法是,使用運(yùn)算放大器對信號進(jìn)行放大,并使用滑動變阻器來調(diào)節(jié)靈敏度,使之變成一個靈敏度可調(diào)的并輸出方波的可調(diào)霍爾傳感器,改良的電路如上硬件設(shè)計中的圖3.4所示。
打印機(jī)子控板,布線太細(xì),打印機(jī)的打印針在打印的瞬間,以及打印機(jī)的點擊在運(yùn)轉(zhuǎn)的時候都是需要提供大電流的,能達(dá)到幾百mA,瞬間甚至幾個安培,而在布線的時候,打印針的地方只用了2.54mm的細(xì)線,在實際使用的時候只能打印16x16的大字,當(dāng)打印壓縮的字體時便變成很模糊的字,主要原因是打印針電流小,力度不夠。
解決方法:手動焊接萬用板來達(dá)到打印的效果,在使用萬用板的時候也出現(xiàn)部分不能打印的結(jié)果,結(jié)果只是三極管壞掉,也得到了很好的解決。
5.2 軟件調(diào)試
在上面的硬件調(diào)試完畢之后,其實已經(jīng)完成了一些基本的驅(qū)動,打印機(jī)驅(qū)動,液晶驅(qū)動,霍爾元件驅(qū)動都已經(jīng)完成,在軟件上的主要難題主要有:
DS18B20時序---作為單總線溫度傳感器,DS18B20是達(dá)拉斯的單總線結(jié)構(gòu)數(shù)字溫度傳感器,由于其是單總線結(jié)構(gòu),所以在時序的控制上要求非常嚴(yán)格,在做這個驅(qū)動時碰到過許多問題,主要是時序很難控制,最后通過JTAG硬件仿真調(diào)試,解決了這一難題。
用戶UI界面,以前從來沒坐過多級的菜單,并且菜單層次多,條數(shù)多,如果用簡單的switch,case語句來實現(xiàn)的話,那將會是一個非常龐大的代碼,不僅編寫困難,而且不易維護(hù),增減麻煩。所以為了做好這一塊,在網(wǎng)上搜索了大量的資料,最后使用的是基于節(jié)點編號的方法,并進(jìn)行了一些改良,這種方法的結(jié)構(gòu)圖如上圖軟件設(shè)計中的圖4.3所示
6. 欲求目標(biāo)
6.1 要求達(dá)到的目標(biāo)
要實現(xiàn)的功能主要如下:
顯示實時速度和平均速度
顯示總里程和單次行車?yán)锍?/p>
顯示時間和溫度
節(jié)電保護(hù)
行車信息存儲
用戶菜單UI界面
時間修改
輪徑設(shè)置,里程設(shè)置,等一些參數(shù)的設(shè)置
打印行車記錄統(tǒng)計信息
貪吃蛇小游戲
6.2 產(chǎn)品優(yōu)缺點
優(yōu)點:該產(chǎn)品的最大優(yōu)點是顯示實時速度和里程精確,誤差小,并且可調(diào)節(jié)度大,能適應(yīng)輪胎圓周10—250cm的自行車,使用用戶UI界面,并且顯示的全是淺顯易懂的中文,顯示更加人性化和方便,傳感器靈敏度高,并且還具有打印功能,便于用戶管理行車信息。
缺點:本產(chǎn)品的最大缺點是成本高,打印機(jī)以及液晶都是比較昂貴的,這點需要改進(jìn)。另一個缺點便是沒有包裝,只是達(dá)到了實驗級的產(chǎn)品,沒有達(dá)到產(chǎn)品級別,這點在量產(chǎn)產(chǎn)品之后可以進(jìn)行改良。
附錄一
主控板系統(tǒng)原理圖:
附錄二
驅(qū)動板原理圖:
霍爾傳感器原理圖: