徐澤++謝天怡
摘 要: 考慮到汽車(chē)的安全性能,設(shè)計(jì)了一款采用STC89C52單片機(jī)為電子控制單元核心的汽車(chē)前照燈遠(yuǎn)近光自動(dòng)切換系統(tǒng)。該系統(tǒng)主要由光強(qiáng)檢測(cè)系統(tǒng)和單片機(jī)系統(tǒng)組成。詳細(xì)介紹了系統(tǒng)的基本原理、理論分析及硬件設(shè)計(jì),并提出了軟件的實(shí)現(xiàn)方法。其中,硬件系統(tǒng)模塊包括處理器模塊、通信模塊、傳感器模塊、顯示模塊和電源模塊。該前照燈系統(tǒng)較智能化,確保了汽車(chē)夜間行車(chē)的安全性。
關(guān)鍵詞: STC89C52; 光敏傳感器; 1602液晶顯示屏; 燈光自動(dòng)切換
中圖分類(lèi)號(hào): TN710?34 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2015)21?0167?04
Microcontroller?based automatic switching system of far
and near light for automobile headlights
XU Ze, XIE Tianyi
(College of Overseas Education, Nanjing University of Posts and Teleconmmunication, Nanjing 210023, China)
Abstract: Considering the safety performance of the vehicle, an automatic switching system of far and near light for automobile headlights was designed, which is taken STC89C52 microcontroller as the core of the electronic control unit. This system is consisted of light intensity detection system and microcontroller system. The fundamental principle, theoretical analysis and hardware design of this system are introduced in detail, and the software implementation method is proposed. The hardware system model is composed of processor module, communication module, sensor module, display module and power module. This headlights system is intelligent, and can ensure the safety performance of the vehicle on night driving.
Keywords: STC89C52; photosensitive sensor; 1602LCD; automatic light switching
0 引 言
隨著日益成熟的交通網(wǎng)絡(luò)的發(fā)展,汽車(chē)成為了人類(lèi)出行不可缺少的交通工具。交通事故的頻繁發(fā)生成為了人們?nèi)諠u擔(dān)憂(yōu)的問(wèn)題,人們更加關(guān)心汽車(chē)的安全性能。根據(jù)報(bào)道的數(shù)據(jù)顯示[1],我國(guó)夜間發(fā)生的交通事故中,70%左右是由于違章使用氙氣燈造成燈光炫目,使駕駛員無(wú)法看清前方路況而發(fā)生的。照明系統(tǒng)是汽車(chē)主動(dòng)安全的重要組成部分之一,如今汽車(chē)前照燈燈光光型單一的傳統(tǒng)照明系統(tǒng)已經(jīng)無(wú)法跟上當(dāng)前汽車(chē)安全性能發(fā)展的趨勢(shì)[1];所以,為了減少交通事故的發(fā)生,考慮到汽車(chē)的人性化設(shè)計(jì)。本文采用STC89C52單片機(jī)設(shè)計(jì)了一款自動(dòng)切換遠(yuǎn)近光的汽車(chē)前照燈系統(tǒng)。這種前照燈系統(tǒng)更加智能化,能消除存在的安全隱患。
1 基本原理及理論分析
目前市面上雖然有搭載AFS系統(tǒng)(Adaptive Front?lighting System,自適應(yīng)前照明系統(tǒng))的汽車(chē),但其功能僅局限于轉(zhuǎn)向大燈輔助汽車(chē)轉(zhuǎn)彎,而不能做到自動(dòng)切換前照燈的遠(yuǎn)近光模式。
本文設(shè)計(jì)的自動(dòng)切換遠(yuǎn)近光汽車(chē)前照燈系統(tǒng)主要由光強(qiáng)檢測(cè)系統(tǒng)和單片機(jī)系統(tǒng)組成。光強(qiáng)檢測(cè)系統(tǒng)檢測(cè)汽車(chē)前方環(huán)境的光強(qiáng),當(dāng)汽車(chē)行駛時(shí),汽車(chē)前方的燈光將會(huì)照射在光強(qiáng)檢測(cè)系統(tǒng)的接收器上,接收器將感測(cè)到的信號(hào)轉(zhuǎn)化為可靠的數(shù)控直流電源,實(shí)現(xiàn)程控的功能,經(jīng)過(guò)A/D轉(zhuǎn)換器轉(zhuǎn)換為模擬電壓[2],將該電壓送給單片機(jī),通過(guò)與內(nèi)置參數(shù)的對(duì)比,發(fā)送控制指令控制汽車(chē)的遠(yuǎn)近燈光,從而實(shí)現(xiàn)最終的汽車(chē)前照燈的遠(yuǎn)近光的自動(dòng)切換,其原理圖如圖1所示。
2 硬件設(shè)計(jì)
整個(gè)硬件系統(tǒng)組成包括處理器模塊、通信模塊、傳感器模塊、顯示模塊和電源模塊。
2.1 單片機(jī)模塊
本文設(shè)計(jì)的智能前照燈系統(tǒng)的監(jiān)控參數(shù)較少,計(jì)算不是特別復(fù)雜,選擇STC89C52單片機(jī)完全可以滿(mǎn)足系統(tǒng)的要求。STC89C52是一個(gè)具有和Atmel公司生產(chǎn)的AT89C52相似結(jié)構(gòu)的微處理器,兼容8051微處理器指令集。 STC89C52是采用CMOS工藝的具有8 KB可編程只讀存儲(chǔ)(ROM)的低功耗、高效率的微處理器[3]。STC89C52有40個(gè)引腳,采用PDIP (雙列直插式組件)封裝[3]。有32個(gè)I/O引腳分為4組,分別為:Port 0(Pin 32 to Pin39),Port 1(Pin0 to Pin7), Port 2(Pin 21 to Pin 28)和Port 3(Pin 10 to Pin 17)。其中Port 3中的所有引腳都有2個(gè)功能。STC89C52單片機(jī)有6個(gè)中斷:2個(gè)外部中斷;3個(gè)定時(shí)器中斷和1個(gè)串口中斷。每一個(gè)中斷都可以被單獨(dú)啟用或禁用。該單片機(jī)模塊不具備I2C總線(xiàn)通信模塊。系統(tǒng)的硬件組成原理圖及實(shí)物圖如圖2,圖3所示。
圖3 智能車(chē)燈系統(tǒng)實(shí)物圖
2.2 通信模塊
本系統(tǒng)串口通信方面采用RS 232串口通信接口。RS 232是由美國(guó)電子工業(yè)協(xié)會(huì)EIA(Electronic Industries Association) 定義的異步傳輸標(biāo)準(zhǔn)接口,通信裝置如圖4所示。其特點(diǎn)為近距離傳輸、穩(wěn)定。通常以DB?9,即9個(gè)引腳的形式出現(xiàn)。
由于STC89C52單片機(jī)具有TTL電平特性,即以電平高低表示邏輯狀態(tài),而RS 232串口是EIA電平特性,以電壓正負(fù)來(lái)表示其邏輯狀態(tài)。所以,在此采用MAXIM公司生產(chǎn)的MAX232電平轉(zhuǎn)換芯片實(shí)現(xiàn)TTL?EIA電平雙向轉(zhuǎn)換[4]。
圖4 RS 232串口通信裝置
MAX232芯片的特點(diǎn)為功耗低,只需5 V電源供電,片內(nèi)集成度高,在本系統(tǒng)中僅用了5個(gè)片外電容。
2.3 傳感器模塊
本系統(tǒng)采用的光敏傳感器是ROHM公司出品的BH1750FVI光照度傳感器,實(shí)物圖如圖5所示。該傳感器內(nèi)部集成A/D轉(zhuǎn)換模塊,采用I2C總線(xiàn)通信協(xié)議,16位數(shù)字輸出。該傳感器的優(yōu)點(diǎn)在于分辨率高,其光強(qiáng)測(cè)量范圍為1~65 535 lx。選用該傳感器的一個(gè)重要原因在于其擁有接近人眼視覺(jué)的光譜靈敏度特性,光源依賴(lài)性弱,日光、白熾燈、鹵素?zé)?、氙燈都可以,并且?guī)缀醪皇芗t外線(xiàn)的影響。
2.4 顯示模塊
本系統(tǒng)采用的顯示器是LCD1602工業(yè)字符型液晶,實(shí)物圖如圖6所示。1602液晶顯示屏是一種專(zhuān)門(mén)用來(lái)顯示字母、數(shù)字、符號(hào)等的點(diǎn)陣型液晶模塊,采用標(biāo)準(zhǔn)的16腳接口,其中幾個(gè)編程常用的主要管腳分別是:第4腳寄存器選擇(RS),讀寫(xiě)信號(hào)線(xiàn)(RW)和使能端[5]。在寄存器選擇中,高電平1代表選擇數(shù)據(jù)寄存器,低電平0代表選擇指令寄存器。在讀/寫(xiě)信號(hào)中,高電平1進(jìn)行讀操作,低電平0進(jìn)行寫(xiě)操作。在使能端中,高電平1時(shí)讀取信息,負(fù)跳變時(shí)執(zhí)行指令。
2.5 電源模塊
在電源模塊上,本系統(tǒng)選用USB接口進(jìn)行5 V供電。
3 軟件設(shè)計(jì)
整個(gè)系統(tǒng)需要程序操作的部件主要有傳感器模塊、LCD1602液晶顯示器及用8個(gè)LED燈模擬的汽車(chē)前照燈。因此,程序部分主要分為液晶顯示部分,傳感器驅(qū)動(dòng)部分及LED控制策略及延時(shí)函數(shù)。
3.1 傳感器驅(qū)動(dòng)
模擬I2C通信總線(xiàn)的時(shí)鐘線(xiàn)與數(shù)據(jù)線(xiàn)。
void BH1750_Start() //起始信號(hào)
{
SDA = 1; //拉高數(shù)據(jù)線(xiàn)
SCL = 1; //拉高時(shí)鐘線(xiàn)
Delay5us(); //延時(shí)5 μs
SDA = 0; //產(chǎn)生下降沿
Delay5us(); //延時(shí)5 μs
SCL = 0; //拉低時(shí)鐘線(xiàn)
}
void BH1750_Stop() //停止信號(hào)
{
SDA = 0; //拉低數(shù)據(jù)線(xiàn)
SCL = 1; //拉高時(shí)鐘線(xiàn)
Delay5us(); //延時(shí)5 μs
SDA = 1; //產(chǎn)生上升沿
Delay5us(); //延時(shí)5 μs
}
void BH1750_SendACK(bit ack) //應(yīng)答信號(hào)
{
SDA = ack; //寫(xiě)應(yīng)答信號(hào)
SCL = 1; //拉高時(shí)鐘線(xiàn)
Delay5us(); //延時(shí)5 μs
SCL = 0; //拉低時(shí)鐘線(xiàn)
Delay5us(); //延時(shí)5 μs
}
bit BH1750_RecvACK() //接收應(yīng)答信號(hào)
{
SCL = 1; //拉高時(shí)鐘線(xiàn)
Delay5us(); //延時(shí)5 μs
CY = SDA; //讀應(yīng)答信號(hào)
SCL = 0; //拉低時(shí)鐘線(xiàn)
Delay5us(); //延時(shí)5 μs
return CY;
}
void BH1750_SendByte(BYTE dat) //發(fā)送數(shù)據(jù)
{
BYTE i;
for (i=0; i<8; i++) //8位計(jì)數(shù)器
{
dat <<= 1; //移出數(shù)據(jù)的最高位
SDA = CY; //送數(shù)據(jù)口
SCL = 1; //拉高時(shí)鐘線(xiàn)
Delay5us(); //延時(shí)
SCL = 0; //拉低時(shí)鐘線(xiàn)
Delay5us(); //延時(shí)
}
BH1750_RecvACK();
}
BYTE BH1750_RecvByte() //接收數(shù)據(jù)
{
BYTE i;
BYTE dat = 0;
SDA = 1; //使能內(nèi)部上拉,準(zhǔn)備讀取數(shù)據(jù)
for (i=0; i<8; i++)
{
dat <<= 1;
SCL = 1; //拉高時(shí)鐘線(xiàn)
Delay5us(); //延時(shí)5 μs
dat |= SDA; //讀數(shù)據(jù)
SCL = 0; //拉低時(shí)鐘線(xiàn)
Delay5us(); //延時(shí)5 μs
}
return dat;
}
用STC89C52單片機(jī)驅(qū)動(dòng)BH1750FVI傳感器的主要難點(diǎn)在于該單片機(jī)沒(méi)有I2C總線(xiàn)功能,需要單片機(jī)的兩個(gè)引腳分別充當(dāng)時(shí)鐘線(xiàn)與數(shù)據(jù)線(xiàn)[6],因此需要不停地改變這兩個(gè)引腳的電平高低來(lái)模擬時(shí)鐘信號(hào)與數(shù)據(jù)信號(hào)。
3.2 LCD1602顯示程序
控制LCD1602主要分為寫(xiě)命令,寫(xiě)數(shù)據(jù),初始化三部分,部分程序如下:
void write_com(uchar com) //寫(xiě)指令
{
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar dat) //寫(xiě)數(shù)據(jù)
{
lcdrs=1;
P0=dat;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init() //初始化
{
dula=0;
wela=0;
lcden=0;
write_com(0x38);
write_com(0x0f);
write_com(0x06);
write_com(0x01);
write_com(0x80);
}
3.3 LED控制策略
系統(tǒng)采用8個(gè)LED燈來(lái)代表汽車(chē)前照燈,在程序中分為5種情況來(lái)表示,即8個(gè)全亮,亮6個(gè),亮4個(gè),亮2個(gè),全滅。采用if語(yǔ)句實(shí)現(xiàn)該控制,部分程序如下:
if(a<=100)
P2=0xff;
if(100 P2=0xfc;