




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 河南師范大學(xué)本科畢業(yè)論文 學(xué)號: 1102424021 基于STM32的自行車轉(zhuǎn)向剎車燈 學(xué)院名稱: 物理與電子工程學(xué)院 專業(yè)名稱: 電氣工程及其自動化 年級班別: 2011 級 姓 名: 指導(dǎo)教師: 2015年5月基于STM32的自行車轉(zhuǎn)向剎車燈摘 要本課題選用了STM32F103C8T6單片機(jī)和ADXL345三軸加速度傳感器,來控制全彩燈珠和紅外線激光燈,達(dá)到指示自行車的剎車或者轉(zhuǎn)向的功能。本文首先介紹了STM32系列芯片和ADXL345加速度芯片的功能和特點。之后詳細(xì)介紹了剎車燈系統(tǒng)的硬件和軟件設(shè)計。難點是硬件設(shè)計中的問題與思考,重點軟件設(shè)計中運(yùn)用模塊化編程的方法組建代碼的過程。經(jīng)過調(diào)
2、試運(yùn)行結(jié)果分析,該設(shè)計實現(xiàn)了剎車時全彩燈珠自動亮起,轉(zhuǎn)向前主動觸發(fā),使紅外線激光燈產(chǎn)生顯著的轉(zhuǎn)向信號的功能,滿足了設(shè)計的要求。論文最后總結(jié)了設(shè)計中出現(xiàn)的問題以及解決方法。關(guān)鍵字:STM32,ADXL345,自行車剎車燈,轉(zhuǎn)向燈 The Bicycle Break Light and Steering Lamp Based on STM32 AbstractThis subject selects the STM32F103C8T6 micro-controller and ADXL345 three axis acceleration sensor, to control the RGBLED
3、 and infrared laser light, to indicate a bicycle braking or steering function.First this paper introduces some information and characteristics of STM32 series chip and ADXL345 acceleration chip. And then introduces the design of hardware and software of the system. The difficulty is the problem and
4、thinking in the process of hardware design, using the method of modular programming key software design building code. Through the detailed analysis of the operation result, the design and implementation of the RGBLED automatically lights up when braking,active triggering makes the infrared laser li
5、ght generated signal function significantly before steering,in accordance with the design requirements. The thesis finally summarizes the problems occurred in design and their solutions.Keywords:STM32,ADXL345,the bicycle break lights ,steering lampIII目 錄 基于STM32的自行車轉(zhuǎn)向剎車燈I摘 要I前 言11 . Cortex-M3與STM32簡
6、介31.1Cortex-M3與STM32的關(guān)系31.2 STM32的優(yōu)越性31.3 STM32的系統(tǒng)結(jié)構(gòu)、內(nèi)核及指令集示意圖:41.4 STM32F103C8T6的基本參數(shù)、內(nèi)設(shè)與引腳位52. ADXL345與SPI簡介72.1 ADXL345簡介72.2 SPI介紹83 硬件設(shè)計103.1 硬件設(shè)計概述103.2 電源部分的硬件設(shè)計123.3 STM32和ADXL345硬件設(shè)計133.4 全彩燈珠的設(shè)計153.5轉(zhuǎn)向按鍵與紅外線激光燈的設(shè)計163.6其它硬件設(shè)計184 軟件設(shè)計214.1 STM32固件庫開發(fā)概述214.2 程序代碼結(jié)構(gòu)214.3 main.c結(jié)構(gòu)說明224.4 按鍵功能軟件
7、設(shè)計234.5 ADXL345的軟件設(shè)計264.6 模式切換的軟件設(shè)計275 總結(jié)305.1 在調(diào)試過程中出現(xiàn)的問題和解決辦法305.2 在軟件設(shè)計中總結(jié)的技巧315.3 個人成長31參考文獻(xiàn)33致 謝34前 言 騎自行車既是一種環(huán)保的出行方式,又是一種健康的運(yùn)動方式。對于個人來說,騎自行車不僅可以減肥,使身體勻稱,同時可以強(qiáng)化心臟功能,有避免高血壓等疾病的功能。騎自行車可以使騎行者血液循環(huán)加速,主動吸入大量新鮮空氣,從而使騎行者腦筋更清楚。有研究顯示,騎自行車上班或者上學(xué),可以提升人的幸福感。特別是在風(fēng)景優(yōu)美的地方騎行,會讓人覺得心曠神怡,充分感受到運(yùn)動的快樂和自然的美好。對于自然來說,騎自
8、行車出行可節(jié)約能源、降低噪音、減少污染,生態(tài)效應(yīng)明顯。建設(shè)“資源節(jié)約型、環(huán)境友好型”社會是我國經(jīng)濟(jì)社會發(fā)展的客觀要求。個人開車上下班會對環(huán)境產(chǎn)生巨大危害,給城市交通也帶來巨大壓力。因此積極提倡自行車出行,是利國利民的好事。然而,中國的自行車騎行氛圍非常不樂觀。中國曾是自行車的王國,卻像一些發(fā)達(dá)國家一樣過度強(qiáng)調(diào)汽車經(jīng)濟(jì),各個城市汽車保有量連年上升,冷落自行車成為常見社會現(xiàn)象,鄙視普通騎行者更是成為大眾心理。另外,由于汽車尾氣,工廠排污等造成的環(huán)境污染,導(dǎo)致許多城市適合戶外運(yùn)動的天數(shù)越來越少。加之中國司機(jī)普遍素質(zhì)不高,在駕駛機(jī)動車行車過程中常常占用自行車道。特別是從自行車道超車這種行為,給騎行者帶
9、來很大的威脅。尤其是在夜間,機(jī)動車占道超車的危害更大。與機(jī)動車不同,自行車出現(xiàn)剎車、轉(zhuǎn)向等行駛狀態(tài)的變化時,沒有顯著的指示。如果在轉(zhuǎn)向或者剎車時自行車道被機(jī)動車占用的話,對于騎行者來說將是非常危險的事情。本設(shè)計可以歸類為騎行裝備的一種,設(shè)計初衷是為了給騎行者提供一種較為顯著的可以警示轉(zhuǎn)向或者剎車的工具。與頭盔、護(hù)膝之類傳統(tǒng)的騎行裝備相比,可以在危險發(fā)生前提供預(yù)警,減小危險發(fā)生的幾率。按照實現(xiàn)方法來說的話,本設(shè)計屬于基于STM32單片機(jī)的一個小型電子設(shè)備。與常見的長亮型市售剎車燈相比,更加智能,功耗也更低。與無光源反射式的后座警示燈相比,本設(shè)計的警示方式更加顯眼,也更加時尚。綜上,本設(shè)計與其它騎
10、行裝備相比,是具有一定的獨創(chuàng)性的智能化警示設(shè)備。本設(shè)計雖然只是為了檢驗學(xué)習(xí)情況,而做的一個小制作性質(zhì)的發(fā)明,但其設(shè)計思路卻以正規(guī)產(chǎn)品思路為指導(dǎo),沒有追求一味地多添加功能,以增加其技術(shù)含量,而是真正考慮到如果要作為實際產(chǎn)品的話,需要考慮的功能、成本和功耗。因此,本設(shè)計最大程度追求降低功耗,裁去多余硬件,功能求專而不求多。本文共分為5部來寫,首先介紹了STM32系列芯片的和ADXL345芯片的特點,然后是系統(tǒng)硬件設(shè)計和系統(tǒng)軟件設(shè)計,最后是總結(jié)設(shè)計中出現(xiàn)的問題及其解決辦法,個人收獲。1 . Cortex-M3與STM32簡介1.1Cortex-M3與STM32的關(guān)系STM32是采用Cortex-m3
11、的內(nèi)核的一種CPU,Cortex-M3是ARM架構(gòu)的一種。Cortex-M3采用ARM V7構(gòu)架,支持Thumb-2指令集,同時具有很多強(qiáng)大的特性。較之ARM7 TDMI,Cortex-M3不僅擁有更強(qiáng)的性能、更高的代碼密度、而且可以位帶操作、中斷嵌套、低成本、低功耗。國內(nèi) Cortex-M3 市場,意法半導(dǎo)體公司的STM32是毋庸置疑的領(lǐng)跑者,不論是在市場占有率,技術(shù)支持還是使用氛圍等方面,都遠(yuǎn)超其他對手。所以本設(shè)計在Cortex-M3芯片的時候,自然而然地就考慮了STM32。1.2 STM32的優(yōu)越性STM32 的優(yōu)越性體現(xiàn)在以下幾個方面:1. 超低的價格。幾乎與8位單片機(jī)的價格持平是ST
12、M32最大的優(yōu)勢。就本設(shè)計所選的STM32F103C8T6而言,在北京中發(fā)電子市場買10片的話,每片僅需10.5元。而一塊STC89C52RC就需要9元。兩者的性能差別卻非常之大。2. 豐富的外設(shè)。STM32 擁有包括:TIMER定時器、SPI通訊協(xié)議、I2C總線、USB通訊協(xié)議、CAN總線、數(shù)模轉(zhuǎn)換器、 模數(shù)轉(zhuǎn)換器、RTC、DMA 等眾多外設(shè)或者功能,具有很高的集成度。本設(shè)計中單片機(jī)通過SPI與ADXL345三軸加速度芯片進(jìn)行通信。3. 豐富的型號。STM32中的M3系列內(nèi)核擁有多個系列上百種型號,十分豐富。其封裝庫也有較多的選擇,如QFN、LQFP、BGA 等。本設(shè)計選取了LQFP48L封
13、裝,是一種方便手工焊接,且體積較小的封裝。4. 優(yōu)異的實時性能。由于STM32芯片的多數(shù)IO口都可以通過不同的映射設(shè)置,來作為中斷輸入,所以提供了較多的中斷數(shù)量,最多可達(dá)84個,且具有16級可編程的優(yōu)先級,合理地規(guī)劃中斷數(shù)量和優(yōu)先級可以有效保障實時性能。5. 杰出的功耗控制。STM32所有的外設(shè)都有自身的獨立時鐘開關(guān),相應(yīng)外設(shè)的時鐘被設(shè)置為關(guān)閉的話可以有效降低功耗。本設(shè)計充分應(yīng)用了STM32的這個特性,所有的外設(shè)全部以中斷的方式來控制,在不使用的時候關(guān)閉相應(yīng)時鐘,追求最大程度降低功耗。6. 較快的開發(fā)速度。ST將各個寄存器的操作集成了一個官方固件庫,將寄存器的使用方法封裝到不同的函數(shù)中,開發(fā)者
14、通過API直接調(diào)用這些函數(shù)即可操作寄存器,不需要深入底層注重這些寄存器的操作細(xì)節(jié),因此大大提升了開發(fā)速度。 7. 極低的開發(fā)成本。STM32的官方仿真器價格很低,且國產(chǎn)的仿真器質(zhì)量也可以接受,不像某些單片機(jī)仿真器動輒上千,另外支持SWD和JTAG兩種調(diào)試辦法,方便使用。本設(shè)計使用SWD調(diào)試,只需要2個IO口,即可實現(xiàn)仿真調(diào)試。 1.3 STM32的系統(tǒng)結(jié)構(gòu)、內(nèi)核及指令集示意圖:圖1-1 STM32的系統(tǒng)結(jié)構(gòu)圖1-2 Cortex-M3處理器內(nèi)核與Cortex-M3芯片的關(guān)系 圖1-3 Thumb-2指令集與Thumb指令集的關(guān)系示意圖1.4 STM32F103C8T6的基本參數(shù)、內(nèi)設(shè)與引腳位基
15、本參數(shù):類別:集成電路(IC)所屬:嵌入式微控制器位數(shù):32位最高速度:72MHz輸入/輸出IO數(shù):37程序存儲器容量:中型64K 程序存儲器類型:Flash閃存RAM容量:20K x 8電源電壓:2 V-3.6 VADC:10x12b工作溫度:-40°C-85°C封裝/外殼:LQFP-48L貼片式圖1-4 STM32F103C8T6內(nèi)設(shè)與引腳圖2. ADXL345與SPI簡介2.1 ADXL345簡介概述 ADXL345是一種體積小巧的低功耗三軸加速度芯片傳感器,擁有可達(dá)13位的分辨率和16g的測量范圍。輸出16位補(bǔ)碼數(shù)據(jù),可通過SPI或I2C接口訪問。ADXL345可以
16、在傾斜檢測中測量靜態(tài)重力加速度,由于高達(dá)3.9mg/LSB的分辨率,小于1度的傾斜角變化可以檢測到。還可以測量運(yùn)動或沖擊導(dǎo)致的動態(tài)加速度。本設(shè)計中使用的功能就是在運(yùn)動狀態(tài)中檢測動態(tài)加速度,屬于移動設(shè)備應(yīng)用的ADXL345,可以說是恰如其分的選擇。該器件提供以下幾種特殊檢測功能:活動與否檢測功能:通過比較某軸上的加速度與用戶自定義的值來檢測是否運(yùn)動。震動檢測功能:檢測任意方向的有無震動。掉落檢測功能:判斷傳感器是否處在在掉落過程中。這些功能可以獨立映射到兩個中斷輸出引腳(第8腳和第9腳)中的一個。參數(shù)功耗:測量模式23uA(VS=2.5V),待機(jī)模式0.1uA分辨率:10位固定分辨率,最大可調(diào)分
17、辨率13位電源電壓VS:2V-6.3V引腳高電平:1.7V-VS工作溫度:-40°C至+85引腳結(jié)構(gòu)與功能 圖2-1 引腳配置圖表2-1 引腳功能描述表2.2 SPI介紹SPI是串行外設(shè)接口(Serial Peripheral Interface)的縮寫,SPI是一種簡單易用的通訊協(xié)議,正在被越來越多的芯片采用,它可進(jìn)行全雙工通訊,所以速度很快,可同步。只占用四根線,不但節(jié)省了寶貴的芯片IO口資源,而且有利于進(jìn)行PCB布局設(shè)計。 表2-2 SPI功能描述表名稱功能描述SDO數(shù)據(jù)輸出主要的通訊線,負(fù)責(zé)輸入主設(shè)備的數(shù)據(jù),輸出從設(shè)備的數(shù)據(jù)SDI數(shù)據(jù)輸入主設(shè)備數(shù)據(jù)輸出,從設(shè)備數(shù)據(jù)輸入,在單向
18、傳輸時可以不使用此線SCLK時鐘時鐘信號,主設(shè)備負(fù)責(zé)提供時鐘脈沖,允許數(shù)據(jù)按位傳輸,共數(shù)據(jù)輸入線和輸出線按照這個脈沖傳輸數(shù)據(jù)CS片選從設(shè)備使能信號,由主設(shè)備控制某從設(shè)備是否被選中,因此同一總線上可以連接多個SPI從設(shè)備。SPI是串行通訊協(xié)議,即數(shù)據(jù)是按位的傳輸?shù)?。由SCLK提供時鐘脈沖。從設(shè)備向主設(shè)備的數(shù)據(jù)輸出通過SDO線,數(shù)據(jù)在時鐘上升沿(或下降沿時)改變,在下一個下降沿(或上升沿)被讀取。這樣,在SCKL提供不少于8次脈沖時,就可以完成一個8位數(shù)據(jù)的傳輸。一個滿足SPI協(xié)議的設(shè)備中,至少需要一個主設(shè)備。只可以主設(shè)備控制SCKL,從設(shè)備不允許控制。當(dāng)主設(shè)備未曾控制SCKL時鐘信號線產(chǎn)生跳變時
19、,從設(shè)備不進(jìn)行數(shù)據(jù)的采集和傳輸。這樣的好處是,主設(shè)備只需要控制SCKL時鐘線就可以控制與從設(shè)備的通訊。時序介紹圖2-2 SPI時序圖3 硬件設(shè)計3.1 硬件設(shè)計概述本設(shè)計的硬件設(shè)計經(jīng)歷了兩個版本,V1.0和V2.0。本設(shè)計采用的設(shè)計流程是:1. 考慮預(yù)期功能,進(jìn)行器件的類別選擇。2. 廣泛搜集資料,設(shè)計原理圖。3. 考慮板子與器件大小,設(shè)計PCB。4. 焊接第一版PCB,調(diào)試程序。5. 修改錯誤,優(yōu)化布局,設(shè)計第二版PCB。本設(shè)計的硬件電路設(shè)計軟件是altium designer 13。最初的想法是設(shè)計一個自行車的剎車燈,看上去要酷炫。當(dāng)時有兩個方案:其1是直接改裝自行車的剎車手柄,使手柄的活
20、動處與車把的固定端導(dǎo)電連通,剎車的時候這兩處分離,則電氣連接斷開。這樣子幾乎可以保證百分之百亮起剎車燈。缺點是不具備普適性,每個自行車需要不同的改裝,另外技術(shù)含量也大大降低。其2是使用加速度傳感器芯片。通過MCU控制傳感器芯片,讀取加速度值來判斷剎車狀態(tài)。這種方案是很難達(dá)到很高的準(zhǔn)確率的,因為對于芯片來說,它無法判斷產(chǎn)生的加速度是在加速還是在剎車。假設(shè)自行車勻速前進(jìn)的時候,三軸加速度的值與靜止?fàn)顟B(tài)是一樣的,因此無法判斷此時的加速度值與前進(jìn)方向的關(guān)系。本設(shè)計選擇方案2,選擇加速度芯片。考慮到酷炫,所以采用了全彩燈珠。根據(jù)色光三原色原理,紅綠藍(lán)三種顏色的LED燈珠足以產(chǎn)生絢麗的色彩。在設(shè)計原理圖的
21、時候,主要參考了正點原子的戰(zhàn)艦STM32開發(fā)板和github上的項目ProgrammableLED。在設(shè)計PCB的時候,首先考慮了板子的尺寸。由于要使用電池供電,所以板子的大小就有了限制。查閱到電池盒的尺寸后,確定了板子的尺寸為3.3cm*6cm,雙面板,單面放置貼片元器件。在確定器件封裝的時候,充分考慮了手工焊接的限制和本人焊接的水平,多數(shù)阻容器件采用了0805這樣的較大封裝。值得一提的是,在PCB設(shè)計過程中得到了專業(yè)硬件工程師的指導(dǎo),在確定板子尺寸和器件封裝后,器件采用了手工布局,具體的布局和布線流程是這樣的:1. 將MCU放在最中間的位置上。2. 根據(jù)接插件的特殊要求放置接插件。比如電源
22、接入口必須放在左端,而紅外激光燈放在上端。3. 放置有特殊要求的器件,如為了美觀,要將兩個全彩燈珠對稱放在MCU兩端。易發(fā)熱的器件離其它器件遠(yuǎn)一點。4. 將電源相關(guān)的器件放置在電源接入口的附近。主要是一些電容,將這些電容排列整齊并且大容值的放在前邊。5. 根據(jù)與MCU管腳的連接關(guān)系,選取器件的放置區(qū)域。如某器件與芯片連接的管腳在右邊,則盡量將此器件放置在芯片右邊。6. 考慮到減小焊接難度,將相似器件放在一塊。完成布局以后一定要手工布線。一是因為手工布線可以加深對板子的理解,調(diào)試的時候效率會高很多。二是因為自動布線會產(chǎn)生較多的過孔,而打過孔的鉆頭是易壞部件,會增加成本,并且如果大批量生產(chǎn)的話板子
23、擺放層數(shù)較多,則下層的過孔可能很小,不合乎要求。雖然這個設(shè)計很簡單,自動布線是有效的,但是為了養(yǎng)成良好習(xí)慣,指導(dǎo)老師建議我手工布線。手工布線中需要注意頂層和底層的線不要平行,防止信號干擾。不要有小于90度的拐角。根據(jù)通過的電流設(shè)置線寬,等等。將第一版印制出來后,焊接完成,燒錄程序。發(fā)現(xiàn)一些錯誤,不得不通過割線,飛線等方式來調(diào)試。然后在第一版上調(diào)試軟件,然后基本實現(xiàn)了預(yù)期功能。有些問題無法確定是軟件問題還是硬件問題,所以這一步很艱難。雖然,較為穩(wěn)妥的開發(fā)流程是,先在開發(fā)板上調(diào)試代碼,確認(rèn)代碼無誤后根據(jù)預(yù)期功能對開發(fā)板進(jìn)行硬件裁剪,然后制版。這樣子可以避免軟件硬件問題混淆,這也是學(xué)生學(xué)習(xí)常用的開發(fā)
24、手段。但是工業(yè)開發(fā)是沒有開發(fā)板的,直接由硬件工程師設(shè)計好板子,軟件工程師寫程序。為了更好地鍛煉自己,所以我采用了后者。艱難地修正了一些錯誤,優(yōu)化了器件布局后,發(fā)出第二版。 圖3-1 器件布局3D效果圖3.2 電源部分的硬件設(shè)計考慮到本設(shè)計將采用電池供電,且各個器件均可在3V電壓下工作,因此電源部分設(shè)計較為簡單,只采用了磁珠和電容,抑制高頻噪聲和信號干擾。電池使用一段時間后會使供電電壓下降,這個問題本可以通過采用升壓電路來解決。但是考慮到升壓電路的效率最高只有80%多,會浪費(fèi)較多電量,所以放棄了這個設(shè)計。 圖3-2 電源和芯片濾波電路原理圖 圖3-3 電源模塊3D效果圖3.3 STM32和ADX
25、L345硬件設(shè)計MCU與加速度芯片都是較小的封裝,手工焊接難度大。MCU的封裝為LQFP48,相鄰管腳的中心距離僅僅0.5mm,手工焊接需要格外小心,要想成功焊接需要掌握一些方法。首先,用烙鐵對一個最邊角的焊盤上錫,建議是1號引腳(在PCB上是小白圈標(biāo)記的,在單片機(jī)封裝上是凹陷的小坑標(biāo)記的),然后用鑷子將單片機(jī)按照正確的方位擺正,用烙鐵焊接上1號引腳,多焊接周邊的幾個一腳也是可以的,因為這一步的目的是固定,而不是一步到位,如果歪斜,可以加熱焊錫重新調(diào)整位置。在烙鐵溫度350度的情況下,時間不是太長的話,芯片一般不會被燒壞。MCU固定好之后,用較多的焊錫把其它三個邊的引腳全焊上,同時要稍微用力向
26、下按一下引腳,使引腳可以貼在焊盤上。這時肯定會出現(xiàn)引腳的粘連的,這不是焊接失敗,只要沿著引腳的平行方向把多余的錫帶走就好。使用烙鐵帶走焊錫的過程既要注意烙鐵頭的運(yùn)動軌跡,不可貼著PCB板,以免燙斷走線,又要注意操作速度,太慢的話無法帶走多余的焊錫。最后仔觀察,確保沒有短路。ADXL345的芯片封裝看上去好像間距較大,實則是板子焊接過程中最艱難的部分。由于它的引腳全在底面,只能使用熱風(fēng)槍焊接。首先要用酒精擦一擦焊盤,確保沒有灰塵或者雜物;然后在焊盤上小心的涂上一點焊錫膏,需要保證每個觸點上都有焊錫膏且焊錫膏不能過多。然后將芯片小心放在焊盤上,注意1號引腳的位置,各個引腳與焊盤的位置對正。用鑷子固
27、定住芯片,將熱風(fēng)槍的溫度調(diào)整到350度左右,對準(zhǔn)芯片加熱約10秒。小心鑷子也可能會變燙,最好使用帶有膠皮的鑷子。熱風(fēng)槍需要用最大風(fēng)嘴最小風(fēng)量對準(zhǔn)芯片吹。焊錫膏融化時,要確認(rèn)芯片引腳與焊盤對準(zhǔn)。注意此時PCB非常燙,不要立即用手接觸PCB板。檢查的時候可以用萬用表確定有沒有短路,根據(jù)原理圖可以看到,1、6引腳聯(lián)通,2、4、5引腳聯(lián)通,其它腳聯(lián)通的話就說明短路了。如果有虛焊,可以用烙鐵尖沾一點焊錫壓一下焊盤,焊錫就會自動補(bǔ)到引腳和焊盤之間;如果短路就只能用風(fēng)槍把ADXL345取下來重新焊接。圖3-4 STM32F103C8T6原理圖圖3-5 ADXL345原理圖 圖3-6 STM32F103C8T
28、6的3D效果圖 圖3-7 加速度芯片貼盤效果圖3.4 全彩燈珠的設(shè)計全彩燈珠可簡稱為RGBLED,本設(shè)計采用的是5050封裝。本質(zhì)上來說RGBLED就是三個LED燈。根據(jù)色光三原色原理,紅,綠,藍(lán)三種色的色光就足以產(chǎn)生其它各種顏色的光。燈珠本身白色的,配合變換的燈光,非常漂亮。LED燈的焊接十分簡單,卻容易犯錯,需要注意焊接溫度,不能超過315度,且盡可能在3秒鐘之內(nèi)完成焊接。因為RGBLED非常容易燒壞。LED的正負(fù)極需要事先用萬用表確認(rèn)。注意3個限流電阻的阻值是不一樣的,藍(lán)色LED阻值較小。 圖3-8 全彩燈珠原理圖 圖3-9 全彩燈珠貼盤效果圖3.5轉(zhuǎn)向按鍵與紅外線激光燈的設(shè)計本設(shè)計的預(yù)
29、期要實現(xiàn)轉(zhuǎn)向燈功能,至少有兩種方案:其1是通過讀取ADXL345的值。轉(zhuǎn)彎的時候在轉(zhuǎn)彎的方向會有一個小的加速度,單純檢測這個加速度難度較大。不過正常騎行的時候,轉(zhuǎn)彎一般是需要減速的,這兩個條件放在一起來檢測的話可以減小難度。這個方案的弊端是,只能在轉(zhuǎn)向的操作發(fā)生之后,才顯示轉(zhuǎn)彎,無法在轉(zhuǎn)向之前就給出指示和預(yù)警,所以舍棄此方案。其2是主動觸發(fā)的方案。主動觸發(fā)至少包括兩個方法。1是利用車架與車把的傾角變化。直線騎行的時候車架與車把夾角是垂直的,但是轉(zhuǎn)向的時候夾角就會發(fā)生變化。如果在車架與車把之間放置金屬片,使之向前騎行的時候不接觸,轉(zhuǎn)動車把,也就是轉(zhuǎn)向的時候接觸,就可以檢測到轉(zhuǎn)向。這個方法的缺點也
30、是在轉(zhuǎn)向操作之后才可以做出指示,故舍棄。2是有騎行者主動按下按鍵觸發(fā),就是本設(shè)計采用的方案。轉(zhuǎn)向按鍵是控制紅外線激光燈的開關(guān),也是模式切換的開關(guān)。紅外線激光燈是指示左右轉(zhuǎn)向的信號燈。激光燈發(fā)射出來的光投影到地面是一字線狀,而不是點狀。在光線較暗的情況下可以清楚地看到地上是平行于自行車的紅色線條,這樣就可以警示其它車輛注意自行車的轉(zhuǎn)向。兩者的邏輯關(guān)系非常簡單,按左轉(zhuǎn)按鍵,則左邊的紅外線激光的閃爍,左側(cè)地面形成線狀投影。右側(cè)亦然。但真正實現(xiàn)的時候還需要考慮一些別的因素。首先是按鍵的選型。在實際使用中肯定是不能用輕觸開關(guān)的,太小了。我選擇了一款較大的按鍵開關(guān),有彈簧結(jié)構(gòu),自動復(fù)位。也有螺絲與金屬片,
31、可以方便地固定線。 圖3-10 轉(zhuǎn)向按鍵電路原理圖紅外線激光頭選用了一款3V,5mW的工業(yè)級激光燈頭。由于工作電流可能達(dá)到20mA,所以直接用單片機(jī)的引腳驅(qū)動可能是有一定的危險的,因此電路設(shè)計中采用了NPN型三極管驅(qū)動。三極管工作在開關(guān)狀態(tài),這樣子單片機(jī)的引腳只需要很小的驅(qū)動電流就可以控制紅外線激光頭的亮滅。 圖3-11 紅外線激光頭電路原理圖關(guān)于紅外線激光頭的選型也是很麻煩的一件事。在多數(shù)人的印象中紅外線激光頭非常亮,但是那只是點狀光源,換成線狀的就會發(fā)現(xiàn)亮度比較低。采用較大功率的紅外線激光頭的話會浪費(fèi)較多的電量,同時低電壓大功率的激光頭非常容易損壞。即便是本設(shè)計選用了一款工業(yè)級的激光頭,也
32、還是在調(diào)試過程中就壞掉了好幾個。如果升壓,采用5V或者更高的電壓,會使整個設(shè)計復(fù)雜得多。不但需要更大的體積,來至少串聯(lián)3個電池,還需要穩(wěn)壓管來給芯片提供合適的電壓。多次比較,本設(shè)計最終選取了這款3V,5mW的工業(yè)級激光燈頭。3.6其它硬件設(shè)計SWD調(diào)試接口調(diào)試接口采用了SWD接口。用標(biāo)準(zhǔn)的JTAG調(diào)試口需要5個,而用SWD調(diào)試接口只用4根線,2個IO口,但它們達(dá)到的效果是一樣的,加上SWD調(diào)試也可以使用J-LINK仿真器,所以選擇SWD調(diào)試。 圖3-12 SWD調(diào)試接口原理圖串口和BOOT接口串口調(diào)試是調(diào)試過程中非常有力的工具,它可以直接將需要的數(shù)據(jù)通過串口調(diào)試助手打印到電腦屏幕上,直觀的看到
33、某個變量的值或者IO口的電平狀況,是單片機(jī)開發(fā)的必備接口。所以本設(shè)計也保留了STM32的串口。BOOT可以確定STM32的啟動模式,本設(shè)計出于調(diào)試加速度芯片設(shè)定值的需要,保留了BOOT0接口,這樣子就可以將加速度值寫入系統(tǒng)存儲器,再從系統(tǒng)存儲器驅(qū)動程序,在上位機(jī)上就可以看到加速度值,極大提升了調(diào)試效率。表3-1 啟動模式說明表啟動模式選擇引腳啟動模式說明BOOT1BOOT0X0主閃存存儲器主閃存存儲器被選為啟動區(qū)域01系統(tǒng)存儲器系統(tǒng)存儲器被選為啟動區(qū)域11內(nèi)置SRAM內(nèi)置SRAM被選為啟動區(qū)域 圖3-13 串口和BOOT接口原理晶振由于本設(shè)計中沒有對時鐘要求較高的部分,STM32F103C8T
34、6自帶的8MHz內(nèi)部RC振蕩器就足夠使用了,所以就沒有采用外部晶振。 圖3-14 HSI與系統(tǒng)時鐘(SYSCLK)的關(guān)系4 軟件設(shè)計4.1 STM32固件庫開發(fā)概述意法半導(dǎo)體公司開發(fā)了一套STM32固件庫。所謂的固件庫,其實就是函數(shù)的組合,而這些函數(shù)操作的對象,就是單片機(jī)的各個寄存器。把完成某一功能,比如初始化IO口或者初始化定時器的寄存器集成在一個或者幾個函數(shù)中,這樣子開發(fā)人員在寫代碼的時候就不必直接操作寄存器。STM32當(dāng)然也可以像51系列單片機(jī)一樣直接操作寄存器,但是這種開發(fā)方式需要開發(fā)人員熟練掌握這些寄存器的用法。STM32這種級別的CPU至少集成了幾百個寄存器,全部熟悉這些寄存器對開
35、發(fā)者來說時間花費(fèi)太大,不能快速上手。由于單片機(jī)的代碼主要有C語言編寫(仍有一些對效率要求較高的地方用匯編語言),C語言是一種面向過程的語言,函數(shù)是面向過程的語言中最重要的組成部分,所以直接將寄存器操作封裝在函數(shù)中是可行的,方便的。STM32的固件庫開發(fā)方式是高效的。由于官方固件庫的強(qiáng)大,在軟件設(shè)計中與其說是寫代碼,不如說是組建代碼。本次軟件設(shè)計基本流程就是考慮函數(shù)的預(yù)期功能,了解固件庫函數(shù)的使用方法,調(diào)用函數(shù)實現(xiàn)功能。4.2 程序代碼結(jié)構(gòu)本設(shè)計的代碼遵行著可讀性高,易調(diào)試,易維護(hù)的原則,經(jīng)過了多次修改,最終實現(xiàn)了以下的幾點要求:1. 按照硬件區(qū)分,不同的程序模塊放在不同的.c文件中。2. 同一
36、個硬件按照不同的功能區(qū)分,封裝在不同的函數(shù)中。3. 不同的函數(shù)根據(jù)自己的作用域和工作特點,使用特定的關(guān)鍵字。4. 函數(shù)的命名根據(jù)其功能來確定,多是其功能的英文簡寫。5. 使用到的管腳、中斷和中斷處理函數(shù)按其功能進(jìn)行全英文大寫宏定義。6. 謹(jǐn)慎地使用了全局變量和局部靜態(tài)變量。以上這幾點也是單片機(jī)模塊化編程需要注意的地方。表4-1 程序中.c文件功能說明表程序中的文件名功能acc_sensor.c加速度傳感器的讀、寫、中斷函數(shù)初始化以及中斷處理函數(shù)break_light.c剎車燈模式定時器初始化和處理函數(shù)button.c按鍵定義,中斷初始化和處理函數(shù)color_light.c呼吸燈模式(也可稱為彩
37、燈模式)中斷初始化和處理函數(shù)display_state.c模式選擇的初始化和處理函數(shù)led.c全彩燈珠和紅外線激光燈的定義、初始化和中斷處理power.c定義未使用的引腳,初始化用電模式轉(zhuǎn)換函數(shù)xl345.c加速度芯片初始化和SPI接口處理函數(shù)以上.c文件的功能雖然不相同,但基本結(jié)構(gòu)都是一樣的,以button.c為例說明,別的就不再贅述。表4-2 button.c的代碼結(jié)構(gòu)說明結(jié)構(gòu)功能舉例頭文件將系統(tǒng)寄存器定義和其它文件函數(shù)定義添加到文件#include "stm32f10x.h"#include "utils.h"#include "butt
38、on.h"宏定義將引腳、中斷處理等系統(tǒng)底層的功能起別名,方便閱讀#define BTN_RIGHT_PIN GPIO_Pin_1#define BTN_RIGHT_IRQ EXTI1_IRQn中斷初始化設(shè)定中斷的名字、優(yōu)先級、觸發(fā)方式,管腳映射等static void _initButton(void)static void _initAntiShakeTimer(void)中斷處理函數(shù)或者功能處理函數(shù)根據(jù)預(yù)期功能執(zhí)行相應(yīng)的處理任務(wù)void BTN_LEFT_IRQROUTINE(void)void BTN_ANTISHAKE_IRQROUTINE(void)4.3 main.c結(jié)構(gòu)
39、說明與常見的裸機(jī)程序不同,本設(shè)計的主函數(shù)非常簡潔。這是因為模塊化設(shè)計,將不同的功能封裝到不同的函數(shù)中,所以主函數(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 &quo
40、t;power.h"int main() PWR_SetUnusedPin();/設(shè)置未使用的引腳HW_CommonInit(); /硬件配置,設(shè)置中斷優(yōu)先級和上拉輸入 LED_Init(); /初始化LED引腳和升壓電路引腳HW_InitSysTick(); /配置0.5MS系統(tǒng)時鐘的中斷和優(yōu)先級ACC_Init(); /三軸加速度芯片的初始化 STATE_Init(); /開啟剎車燈模式(默認(rèn)模式),從ADXL讀數(shù)據(jù),開啟定時器BTN_Init(); /按鍵和定時器的初始化while(1) PWR_EnterSLEEPMode(); /開始休眠,等待中斷可以看到其結(jié)構(gòu)僅僅包括頭文
41、件和主函數(shù)兩部分。而主函數(shù)內(nèi)部僅僅做得是初始化,然后在死循環(huán)中進(jìn)入睡眠,等待中斷。這里的while(1)內(nèi)并不是不斷輪詢,而是進(jìn)入睡眠模式,降低功耗。在睡眠模式中 Cortex-M3內(nèi)核停止,所有外設(shè)包括Cortex-M3核心的外設(shè),如NVIC、系統(tǒng)時鐘等仍在運(yùn)行,也就是說仍然可以通過ADXL345芯片的中斷或者按鍵中斷來喚醒MCU。4.4 按鍵功能軟件設(shè)計模式切換在一般情況下是需要一個按鍵的,但是左右轉(zhuǎn)向已經(jīng)各分配一個按鍵了,3個按鍵全部放在車把上的話既不美觀,也不方便,出于簡化設(shè)備的需要,設(shè)定為長按(2秒以上)左按鍵或者右按鍵則改變模式。按鍵功能的邏輯很簡單:檢測到外部中斷線1和2電平為高
42、就消抖,電平仍然變?yōu)楦呔褪前存I按下了,然后閃爍紅外線激光燈,同時進(jìn)行長按檢測。確是長按的話就切換模式。關(guān)于消抖和確定按鍵時長的延時功能也是本設(shè)計考慮的地方。延時可以通過delay函數(shù),也就是讓單片機(jī)不斷地做加法來消耗時間這種方法,或者設(shè)置定時器,采用定時器中斷的方法。反復(fù)對比效果,最終決定由定時器來消抖,用延時函數(shù)來確定按鍵時長。原因如下:在正常騎行中,由于顛簸等因素,按鍵的外部中斷引腳很可能經(jīng)常產(chǎn)生瞬間的干擾電流。也就是說,在沒有按下按鍵的情況下,也可能在外部中斷線上讀到上升電流。嚴(yán)格來說,這里所指的消抖功能并不是消除按鍵按下的過程中瞬間的電平不穩(wěn)定,而是消除沒有按下按鍵,由別的因素產(chǎn)生的干
43、擾電平。如果此時喚醒單片機(jī),執(zhí)行延時函數(shù),則很多的喚醒是不必要的,省電效果不如用定時器,即便CPU繼續(xù)休眠,也可以實現(xiàn)延時功能。確定按下按鍵后,判斷長按還是短按則由延時函數(shù)來判斷??此剖亲寙纹瑱C(jī)做無意義的數(shù)數(shù),實則是因為一方面單片機(jī)已經(jīng)喚醒,執(zhí)行延時函數(shù)不會額外浪費(fèi)電量;另一方面為了防止按鍵的定時器中斷被按鍵外部中斷打斷,定時器中斷的優(yōu)先級是比較高的,此時仍然使用定時器中斷可能丟失其它中斷。這里需要說明的是按鍵的定時器中斷和外部中斷的關(guān)系。兩者優(yōu)先級均為1,但定時器中斷不會被外部中斷打斷。定時器中斷的開啟是在外部中斷的執(zhí)行函數(shù)中進(jìn)行的。外部中斷線的第二次電平判斷發(fā)生在定時器中斷的處理函數(shù)中。定
44、時器設(shè)定的時長就是外部中斷線(也就是按鍵的檢測引腳)兩次有效高電平之間的延時函數(shù)。等待外部中斷1或者2觸發(fā)設(shè)定定時器2開啟進(jìn)入定時器2處理函數(shù),關(guān)閉定時器,檢測案件引腳電平30毫秒過后干擾,不處理讀取PB1和PB2的電平進(jìn)入右按鍵處理函數(shù)進(jìn)入左按鍵處理函數(shù)判斷按鍵低電平 高電平PB2為高電平PB1為高電平圖 4-1 按鍵觸發(fā)流程圖左/右按鍵處理函數(shù)紅外線激光燈頭閃爍2次,用時約2秒再次檢測左/右按鍵切換模式?jīng)]有按下,是短按仍然按下,長按閃爍8次結(jié)束按鍵處理圖 4-2 按鍵處理流程圖4.5 ADXL345的軟件設(shè)計ADXL345與單片機(jī)之間通過SPI協(xié)議連接,本文2.2已經(jīng)介紹過了。剎車狀態(tài)的判
45、斷方法是:計算X,Y,Z軸加速度的平均值,每次比較當(dāng)前加速度和平均加速度的差值,從而判斷是否有狀態(tài)變化。這樣可以減小安裝傾斜造成的測量誤差。不過安裝的時候仍然要盡量使加速度芯片與地面垂直,否則會增加錯誤率。比較加速度的時候除了水平方向,豎直方向的加速度也考慮在內(nèi),因為預(yù)期功能中有檢測到連續(xù)震動時喚醒的功能。參數(shù)的調(diào)整時使用了STM32的BOOT啟動功能,將測量到的加速度值記錄在單片機(jī)的flash中,下次啟動時輸出。這樣可以收集到騎行狀態(tài)中的加速度值,下次調(diào)整參數(shù)時依據(jù)記錄的數(shù)值來調(diào),提高了效率?,F(xiàn)在加速度傳感器的參數(shù)基本上是一個可用的狀態(tài),靈敏度還算比較高,誤亮的幾率很小(加速較快時誤亮)。A
46、DXL芯片與單片機(jī)之間通信的邏輯很簡單,見下邊的流程圖。判斷是否超過30秒哦亮紅燈,剎車亮黃燈,計時30秒單片機(jī)推出睡眠模式,進(jìn)入剎車燈模式?jīng)]接受加速度值喚醒單片機(jī)加速度芯片檢測到連續(xù)震動判斷加速度剎車沒有剎車判斷剎車狀態(tài)變化剎車沒有剎車沒超過超過30秒關(guān)閉LED,休眠圖4-3 加速度芯片與單片機(jī)通信流程圖4.6 模式切換的軟件設(shè)計本設(shè)計中單片機(jī)主要工作在正常模式和睡眠模式。正常工作模式包括了剎車燈模式和呼吸燈模式。它們的區(qū)別和聯(lián)系見下圖圖4-3 正常模式與睡眠模式關(guān)系示意圖剎車燈模式和呼吸燈模式的轉(zhuǎn)換是由一個模式標(biāo)志位g_DisState決定的。g_DisState的值取自一個枚舉類型。en
47、um DISPLAY_STATESTATE_BREAK_LIGHT, /剎車燈STATE_COLORLIGHT, /呼吸燈STATE_MAX, /此模式重新回到剎車燈; 這個枚舉類型決定了剎車燈是初始狀態(tài)。狀態(tài)的轉(zhuǎn)換是靠函數(shù)STATE_NextState()來執(zhí)行的。轉(zhuǎn)換時只需要g_DisState+,就可以改變標(biāo)志位。邏輯上是非常簡單的。void STATE_NextState(void) g_DisState+; if (STATE_MAX = g_DisState) /再按一下回到默認(rèn)狀態(tài)g_DisState = STATE_BREAK_LIGHT;STATE_SetState(enum
48、 DISPLAY_STATE)g_DisState);return; 不同模式的處理函數(shù)都是通過一個指針函數(shù)切換的。typedef void (*ACC_IRQHandler)(u8 irq); 定義了一個函數(shù)指針,相當(dāng)于把類型 void (*)(u8 irq),取了一個別名叫做 ACC_IRQHandler。然后通過語句ACC_IRQHandler handler,g_handler = handler;就傳遞了處理函數(shù)。handler在blk_start,color_start,這兩個模式開始函數(shù)中被賦值。表4-3 剎車燈模式和呼吸燈模式的對比表模式全彩燈珠紅外線激光燈加速度傳感器退出剎車
49、燈模式紅色高亮表示剎車,紫色(青色)表示正常行駛無操作不亮按下按鍵對應(yīng)方向的閃爍工作,不停向單片機(jī)提供加速度值以供判斷剎車與否長按轉(zhuǎn)向按鍵進(jìn)入呼吸燈模式靜止30秒睡眠呼吸燈模式色彩漸變,兩燈交替閃爍常亮,在地面上投影出兩條光線按下按鍵對應(yīng)方向仍閃爍不工作長按轉(zhuǎn)向按鍵進(jìn)入剎車燈模式靜止不會進(jìn)入睡眠狀態(tài)5 總結(jié)5.1 在調(diào)試過程中出現(xiàn)的問題和解決辦法1. 網(wǎng)絡(luò)標(biāo)號寫錯導(dǎo)致的PCB錯誤。由于原理圖中,ADXL345與STM32的喚醒線網(wǎng)絡(luò)標(biāo)號不一致,一個是WKUP,一個是WAKEUP,導(dǎo)致PCB中這兩個本該連接的引腳沒能連接。解決辦法:跳線。由于單片機(jī)引腳很小,加速度芯片特殊的封裝更是看不到引腳,所
50、以這個跳線的難度設(shè)置比焊接還大。并且即便跳線的一段粘到來對應(yīng)引腳上,由于受力面積太小,輕輕一拽就掉了(我因為這個原因直接拽掉了加速度芯片的焊盤,報廢了一個板子),所以跳線成功后就直接用熱膠槍把線固定在了板子上。2. 全彩燈珠封裝畫錯,正負(fù)極畫反了。解決辦法:還好是二極管,接反了也不會有太大損害。在原理圖中看不出來畫錯了,是因為錯在這個元器件的原理圖和封裝是自己畫的,沒能看出來引腳反了。第一個燈的解決方案是跳線6根。用笨的方法修正,但是板子也變得很難看。第二個燈的解決方案是把全彩燈珠進(jìn)行中心對稱,由下列左圖的方位改成了右邊的樣子,不過原先的燈的順序中第1個和第3個就互換了,由BRG變?yōu)镚RB。相
51、應(yīng)的藍(lán)色和綠色燈珠的限流電阻也需要換一下。3. 接插件封裝沒有注意,直接使用了標(biāo)準(zhǔn)庫中Header 4*1的封裝,所以SWD的封裝僅僅是2.54間距的單排插針。解決辦法:手頭有一個正點原子的戰(zhàn)艦開發(fā)板,里邊有一個J-LINK,翻了一下數(shù)據(jù)手冊,發(fā)現(xiàn)JTAG接口可以用4根線完成SWD調(diào)試,就按照引腳說明接了4跟杜邦線在板子的4根單排插針上。1號引腳VCC <=> VCC7號引腳TMS <=> SWDIO9號引腳TCK <=> SWDCLK4號引腳GND <=> GND圖5-1 JTAG用作SWD調(diào)試示意圖5.2 在軟件設(shè)計中總結(jié)的技巧1. 先測試硬件,再進(jìn)行模塊化編程。由于硬件電路是自己設(shè)計并且手工焊接的,很可能不可靠,所以在寫代碼之前先寫一些非常簡單的小程序測試一下某塊硬件是否可用。如led與紅外線激光燈的測試,僅僅需要一個GPIO_SetBits函數(shù)就可以看到亮不亮。隨后進(jìn)行模塊化編程,各個模塊分開來寫,將這個模塊的功能調(diào)試完畢再進(jìn)行下一個模塊。調(diào)試好的模塊函數(shù)直接用關(guān)鍵字static隱藏在本文件中。2. 了解嵌入式C語言的特點,結(jié)合實際使用嵌入式C語言編程技巧由于在學(xué)校時老師講述的C語言課程與嵌入式并沒有什么聯(lián)系,其深度與效果差不多只能讓學(xué)生記住黑窗口與printf,這樣的C基礎(chǔ)在組建本設(shè)計的代碼的時候還是很有
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度配音演員聘用合同
- 二零二五年度珠寶店安全保衛(wèi)人員聘用合同
- 二零二五年度影視聲音后期制作合同(封面設(shè)計新穎)
- 二零二五年度美發(fā)行業(yè)國際交流與合作協(xié)議
- 二零二五年度國際貿(mào)易知識產(chǎn)權(quán)傭金協(xié)議
- 二零二五年度分手補(bǔ)償協(xié)議書及子女教育費(fèi)用承擔(dān)
- 2025年度股份代持股份占比調(diào)整合同協(xié)議書模板
- 2025年度酒店餐飲服務(wù)兼職員工合同
- 二零二五年度隱名股東股權(quán)轉(zhuǎn)讓及管理權(quán)移交協(xié)議
- 二零二五年度足療養(yǎng)生店轉(zhuǎn)讓與品牌授權(quán)使用合同
- 人工智能崗位招聘筆試題及解答(某大型央企)2025年
- 緊急停車按鈕的安全設(shè)置要求
- 2024年玩具陀螺項目可行性研究報告
- 城區(qū)綠地養(yǎng)護(hù)服務(wù)費(fèi)項目成本預(yù)算績效分析報告
- v建筑主墩雙壁鋼圍堰施工工藝資料
- 新部編人教版六年級道德與法治下冊全冊全套課件
- 我國互聯(lián)網(wǎng)公司資本結(jié)構(gòu)分析-以新浪公司為例
- 【藍(lán)天幼兒園小一班早期閱讀現(xiàn)狀的調(diào)查報告(含問卷)7800字(論文)】
- 糧油機(jī)械設(shè)備更新項目資金申請報告-超長期特別國債投資專項
- 個體戶的食品安全管理制度文本
- 部編版道德與法治七年級下冊每課教學(xué)反思
評論
0/150
提交評論