AiCube 试用 - ADC 水位监测系统
AiCube 试用 - ADC 水位监测系统
水位检测在水资源管理、城市防洪、农业灌溉、家用电器和工业生产等多领域发挥积极建设作用。利用水位传感器,可以实现水资源的智能管理,提高生产效率。
本文介绍了擎天柱开发板利用 AiCube 工具快速创建 I/O 电压读取,并进一步结合水位传感器,实现水位监测的项目设计。
项目介绍
该项目分为两部分
-
ADC 电压转换和采集;
-
水位传感器模拟电压信号的读取与水位高度转换。
项目方案
- ADC 获取模拟通道 I/O 接口的模拟值;
- 电压转换,获取 I/O 电压值;
- 连接水位传感器,进行电压-水位校准;
- USB 串口打印电压值和水位高度,完成水位的实时监测。
硬件平台
硬件测试平台为基于 AI8051U-34K64 主控的 擎天柱 开发板
I/O 电压采集
使用 AiCube 工具创建 ADC 工程,经过 ADC 转换,计算模拟通道的电压值,并 USB 串口打印电压值。
工程创建
使用 AiCube 工具实现工程的快速创建。
首次安装需添加 Keil 仿真头文件
下载 最新版
AIapp-ISP
软件;解压并打开该软件,右侧操作界面选择并进入
Keil 仿真设置
标签项;选择目标单片机型号 - 添加型号和头文件到 Keil - 选择 Keil 安装目录文件夹 - 确定,提示添加成功;
打开最新版 AIapp-ISP
软件,菜单栏点击 AiCube
标签,进入 项目创建助手
;
选择目标单片机型号 - 填写项目名称 - 设置保存路径 - 点击 下一步
- 进入参数配置界面;
参数配置
勾选 外设
- USB 通用串行总线
项(为了实现 USB 串口打印);
勾选 外设
- ADC,模数转换
项(初始化 ADC 配置);
可根据需求更改参数、模拟通道等。
进入 可视化图形I/O口配置
界面
-
点击 P1.0 管脚,选择 ADC0 项 ;
-
点击 P3.0 和 P3.1 分别配置为 D- 和 D+ ;
设置完成后,点击右下角的 创建项目
,此时初始化完成,自动打开项目。
编译直接生成的工程,确保无误。
代码添加
AiCube 生成项目后,仅需添加 7 行代码,即可实现电压值的计算和 USB 串口输出
u16 Bandgap;void main(void)
{u16 vol;SYS_Init();while (1){USBLIB_OUT_Done(); //查询方式处理USB接收的数据vol = ADC_Convert(0); // 调用自动生成的 ADC 转换函数Bandgap = ADC_Convert(15); // 读取内部基准 ADC(15通道)vol = (u16)((u32)vol * 119 / Bandgap); // 相对电压值计算printf_usb("Analog Voltage: %0.2fV\r\n",(float)vol/100); // 打印电压值delay_ms(500);}
}
这里的电压转换公式参考 Ai8051U 官方示例工程:
18-P1.3做ADC3-使用ADC15测量内部1.19V信号源,计算外部电压VCC
此外,通过多次采集取平均值的方法,可以提高数据精度,详情参考上述官方 Demo 例程。
编译上传
编译代码后生成固件,通过 AIapp-ISP
软件烧录至芯片。
生成的 HEX 烧录固件位于 Objects
文件夹下,
使用 Type-C 数据线连接开发板和电脑,按住 P32
按键的同时,短按 POWER
按键,
此时 Aiapp-ISP 软件自动识别 HID
设备
点击 下载/编程
按钮,待烧录结束,程序自动运行。
此时软件识别出 USB 串口,进入 CDC/HID-串口助手
标签, 打开相应的串口 (波特率 115200 bps
)即可接收芯片打印的数据。
效果演示
ADC 采集 I/O 电压并 USB 打印
Channel 0 (P1.0) 引脚悬空
P1.0 接地
P1.0 接 VCC(5V)
此时完成了 I/O 电压采集和 USB 串口打印电压值的流程。
水位传感器
水位传感器(Water Sensor)可以检测水位高度(检测高度:0 - 40 mm),亦可用作雨滴传感器,用于各种天气状况的监测,检测是否下雨及雨量的大小,广泛应用于汽车自动刮水系统、智能灯光系统和智能天窗系统等。
模块简介
- 当模块上电,电源指示 LED 点亮;
- 工作电压:DC
3.3V - 5V
; - 输出类型:模拟信号;
传感器具有 10 条裸露的铜线,其中 5 条是电源铜线,另外 5 条是感测铜线。
走线隔行平行排列,每两条电源铜线间有一条感测铜线。
模块原理图
参考:水位检测 - Telesky .
引脚定义
- S(信号)为模拟输出;
- +(VCC)为传感器供电;
- –(GND)为接地。
参考:水位传感器 .
运行原理
当水位上升时,更多的电子可以在正负极之间运动,因此电阻减小,ADC 采集的电压值随之增大;
参考:水位传感器如何工作 .
因此根据 ADC 测量传感器输出的电压,便可以确定水位。
硬件连接
Water-Sensor_Signal -> P1.0
硬件连接完成后,终端打印测试,此时输出的电压值应为 0
.
水位校准
由于各地的水质差异,导电性能不同,因此需要根据实际情况进行校准。
-
多次校准,取平均值;
-
每次校正前,需将 PCB 表面的平行铜线擦干,待测得电压为 0 时再置入水中,记录水位值和电压值。
校准数据采集
水位 21 毫米,相应的串口输出电压为 2.65 伏特
……
增加水位高度,采集多组电压-水位数据。
假设 ADC 读取电压(V)与水位高度(mm)为线性相关关系,使用 Excel 软件对上述数据进行拟合
获得拟合表达式 y = 20.674 x - 32.727
.
代码
代码包括两部分:
- ADC 采集水位传感器模拟信号的电压;
- 水位高度转换和 USB 串口打印数值
void main(void)
{u16 vol,wl;SYS_Init();while (1){USBLIB_OUT_Done(); //查询方式处理USB接收的数据vol = ADC_Convert(0);Bandgap = ADC_Convert(15);vol = (u16)((u32)vol * 119 / Bandgap); // voltagewl = (u16)((u32)vol * 20.674 - 3272.7); // water levelprintf_usb("Analog Voltage: %0.2fV, Water Level: %0.2fmm\r\n",(float)vol/100,(float)wl/100); // USB printdelay_ms(500);}
}
注意代码中公式参数的变化,保留两位小数,因此将方程乘以100
效果
编译工程并烧录固件,打开 USB 串口,获得打印数据。
上下移动水位传感器,使探测的水位高度发生变化
相应的 USB 串口打印如下
结果分析
经过多次测量,可以获得较为理想的检测结果。
此外,校准和测量过程中发现 ADC 采集的电压值会随时间逐渐减小,可能原因是
- PCB 板被液体浸润,液体表面张力导致初始时刻覆盖更大面积的铜板,电阻较小,输出电压较大;
- 随着时间推移,表面张力被克服,PCB板液面覆盖面积逐渐平稳下降,此时电压也逐渐减小,最后趋于稳定。
类似“海水退潮”
因此采样和校准时需要等待示数稳定,再记录数值,以提高精度。
总结
本文介绍了 Aiapp-ISP 仿真调试平台软件的 AiCube 工具实现 ADC 电压采集,并以此为基础结合水位传感器实现水位监测系统的项目设计,为 STC 系列单片机的快速开发和应用提供了参考。