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