【《單片機(jī)自行車轉(zhuǎn)向燈控制系統(tǒng)的軟件設(shè)計(jì)案例》3000字】_第1頁
【《單片機(jī)自行車轉(zhuǎn)向燈控制系統(tǒng)的軟件設(shè)計(jì)案例》3000字】_第2頁
【《單片機(jī)自行車轉(zhuǎn)向燈控制系統(tǒng)的軟件設(shè)計(jì)案例》3000字】_第3頁
【《單片機(jī)自行車轉(zhuǎn)向燈控制系統(tǒng)的軟件設(shè)計(jì)案例》3000字】_第4頁
【《單片機(jī)自行車轉(zhuǎn)向燈控制系統(tǒng)的軟件設(shè)計(jì)案例》3000字】_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

單片機(jī)自行車轉(zhuǎn)向燈控制系統(tǒng)的軟件設(shè)計(jì)案例目錄TOC\o"1-3"\h\u26518單片機(jī)自行車轉(zhuǎn)向燈控制系統(tǒng)的軟件設(shè)計(jì)案例 1326701.1STM32固件庫開發(fā)概述 1325901.2程序代碼結(jié)構(gòu) 125841.3main.c結(jié)構(gòu)說明 3267731.4按鍵功能軟件設(shè)計(jì) 4151671.5ADXL345的軟件設(shè)計(jì) 7309291.6模式切換的軟件設(shè)計(jì) 81.1STM32固件庫開發(fā)概述在設(shè)計(jì)過程中選擇了一套STM32固件庫,其中設(shè)置了很多函數(shù),在應(yīng)用過程中可通過函數(shù)對各個(gè)寄存器進(jìn)行操作控制??蓪?shí)現(xiàn)的功能主要如初始化IO口或者寄存器集成而滿足效率要求。這種情況下寫代碼的時(shí)候可不需要考慮到寄存器。STM32在應(yīng)用過程中可直接操作寄存器,此種模式下進(jìn)行開發(fā)過程中,需要用戶對寄存器的應(yīng)用熟悉了解。不過其中的寄存器數(shù)量多這種情況下全部熟悉這些寄存器也不滿足實(shí)際情況,因而應(yīng)該進(jìn)行一定的總體認(rèn)識。由于單片機(jī)的代碼主要有C語言編寫,這種語言在編程領(lǐng)域被廣泛的應(yīng)用,其屬于一種面向過程的語言,為滿足寄存器的操作要求,可直接將寄存器操作封裝在函數(shù)中,從而為其后的操作提供支持和便利。固件庫開發(fā)可很好的滿足效率要求。由于官方固件庫的強(qiáng)大,這樣在進(jìn)行設(shè)計(jì)和編程時(shí)組建代碼就可滿足要求。在設(shè)計(jì)過程中具體分析考慮函數(shù)的預(yù)期功能,對固件庫函數(shù)的使用相關(guān)情況熟悉了解,從而高效的利用。1.2程序代碼結(jié)構(gòu)這種代碼的優(yōu)勢表現(xiàn)為方便調(diào)試,易維護(hù),在不斷的修改基礎(chǔ)上實(shí)現(xiàn)設(shè)計(jì)目的。相關(guān)情況如下:1.按照硬件區(qū)分,各種模塊進(jìn)行分區(qū)分文件放置。1.同類型硬件設(shè)置在不同的函數(shù)中而提高處理性能。1.不同的函數(shù)根據(jù)相關(guān)的應(yīng)用情況進(jìn)行設(shè)置確定出適宜的關(guān)鍵字。1.函數(shù)的命名根據(jù)其功能相關(guān)情況進(jìn)行確定。5.中斷相關(guān)的函數(shù)主要是根據(jù)功能進(jìn)行設(shè)計(jì)確定出宏定義。6.一般情況下不應(yīng)用到局部靜態(tài)變量。單片機(jī)模塊化編程過程中應(yīng)該對這些予以重視,確保實(shí)現(xiàn)功能目標(biāo)。表4-1程序中.c文件功能表文件名可實(shí)現(xiàn)的功能acc_sensor.c在應(yīng)用過程中可進(jìn)行加速度傳感器的讀、寫相關(guān)操作break_light.c初始化和處理函數(shù),滿足對應(yīng)的控制應(yīng)用要求button.c按鍵定義進(jìn)行一定的設(shè)置函數(shù)light.c呼吸燈模式相關(guān)的中斷控制,且實(shí)現(xiàn)一定調(diào)節(jié)目的state.c初始化相關(guān)的函數(shù)led.c初始化和中斷處理,滿足燈控制相關(guān)要求power.c定義引腳,為其后的調(diào)用提供支持xl345.cSPI接口處理,滿足一定的數(shù)據(jù)通信要求以上.c文件的功能存在一定的差異性,不過對比分析可知其結(jié)構(gòu)基本上相一致,以button.c為例對其功能情況進(jìn)行具體說明。表4-2button.c結(jié)構(gòu)說明結(jié)構(gòu)功能舉例頭文件定義添加到文件#include"stm32f10x.h"#include"utils.h"#include"button.h"宏定義將引腳、中斷處理等系統(tǒng)底層的功能起別名,方便閱讀#defineBTN_RIGHT_PINGPIO_Pin_1 #defineBTN_RIGHT_IRQ EXTI1_IRQn中斷初始化設(shè)定中斷的名字、優(yōu)先級、觸發(fā)方式,管腳映射等staticvoid_initButton(void)staticvoid_initAntiShakeTimer(void)中斷處理函數(shù)或者功能處理函數(shù)根據(jù)預(yù)期功能執(zhí)行相應(yīng)的處理任務(wù)voidBTN_LEFT_IRQROUTINE(void)voidBTN_ANTISHAKE_IRQROUTINE(void)1.3main.c結(jié)構(gòu)說明本文設(shè)計(jì)過程中根據(jù)控制要求,而確定出適宜主函數(shù),其是基于模塊化模式設(shè)計(jì)的,相對簡潔。功能封裝處理,這樣也使得主函數(shù)很簡潔。Main.c中代碼如下:#include"stm32f10x.h"#include"utils.h"#include"acc_sensor.h"#include"display_state.h"#include"button.h"#include"led.h"#include"xl345.h"#include"power.h"intmain(){ PWR_SetUnusedPin(); HW_CommonInit(); LED_Init(); //初始化升壓電路引腳 HW_InitSysTick(); ACC_Init(); STATE_Init();從ADXL讀數(shù)據(jù),開啟定時(shí)器 BTN_Init(); //按鍵和定時(shí)器的初始化 while(1){PWR_EnterSLEEPMode();//開始休眠,等待中斷 }}具體分析可知其結(jié)構(gòu)主要包括頭文件和主函數(shù),后者主要是進(jìn)行初始化,在一定條件下可進(jìn)入睡眠,等待中斷。while(1)主要的作用是進(jìn)入睡眠模式,而更好的滿足功耗要求。這種狀態(tài)下其中的Cortex-M3內(nèi)核停止,不過其他的單元如NVIC、系統(tǒng)時(shí)鐘等保持運(yùn)行狀態(tài),因而在應(yīng)用過程中可基于ADXL345芯片進(jìn)行中斷控制,喚醒處理器。1.4按鍵功能軟件設(shè)計(jì)模式切換過程中為更好的滿足有要求需要設(shè)置按鍵,左右轉(zhuǎn)向設(shè)置了按鍵,這種情況下三個(gè)按鍵全部放在車把上也不滿足應(yīng)用要求,因而設(shè)計(jì)過程中選擇長按左或者右按鍵實(shí)現(xiàn)切換控制功能。按鍵功能的邏輯控制相關(guān)情況如下,在運(yùn)行過程中檢測到外部中斷線1和2電平為高情況下消抖,長時(shí)間高則可判斷出按鍵按下了,這種條件下檢測確定出為長按則開始進(jìn)行模式切換而滿足控制要求。在設(shè)計(jì)過程中需要重點(diǎn)考慮到消抖和確定按鍵時(shí)長相關(guān)的延時(shí)。delay函數(shù)可滿足延時(shí)要求,這樣可不需要消耗電能,設(shè)置定時(shí)器也可以滿足這種要求。本文也時(shí)對比分析而選擇定時(shí)器來消抖,用延時(shí)函數(shù)進(jìn)行分析確定出長按狀態(tài),原因如下所示:在正常騎行中,由于顛簸相關(guān)因素的影響,這種很容易出現(xiàn)一些干擾問題,如導(dǎo)致外部中斷引腳產(chǎn)生瞬間的干擾電流,這種情況下可能出現(xiàn)誤判問題。也就是在沒有按鍵的情況下,讀到上升電流。在實(shí)際應(yīng)用過程中此處的消抖功能主要是消除沒有按下按鍵,去除與此相關(guān)的干擾問題。而此時(shí)喚醒單片機(jī),進(jìn)行相應(yīng)的延時(shí)處理并沒有實(shí)際的意義,不滿足省電效果相關(guān)要求。處理器繼續(xù)休眠情況下可實(shí)現(xiàn)延時(shí)功能。確定按下按鍵后,接著基于延時(shí)函數(shù)進(jìn)行判斷分析確定出按鍵的時(shí)間長短,具體分析可知這種操作的原因在于如下兩方面;一方面單片機(jī)已經(jīng)喚醒,這種情況下進(jìn)行延時(shí)處理不會(huì)導(dǎo)致浪費(fèi)電量;此外也可以避免按鍵的定時(shí)器中斷相關(guān)的干擾問題,更好的滿足安全性要求。定時(shí)器中斷的優(yōu)先級高,這種情況下通過定時(shí)器中斷也會(huì)引發(fā)相關(guān)丟失問題,因而應(yīng)該適當(dāng)?shù)倪M(jìn)行優(yōu)化。按鍵的定時(shí)器中斷和外部中斷存在密切關(guān)系,對比分析可知二者的優(yōu)先級均為1,不過在控制過程中前者不會(huì)被外部中斷打斷,外部中斷的執(zhí)行了過程中可實(shí)現(xiàn)相關(guān)這種終端控制。而第二次電平判斷發(fā)生在定時(shí)中斷模式下。因而是外部中斷線對應(yīng)的延時(shí)函數(shù)。相關(guān)情況具體如下

等待2觸發(fā)定時(shí)器2開啟等待2觸發(fā)定時(shí)器2開啟進(jìn)入引腳電平 30毫秒過后進(jìn)入引腳電平干擾,不處理讀取電平右按鍵處理函數(shù)左按鍵處理函數(shù)判斷按鍵干擾,不處理讀取電平右按鍵處理函數(shù)左按鍵處理函數(shù)判斷按鍵低電平 高電平 PB2為高電平 PB1為高電平圖4-1按鍵觸發(fā)流程圖

左/右按鍵處理函數(shù)左/右按鍵處理函數(shù)用時(shí)約2秒用時(shí)約2秒再次檢測再次檢測切換模式 是短按 長按切換模式閃爍8次閃爍8次 圖4-2按鍵處理流程圖1.5ADXL345的軟件設(shè)計(jì)ADXL345與單片機(jī)在進(jìn)行數(shù)據(jù)通信過程中應(yīng)用到SPI協(xié)議,相關(guān)情況具體如下。剎車狀態(tài)可以基于如下的方式進(jìn)行判斷;先確定出X,Y,Z軸加速度均值,且對比分析實(shí)測值和此均值的差異,且進(jìn)行判斷分析確定出是否有狀態(tài)變化。從而大幅度降低安裝傾斜造成的誤差問題。不過安裝時(shí)也應(yīng)該盡量使加速度芯片與地面垂直,從而有效的提高檢測質(zhì)量,控制錯(cuò)誤率。在此過程中需要分析水平和豎直方向的加速度,在發(fā)現(xiàn)連續(xù)震動(dòng)情況下進(jìn)行喚醒操作而滿足要求。參數(shù)的調(diào)整過程中對比分析而要用到BOOT啟動(dòng)功能,在flash中記錄測量結(jié)果,下次調(diào)用過程中可直接進(jìn)行取出。這樣可以收集確定出相關(guān)加速度值,下次調(diào)整參數(shù)而更好的滿足效率要求?,F(xiàn)在加速度傳感器的參數(shù)可根據(jù)要求進(jìn)行靈活的調(diào)節(jié),且靈敏度也處于較低水平,有較高的性能優(yōu)勢。ADXL芯片與單片機(jī)可以工序的進(jìn)行通信,相應(yīng)的數(shù)據(jù)傳輸流程如下次所示。

判斷時(shí)間長度亮紅燈亮黃燈,計(jì)時(shí)30秒單片機(jī)推出睡眠模式喚醒判斷時(shí)間長度亮紅燈亮黃燈,計(jì)時(shí)30秒單片機(jī)推出睡眠模式喚醒加速度芯片檢測到連續(xù)震動(dòng)判斷加速度判斷加速度 剎車 沒有剎車判斷剎車狀態(tài)判斷剎車狀態(tài) 剎車 沒剎車 沒超過超過30秒關(guān)閉LED關(guān)閉LED,休眠圖4-3加速度芯片與單片機(jī)通信流程圖1.6模式切換的軟件設(shè)計(jì)本設(shè)計(jì)中單片機(jī)對應(yīng)的運(yùn)行模式可劃分為兩種,分別為休眠和正常模式。具體分析可知其中正常模式主要包括剎車燈、呼吸燈模式。以下對二者的區(qū)別相關(guān)情況進(jìn)行說明圖4-3正常模式與睡眠模式圖在應(yīng)用過程中可以實(shí)現(xiàn)一定狀態(tài)切換功能,剎車燈、呼吸燈模式通過標(biāo)志位g_DisState進(jìn)行確定,而實(shí)現(xiàn)切換功能。enumDISPLAY_STATE{ STATE_BREAK_LIGHT, //剎車燈 STATE_COLORLIGHT,//呼吸燈 STATE_MAX,//重新回到剎車燈};剎車燈是初始狀態(tài)可以通過此函數(shù)值進(jìn)行判斷,且模式切換時(shí)應(yīng)用到g_DisState++,在應(yīng)用過程中可以據(jù)此方便的求二環(huán)標(biāo)志位而滿足應(yīng)用要求,對比分析可知這種設(shè)置在邏輯上簡單的。voidSTATE_NextState(void){g_DisState++; if(STATE_MAX==g_DisState){ } STATE_SetState; return;}不同模式的處理函數(shù)功能存在一定的差異性,不過在應(yīng)用過程中都需要應(yīng)用到指針函數(shù)切換而滿足相關(guān)要求。typedefvoid(*ACC_)(u8irq); 通過以上的字符串設(shè)置了一個(gè)函數(shù)指針,在應(yīng)用過程中需要設(shè)置函數(shù)的參數(shù)和類型,基于對應(yīng)的g_handle

溫馨提示

  • 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

提交評論