令狐昌偉
(湖南汽車工程職業(yè)學(xué)院,湖南 株洲 412000)
近年來,隨著汽車保有量的提高,汽車行駛安全越來越受大家的關(guān)注,車外后視鏡所反饋的信息對(duì)駕駛員駕駛汽車的安全性也越來越重要。據(jù)統(tǒng)計(jì),中國因汽車后視鏡反饋信息不準(zhǔn)確而造成的交通事故占交通事故總數(shù)的30%,因此,車外后視鏡角度調(diào)節(jié)成為了汽車必不可少的裝置之一,隨著汽車行業(yè)的不斷發(fā)展,后視鏡角度調(diào)節(jié)從最初的手動(dòng)到現(xiàn)在的電動(dòng)控制,給駕駛員對(duì)車外信息的捕捉帶來了很大的便利。
本設(shè)計(jì)主要由信號(hào)輸入裝置、控制裝置、執(zhí)行裝置三大部分組成。信號(hào)輸入裝置主要是通過搖桿電位器、LM393組成的信號(hào)檢測(cè)裝置組成,控制裝置是采用了STM32F103做為主控芯片,主要是將輸入信號(hào)進(jìn)行數(shù)據(jù)處理,從而控制執(zhí)行裝置中的兩個(gè)電機(jī)實(shí)現(xiàn)正轉(zhuǎn)與反轉(zhuǎn)功能。系統(tǒng)結(jié)構(gòu)框圖如圖1所示。
圖1 設(shè)計(jì)框圖
STM32F103C8T6單片機(jī)最小系統(tǒng)電路包括系統(tǒng)供電電路、系統(tǒng)復(fù)位電路、時(shí)鐘電路等,它是保證單片機(jī)能夠正常工作的基本電路,電路如圖2所示,時(shí)鐘電路由晶振Y1和起振電容C1、C2組成的系統(tǒng)待機(jī)低功耗時(shí)鐘,另外由Y2、C3、C4和R2晶振電阻組成,該時(shí)鐘主要用于外部高頻,PLL倍頻等。復(fù)位電路由電阻R3、電容C5和按鍵S1組成,按下S1鍵時(shí)可以實(shí)現(xiàn)手動(dòng)復(fù)位。
圖2 最小系統(tǒng)圖
搖桿是作為用戶輸入操作的元器件,但其本身只是個(gè)電位器,所以需要配合外部電路組合成一個(gè)比較電路,從而獲得用戶輸入的行為值。在本設(shè)計(jì)的搖桿輸入模塊里,采用的是LM393和可調(diào)電位器組成的比較輸出電路,具有靈敏度可調(diào)性和輸出準(zhǔn)確性。搖桿電位器的電壓值與調(diào)整好的比較電壓值進(jìn)行比較,檢測(cè)出目前搖桿所處的具體位置,根據(jù)OUT1和OUT2來決定步進(jìn)電機(jī)1的動(dòng)作,OUT3和OUT4來決定步進(jìn)電機(jī)2動(dòng)作,如此即可根據(jù)兩個(gè)步進(jìn)電機(jī)的正反轉(zhuǎn)來控制汽車外后視鏡的旋轉(zhuǎn)角度。信號(hào)比較檢測(cè)電路如圖3所示。
圖3 信號(hào)比較檢測(cè)電路
ULN2003是集成達(dá)林頓管IC,內(nèi)部還集成了消線圈反電動(dòng)勢(shì)的二極管,是一個(gè)雙列直插式16腳封裝IC,最大驅(qū)動(dòng)電壓可達(dá)50V,電流可達(dá)500mA,輸入電壓為5V,適用于TTL、COMS電路,它具有電流增益高、工作電壓高、溫度范圍寬、帶負(fù)載能力強(qiáng)等特點(diǎn),適應(yīng)于各類要求高束大功率驅(qū)動(dòng)的系統(tǒng)。
步進(jìn)電機(jī),我采用了四相小步進(jìn)電機(jī)來帶動(dòng)后視鏡。主要是因?yàn)椴捎妙l進(jìn)電機(jī)的最大的好處是路程長(zhǎng)度可以精確控制,而具不易出現(xiàn)打滑的現(xiàn)象。我們?yōu)殡姍C(jī)提供了單極性直流電源,在控制時(shí),只需對(duì)各相繞組按合適的時(shí)序通電,即可使步進(jìn)電機(jī)按我們的需要轉(zhuǎn)動(dòng)。步進(jìn)電機(jī)驅(qū)動(dòng)電路如圖4所示。
圖4 步進(jìn)電機(jī)驅(qū)動(dòng)電路
本設(shè)計(jì)主要包括了主程序、輸入檢測(cè)、輸出檢測(cè)和步進(jìn)電機(jī)控制程序組成。通過控制步進(jìn)電機(jī)1和步進(jìn)電機(jī)2來完成對(duì)后視鏡的角度調(diào)節(jié)。步進(jìn)電機(jī)1正轉(zhuǎn)時(shí)后視鏡向北偏轉(zhuǎn),反轉(zhuǎn)時(shí)向南偏轉(zhuǎn),步進(jìn)電機(jī)2正轉(zhuǎn)時(shí)后視鏡向東偏轉(zhuǎn),反轉(zhuǎn)時(shí)向西偏轉(zhuǎn),當(dāng)步進(jìn)電機(jī)1和2同時(shí)正轉(zhuǎn)時(shí),后視鏡可向東北方向偏轉(zhuǎn),步進(jìn)電機(jī)1正轉(zhuǎn),2反轉(zhuǎn)時(shí),即可向西北方向偏轉(zhuǎn),以此類推,可以控制東南和西南方向的偏轉(zhuǎn)控制。要實(shí)現(xiàn)上述控制功能,需要進(jìn)行如下程序設(shè)計(jì),詳見圖5。
圖5 程序設(shè)計(jì)
主程序的基本設(shè)計(jì)思路是將搖桿電位器所傳來的電壓信號(hào)通過輸入信號(hào)檢測(cè)電路進(jìn)行比較輸出,如果電位器處于中心位置時(shí),搖桿電位器中心輸出電壓為2.35V,單片機(jī)將依據(jù)電壓信號(hào)對(duì)搖桿電位器置0信號(hào)進(jìn)行檢測(cè),判斷是否需要控制電機(jī)運(yùn)轉(zhuǎn),如得到搖桿電位器處在非0位置,則會(huì)將此時(shí)比較器輸出的電壓信號(hào)作為步進(jìn)電機(jī)的驅(qū)動(dòng)指令信號(hào),該信號(hào)送入STM32單片機(jī)中進(jìn)行處理,通過數(shù)據(jù)處理后將該指令經(jīng)單片機(jī)輸出送給步進(jìn)電機(jī)驅(qū)動(dòng)電路,從而控制步進(jìn)兩個(gè)步進(jìn)電機(jī)實(shí)現(xiàn)正反轉(zhuǎn),最終使得后視鏡的角度發(fā)生變化。如圖5所示。
通過不斷的對(duì)搖桿位置判斷直至檢測(cè)置0,步進(jìn)電機(jī)停止。
輸入檢測(cè)所采用的是位帶操作,直接讀取寄存器狀態(tài),代碼如下。
#define GPIOA_OOR_Addr (GPIOA_BASE+12)
#define GPIOB_OOR_Addr (GPIOB_BASE+12)
#define GPIOC_OOR_Addr (GPIOC_BASE+12)
#define GPIOD_OOR_Addr (GPIOD_BASE+12)
#define GPIOE_OOR_Addr (GPIOE_BASE+12)
#define GPIOF_OOR_Addr (GPIOF_BASE+12)
#define GPIOG_OOR_Addr (GPIOG_BASE+12)
#define GPIOA_OOR_Addr (GPIOA_BASE+8)
#define GPIOB_OOR_Addr (GPIOB_BASE+8)
#define GPIOC_OOR_Addr (GPIOC_BASE+8)
#define GPIOD_OOR_Addr (GPIOD_BASE+8)
#define GPIOE_OOR_Addr (GPIOE_BASE+8)
#define GPIOF_OOR_Addr (GPIOF_BASE+8)
#define GPIOG_OOR_Addr (GPIOG_BASE+8)
#define PAout(n)BIT_ADDR(GPIOA_OOR_Addr,n)
#define PAin(n) BIT_ADDR(GPIOA_IOR_Addr,n)
#define PBout(n)BIT_ADDR(GPIOB_OOR_Addr,n)
#define PBin(n) BIT_ADDR(GPIOB_IOR_Addr,n)
#define PCout(n)BIT_ADDR(GPIOC_OOR_Addr,n)
#define PCin(n) BIT_ADDR(GPIOC_IOR_Addr,n)
#define PDout(n)BIT_ADDR(GPIOD_OOR_Addr,n)
#define PDin(n) BIT_ADDR(GPIOD_IOR_Addr,n)
#define PEout(n)BIT_ADDR(GPIOE_OOR_Addr,n)
#define PEin(n) BIT_ADDR(GPIOE_IOR_Addr,n)
#define PFout(n)BIT_ADDR(GPIOF_OOR_Addr,n)
#define PFin(n) BIT_ADDR(GPIOF_IOR_Addr,n)
#define PGout(n)BIT_ADDR(GPIOG_OOR_Addr,n)
#define PGin(n) BIT_ADDR(GPIOG_IOR_Addr,n)
通過上述代碼對(duì)位帶操作讀取端口進(jìn)行定義,需要調(diào)用時(shí)直接讀取類似“xflag”類似的寵定義即可檢測(cè)出當(dāng)前端口狀態(tài)。代碼如下。
#include”H.h”
Int main()
{
SystemInit();
STEP_MOTOR_Init();
YG_GPIO_Config();
TIM2_Configuration();
While(1)
{
Auto_Kong(_xflag,_Yflag,Xflag,Yflag);
}}
輸出控制,我們采用的是ULN2003芯片,該芯片只是接收高電平或者低電平就會(huì)在相應(yīng)的驅(qū)動(dòng)輸出端給輸對(duì)應(yīng)的驅(qū)動(dòng)電壓信號(hào),而在本產(chǎn)品中輸出控制我們只采用了GPIOB組的端口,因此,輸出端口的配置我們只需要進(jìn)行普通配置即可。在配置端口的時(shí)候我們需要注意的是PB3和PB4兩個(gè)端口需要有JTAG和SW功能,需要將其重新映射才能作為普通GPIO功能使用。端口配置完成后,首先應(yīng)該給端口賦值,使電機(jī)的狀態(tài)為停止運(yùn)行狀態(tài)。爭(zhēng)對(duì)ULN2003芯片而言,我們只需將端口初始值賦予低電平即可。
設(shè)計(jì)時(shí)采用的是兩個(gè)四相八拍步進(jìn)電機(jī),在進(jìn)行程序設(shè)計(jì)時(shí)將其封裝一個(gè)函數(shù),然后進(jìn)行電機(jī)控制程序設(shè)計(jì),設(shè)計(jì)思路如下。
1)判斷X軸或Y軸電機(jī)的選取狀態(tài)。
2)判斷步進(jìn)電機(jī)的旋轉(zhuǎn)狀態(tài)是正轉(zhuǎn)或反轉(zhuǎn)。
3)有效電機(jī)的狀態(tài)位增/減。
4)判斷狀態(tài)位是否高于7或者低于0,高于7則置0,低于0則置7。
5)輸入到電機(jī)控制函數(shù)。
本設(shè)計(jì)是基于STM32控制車外后視鏡調(diào)節(jié)模塊,由于設(shè)計(jì)中采用高精度、超強(qiáng)抗干擾的內(nèi)部自帶AD轉(zhuǎn)換模塊的單片機(jī)作為主控制器,同時(shí)采用了搖桿控制,能夠更快更準(zhǔn)地調(diào)節(jié)后視鏡的角度,使駕駛員的行車更安全可靠。