当前位置: 首页 > news >正文

AiCube 试用 - ADC 水位监测系统

AiCube 试用 - ADC 水位监测系统

水位检测在水资源管理、城市防洪、农业灌溉、家用电器和工业生产等多领域发挥积极建设作用。利用水位传感器,可以实现水资源的智能管理,提高生产效率。

本文介绍了擎天柱开发板利用 AiCube 工具快速创建 I/O 电压读取,并进一步结合水位传感器,实现水位监测的项目设计。

项目介绍

该项目分为两部分

  • ADC 电压转换和采集;

  • 水位传感器模拟电压信号的读取与水位高度转换。

项目方案

  1. ADC 获取模拟通道 I/O 接口的模拟值;
  2. 电压转换,获取 I/O 电压值;
  3. 连接水位传感器,进行电压-水位校准;
  4. 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 .

代码

代码包括两部分:

  1. ADC 采集水位传感器模拟信号的电压;
  2. 水位高度转换和 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 系列单片机的快速开发和应用提供了参考。

相关文章:

  • 如何培养团队的责任感与归属感
  • 多节点同步协同电磁频谱监测任务分配方法简要介绍
  • 【vue3】购物车实战:从状态管理到用户体验的全流程实现
  • 测量电机的电阻、电感、磁链常数和极对数办法
  • Go语言之路————指针、结构体、方法
  • Python 基础核心知识
  • (done) 吴恩达版提示词工程 6. 转换 (翻译,通用翻译,语气风格变换,文本格式转换,拼写检查和语法检查)
  • javaWeb开发---前后端开发全景图解(基础梳理 + 技术体系)
  • 2025-4-25 情绪周期视角复盘(mini)
  • view、reshape、resize 的区别
  • 简单的 shell 程序
  • 前端-介绍一个好用的波浪背景生成器
  • LeetCode热题100--438.找到字符串中所有字母异位词--中等
  • 参数规模:衡量大语言模型体量的标尺
  • 互联网的下一代脉搏:深入理解 QUIC 协议
  • iterm2 使用 zmodem(lrzsz)传输文件
  • 大模型——Spring.new快速构建AI驱动的定制化商业应用
  • Linux系统编程 day11 锁 (两天没有更新了,中期完就休息了)
  • 开关电源实战(六)ADDC反激电源
  • 【MySQL数据库】函数操作
  • 程璧“自由生长”,刘卓辉“被旋律牵着走”
  • 网络游戏用户规模和市场销售创新高,知识产权保护面临哪些挑战?
  • 俄罗斯称已收复库尔斯克州,普京发表讲话
  • 乌方称泽连斯基与特朗普进行简短会谈
  • 巴印在克什米尔发生交火
  • 《卿本著者》译后记等内容被指表述不当,江苏人民出版社:即日下架