一、簡介
智慧車載模塊是一款集超聲波測距以及報警電路的模塊。模塊可提供2cm-300cm的非接觸式距離感測功能,測距精度可達(dá)2cm,能將測量距離轉(zhuǎn)化為具有一定寬度的脈沖輸出;聲光報警電路由外部控制,當(dāng)外部處理器判斷距離達(dá)到預(yù)警設(shè)定值時,控制報警電路工作。
智慧車載模塊目前只是一個簡單的車距測試模塊,隨著它的功能逐步完善,其發(fā)展的方向?qū)⒏訉拸V。比如:智慧車載模塊可完善成為智能車載資通訊電子系統(tǒng),車輛自動/輔助駕駛系統(tǒng)、駕駛?cè)祟?、防撞預(yù)警、車載自我診斷系統(tǒng)(On Board Diagnostics,OBD)、胎壓檢測裝置(TPMS)、車道偏離警示系統(tǒng)(LWDS)、前方碰撞預(yù)警系統(tǒng)(FCWS)及后方碰撞預(yù)警系統(tǒng)等智慧車(Smart Car)相關(guān)應(yīng)用。
本文基于瑞芯微RK2206芯片 + LiteOS操作系統(tǒng),通過gpio控制智慧車載E53模塊,實現(xiàn)智慧車載模塊和開發(fā)板的互相通信功能。
二、硬件電路設(shè)計
1.整體硬件電路設(shè)計
智慧車載模塊硬件電路如圖1所示,電路中包含了E53接口連接器,EEPROM存儲器、超聲波處理電路和聲光報警電路。
圖1 硬件電路圖
超聲波測距芯片,選用CS-100A,其是一款工業(yè)級超聲波測距芯片,內(nèi)部集成超聲波發(fā)射電路,超聲波接收電路,數(shù)字處理電路等,單片即可完成超聲波測距,測距結(jié)果通過脈寬的方式進(jìn)行輸出。
CS100A配合使用40KHz的開放式超聲波探頭,在超聲波發(fā)射端并聯(lián)一個電阻R2到地和8MHz的晶振,即可實現(xiàn)高性能的測距功能,電阻R2的大小決定了超聲波測量的距離。
三極管Q1為NPN管,基極為高電平時,三極管才能夠?qū)ǎ澍Q器需PWM波驅(qū)動,人耳可識別的頻率范圍為20Hz-20KHz,故PWM頻率需在該范圍內(nèi),我們默認(rèn)使用3KHz的PWM波驅(qū)動。
小凌派-RK2206開發(fā)板與智慧車載模塊均帶有防呆設(shè)計,故很容易區(qū)分安裝方向,直接將模塊插入到開發(fā)板的E53母座接口上即可,安裝如圖2所示。
圖2 硬件連接圖
2.智慧車載電路設(shè)計
硬件資源圖如下所示:
引腳名稱開發(fā)者可在硬件資源圖中查看,也可在智慧車載模塊背面查看。
引腳名稱 | 功能描述 |
ECHO | 測距脈寬輸出,高電平的寬度表示超聲波往返時間差 |
TRIG | 測距出發(fā),輸入10us的高電平脈沖,E53模塊開始測距 |
BUZZER | 蜂鳴器控制 |
LED_Warning | LED控制線,低電平有效 |
I2C_SCL | I2C時鐘信號線 |
I2C_SDA | I2C數(shù)據(jù)信號線 |
GND | 電源接地引腳 |
3V3 | 3.3V電源輸入引腳 |
GND | 電源接地引腳 |
三、程序設(shè)計
本實驗使用智慧車載模塊模擬智慧車載測距應(yīng)用。超聲波模塊發(fā)送并接收信號,通過發(fā)射和接收信號的時間差來計算實際測量的距離;當(dāng)測量的距離小于預(yù)先設(shè)置的閾值時,驅(qū)動蜂鳴器報警,點亮告警LED燈。
1. 主程序設(shè)計
如圖6.3.3所示,為智慧車載主程序流程圖,開機(jī)LiteOS系統(tǒng)初始化后,進(jìn)入主程序先初始化智慧車載模塊。程序進(jìn)入主循環(huán),采用輪詢的方式,2秒測量一次距離,當(dāng)測量到的距離小于等于20厘米時,控制蜂鳴器響,告警燈亮起;當(dāng)測量到的距離大于20厘米時,蜂鳴器不響應(yīng),告警燈熄滅。
圖6.3.3 主程序流程圖
{
unsigned int ret = 0;
/* 每個周期為200usec,占空比為100usec */
unsigned int duty_ns = 500000;
unsigned int cycle_ns = 1000000;
float distance_cm = 0.0;
/*智慧車載模塊初始化*/
e53_iv01_init();
while (1)
{
/*獲取智慧車載模塊測量的距離*/
ret = e53_iv01_get_distance(&distance_cm);
if (ret == 1)
{
printf("distance cm: %f\n", distance_cm);
/*距離小于等于20cm,開啟蜂鳴器告警,點亮LED告警燈;
否則,關(guān)閉蜂鳴器,熄滅LED告警燈*/
if (distance_cm <= 20.0)
{
e53_iv01_buzzer_set(1, duty_ns, cycle_ns);
e53_iv01_led_warning_set(1);
}
else
{
e53_iv01_buzzer_set(0, duty_ns, cycle_ns);
e53_iv01_led_warning_set(0);
}
}
LOS_Msleep(2000);
}
}
2. 初始化程序設(shè)計
智慧車載初始化程序主要分為IO初始化和PWM設(shè)備初始化兩部分。
IO初始化程序主要設(shè)置GPIO0_PC4為輸出模式,作為超聲波測距Trig控制管腳;設(shè)置GPIO0_PA5為輸出模式,作為LED_WARNING告警燈控制管腳;設(shè)置GPIO_PA2為輸入模式,作為超聲波測距Echo控制管腳。
{ /* Trig引腳設(shè)置為GPIO輸出模式 */ PinctrlSet(E53_IV01_TRIG_GPIO, MUX_FUNC0, PULL_KEEP, DRIVE_KEEP); LzGpioInit(E53_IV01_TRIG_GPIO); LzGpioSetDir(E53_IV01_TRIG_GPIO, LZGPIO_DIR_OUT); E53_IV01_TRIG_Clr(); /* LED告警燈引腳設(shè)置為GPIO輸出模式 */ PinctrlSet(E53_IV01_LED_WARNING_GPIO, MUX_FUNC0, PULL_KEEP, DRIVE_KEEP); LzGpioInit(E53_IV01_LED_WARNING_GPIO); LzGpioSetDir(E53_IV01_LED_WARNING_GPIO, LZGPIO_DIR_OUT);e53_iv01_led_warning_set(0);
/* Echo引腳設(shè)置為GPIO輸入模式 */ PinctrlSet(E53_IV01_ECHO0_GPIO, MUX_FUNC0, PULL_KEEP, DRIVE_KEEP); LzGpioInit(E53_IV01_ECHO0_GPIO); LzGpioSetDir(E53_IV01_ECHO0_GPIO, LZGPIO_DIR_IN);
}
初始化PWM7設(shè)備,使用PWM7作為蜂鳴器的控制源。
{ /* 初始化pwm */ PinctrlSet(E53_IV01_BUZZER_GPIO, MUX_FUNC2, PULL_DOWN, DRIVE_KEEP); PwmIoInit(m_buzzer_config); LzPwmInit(E53_IV01_PWM_IO); return 0;}
3. 距離測量程序設(shè)計
發(fā)送至少10us的高電平給智慧車載,觸發(fā)其開始工作;等待200ms,整個測距最長為66ms,獲取Echo管腳的電平,當(dāng)高電平時獲取一個時間戳,當(dāng)?shù)碗娖綍r再獲取一個時間戳,兩個時間戳的差值即為超聲波測距所產(chǎn)生的時間。
{ uint8_t value = 0; m_echo_info.flag = EECHO_FLAG_CAPTURE_RISE;
while (1) { LzGpioGetVal(E53_IV01_ECHO0_GPIO, &value); if (value == LZGPIO_LEVEL_HIGH) { m_echo_info.time_rise = *m_ptimer5_current_value_low; m_echo_info.flag = EECHO_FLAG_CAPTURE_FALL; break; } }
while (1) { LzGpioGetVal(E53_IV01_ECHO0_GPIO, &value); if (value == LZGPIO_LEVEL_LOW) { m_echo_info.time_fall = *m_ptimer5_current_value_low; m_echo_info.flag = EECHO_FLAG_CAPTURE_SUCCESS; break; } }
/* 釋放信號量 */ LOS_SemPost(m_task_sem);}
獲得超聲波測距的時間后,通過公式計算距離,計算公式:距離 = 時間差 * 340米/秒 / 2 * 100厘米/米
{ float f_time = (float)time; float f_freq = (float)freq; /* 距離 = 時間差 * 340米/秒 / 2(超時波來回2次) * 100厘米/米 */ *cmeter = f_time / f_freq * 170.0 * 100.0;}
四、編譯過程
1、搭建和下載源代碼
我已將OpenHarmony源代碼上傳到Gitee社區(qū)中,大家可以根據(jù)以下網(wǎng)址下載。
https://gitee.com/Lockzhiner-Electronics/lockzhiner-rk2206-openharmony3.0lts
注意:編譯環(huán)境可根據(jù)以下網(wǎng)址來操作:https://gitee.com/Lockzhiner-Electronics/lockzhiner-rk2206-openharmony3.0lts/blob/master/vendor/lockzhiner/rk2206/README_zh.md
2、打開sdk下面路徑的文件
/vendor/lockzhiner/rk2206/samples/c4_e53_intelligent_vehicle_01 /e53_intelligent_vehicle_01_example.c
3、修改編譯腳本
修改 vendor/lockzhiner/rk2206/sample 路徑下 BUILD.gn 文件,指定 e53_iv01_example 參與編譯。
"./c4_e53_intelligent_vehicle_01:e53_iv01_example",
修改 device/lockzhiner/rk2206/sdk_liteos 路徑下 Makefile 文件,添加 -le53_iv01_example 參與編譯。
hardware_LIBS = -lhal_iothardware -lhardware -le53_iv01_example
3、編譯固件
hb set -root .hb sethb build -f
4、燒寫固件
請參考Gitee網(wǎng)址的說明手冊(“燒錄打印”章節(jié)):https://gitee.com/Lockzhiner-Electronics/lockzhiner-rk2206-openharmony3.0lts/blob/master/device/rockchip/README_zh.md
五、實驗結(jié)果
程序編譯燒寫到開發(fā)板后,按下開發(fā)板的RESET按鍵,通過串口軟件查看日志如下;智慧車載模塊超聲波探頭正對著墻壁進(jìn)行測距,移動模塊到不同的距離,當(dāng)測量的距離小于等于20厘米時,蜂鳴器響起,告警燈亮起;當(dāng)測量的距離大于20厘米時,蜂鳴器不響應(yīng),告警燈熄滅。
========== E53 IV Example ==========distance cm: 23.89========== E53 IV Example ==========distance cm: 23.90
好了,今天的課程就到這里,我們下次再見!
-
開發(fā)板
+關(guān)注
關(guān)注
25文章
5093瀏覽量
97800
發(fā)布評論請先 登錄
相關(guān)推薦
評論