分享
收藏
返回
老渔翁
关注
私信
[文章]
小凌派-RK2206开发板:智慧车载案例
凌智电子
RK2206
小凌派
-RK2206
开发板
:智慧车载案例
一、简介
智慧车载模块
是
一款集超声波测距以及报警
威廉希尔官方网站
的模块
。模块可提供
2cm-300cm
的非接触式距离感测功能,测距精度可达
2cm
,能将测量距离转化为
具有一定宽度的脉冲输出;声光报警威廉希尔官方网站 由外部控制,当外部处理器判断距离达到
预警
设定值时,控制报警威廉希尔官方网站 工作。
智慧车载模块目前只是一个简单的车距测试模块,随着它的功能逐步完善,其发展的方向将更加宽广。比如:智慧车载模块可完善成为智能车载资通讯
电子
系统,车辆自动
/
辅助驾驶系统、驾驶人瞌睡警示、防撞预警、车载自我诊断系统(
On Board Diagnos
ti
cs,OBD
)、胎压检测装置(
TPMS
)、车道偏离警示系统(
LWDS
)、前方碰撞预警系统(
FCWS
)及后方碰撞预警系统等智慧车(
Smart Car
)相关应用。
本文基于瑞芯微
RK2206
芯片
+ LiteOS
操作系统,通过
gpio
控制智慧车载
E53
模块,实现智慧车载模块和开发板的互相
通信
功能
。
二、硬件威廉希尔官方网站 设计
1.
整体硬件威廉希尔官方网站 设计
智慧车载
模块硬件威廉希尔官方网站 如图
1
所示,威廉希尔官方网站 中包含了
E
53
接口连接器,
EEPROM
存储器、超声波处理威廉希尔官方网站
和
声光报警威廉希尔官方网站 。
图
1
硬件威廉希尔官方网站 图
超声波测距芯片,选用
C
S-100A
,其是一款工业级超声波测距芯片,内部集成超声波发射威廉希尔官方网站 ,超声波接收威廉希尔官方网站 ,数字处理威廉希尔官方网站 等,单片即可完成超声波测距,测距结果通过脉宽的方式进行输出。
C
S100A
配合使用
4
0KH
z
的开放式超声波探头,在超声波发射端并联一个电阻
R
2
到地和
8
MH
z
的晶振,即可实现高性能的测距功能,电阻
R
2
的大小决定了超声波测量的距离。
三极管
Q
1
为
N
PN
管,基极为高电平时,三极管才能够导通,蜂鸣器需
P
WM
波驱动,人耳可识别的频率范围为
20
H
z-20
KH
z
,故
P
WM
频率需在该范围内,我们默认使用
3
KH
z
的
P
WM
波驱动。
小凌派
-RK2206
开发板与智慧车载模块均带有防呆设计,故很容易区分安装方向,直接将模块插入到开发板的
E53
母座接口上即可,安装如图
2
所示
。
图
2
硬件连接图
2.
智慧车载威廉希尔官方网站 设计
硬件资源图如下所示:
引脚名称开发者可在硬件资源图中查看,也可在智慧车载模块背面查看。
引脚名称
功能描述
ECHO
测距脉宽输出,高电平的宽度表示超声波往返时间差
TRIG
测距出发,输入
10us
的高电平脉冲,
E53
模块开始测距
BUZZER
蜂鸣器控制
LED_Warning
LED
控制线,低电平有效
I2C_SCL
I2C
时钟信号线
I2C_SDA
I2C
数据信号线
GND
电源
接地引脚
3V3
3.3V
电源输入引脚
GND
电源接地引脚
三、程序设计
本实验使用智慧车载模块模拟智慧车载测距应用。超声波模块发送并接收信号,通过发射和接收信号的时间差来计算实际测量的距离;当测量的距离小于预先设置的阈值时,驱动蜂鸣器报警,点亮告警
LED
灯。
1.
主程序设计
如图
6.3.3
所示
,
为智慧车载主程序流程图,开机
LiteOS
系统初始化后,
进入主程序先
初始化智慧车载模块
。程序进入主循环,采用轮询的方式,
2
秒测量一次距离,当测量到
的
距离小于
等于
20
厘米
时,控制蜂鸣器响,告警灯亮起;当测量到的距离大于
20
厘米
时,蜂鸣器不响应,告警灯熄灭。
图
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: %fn", distance_cm);
/*距离小于等于20cm,开启蜂鸣器告警,点亮LED告警灯;
否则,关闭蜂鸣器,熄灭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.
初始化程序设计
智慧车载初始化程序主要分为
IO
初始化和
PWM
设备初始化两部分。
IO
初始化程序主要
设
置
GPIO0_PC
4
为输出模式,作为
超声波测距
Trig
控制
管脚
;
设
置
GPIO
0_PA5
为输出模式,作为
LED_WARNING
告警
灯控制
管脚
;
设
置
GPIO_PA2
为输入模式,作为
超声波测距
Echo
控制
管脚
。
{
/* Trig引脚设置为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告警灯引脚设置为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引脚设置为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);
}
初始化
PWM
7
设备,使用
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.
距离测量程序设计
发送至少
10us
的高电平给智慧车载,触发其开始工作;等待
200ms
,整个测距最长为
66ms
,获取
Echo
管脚的电平,当高电平时获取一个时间戳,当低电平时再获取一个时间戳,两个时间戳的差值即为
超声波测距
所产生的时间。
{
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
社区中,大家可以根据以下网址下载。
https://gitee.com/Lockzhiner-Electronics/lockzhiner-rk2206-openharmony3.0lts
注意:编译环境可根据以下网址来操作:
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
-l
e53_iv01_example
3
、编译固件
hb set -root .
hb set
hb build -f
4
、烧写固件
请参考
Gitee
网址的说明手册(“烧录打印”章节):
https://gitee.com/Lockzhiner-Electronics/lockzhiner-rk2206-openharmony3.0lts/blob/master/device/rockchip/README_zh.md
五、
实验结果
程序编译烧写到开发板后,按下开发板的
RESET
按键,通过串口软件查看日志如下;智慧车载模块
超声波探头正对着墙壁进行测距,移动模块
到不同的距离,当测量的距离小于
等于
20
厘米
时,蜂鸣器响起,告警灯亮起;当测量的距离大于
20
厘米
时,蜂鸣器不响应,告警灯熄灭。
========== E53 IV Example ==========
distance cm: 23.89
========== E53 IV Example ==========
distance cm: 23.90
好了,今天的课程就到这里,我们下次再见!
回帖
(2)
一曲作罢
2022-8-1 11:11:17
很棒的样例,感谢分享
很棒的样例,感谢分享
1
老渔翁:
很高兴得到您的认同,再加油加油,继续可以和大家一起分享OperHarmony!
温暖镜头
2022-8-4 18:31:39
感谢老师分享
感谢老师分享
1
老渔翁:
很高兴得到您的认同,再加油加油,继续可以和大家一起分享OperHarmony!
更多回帖
rotate(-90deg);
回复
我也要说两句
回帖
回复评论
相关经验
小
凌
派
-
RK2206
开发板
:
智慧
车载
小
凌
派
-
RK2206
开发板
:UART控制案例
基于小
凌
派
RK2206
开发板
的EEPROM存储案例
RK2206
HarmonyOS
开发板
试用体验:跑通
RK2206
开发板
【小
凌
派
RK2206
开发板
试用体验】跑通
RK2206
开发板
如何在小
凌
派
RK2206
开发板
上实现
智慧
车载
模块的设计
基于小
凌
派
RK2206
的
智慧
养老院设计
基于小
凌
派
RK2206
开发板
wifi-udp通信实验
小
凌
派
-
RK2206
OpenHarmony
开发板
例程系列之一:ADC按键案例
【小
凌
派
RK2206
开发板
试用体验】小
凌
派
-
RK2206
开发板
智慧
农业模块试用报告
×
长按上方图片保存到相册
复制链接
长按二维码打开
发帖