lijinlei 发表于 2025-4-26 18:58:28

AiCube 试用@STC-ISP V6.95M, ADC 水位监测系统,Ai8051U

<h1>AiCube 试用 - ADC 水位监测系统, Ai8051U</h1>
<p>水位检测在水资源管理、城市防洪、农业灌溉、家用电器和工业生产等多领域发挥积极建设作用。利用水位传感器,可以实现水资源的智能管理,提高生产效率。</p>
<p>本文介绍了 Ai8051U-<strong>擎天柱</strong>开发板 利用 <strong>AiCube</strong> 工具快速创建 I/O 电压读取,并进一步结合<strong>水位传感器</strong>,实现水位监测的项目设计。</p>
<h2>项目介绍</h2>
<p>该项目分为两部分</p>
<ul>
<li><strong>ADC 电压转换和采集;</strong></li>
<li><strong>水位传感器模拟电压信号的读取与水位高度转换。</strong></li>
</ul>
<h3>项目方案</h3>
<ol>
<li><strong>ADC 获取模拟通道 I/O 接口的模拟值;</strong></li>
<li><strong>电压转换,获取 I/O 电压值;</strong></li>
<li><strong>连接水位传感器,进行电压-水位校准;</strong></li>
<li><strong>USB 串口打印电压值和水位高度,完成水位的实时监测。</strong></li>
</ol>
<h3>硬件平台</h3>
<p>硬件测试平台为基于 AI8051U-34K64 主控的 <strong>擎天柱</strong> 开发板</p>
<p><img src="data/attachment/forum/202504/26/184915pailza3ik7o9u9iu.jpg" alt="board.jpg" title="board.jpg" /></p>
<h2>I/O 电压采集</h2>
<p>使用 AiCube 工具创建 ADC 工程,经过 ADC 转换,计算模拟通道的电压值,并 USB 串口打印电压值。</p>
<h3>工程创建</h3>
<p>使用 AiCube 工具实现工程的快速创建。</p>
<p>首次安装需添加 Keil 仿真头文件</p>
<blockquote>
<p><a href="https://www.stcai.com/gjrj">下载</a> 最新版 <code>AIapp-ISP</code> 软件;</p>
<p>解压并打开该软件,右侧操作界面选择并进入 <code>Keil 仿真设置</code> 标签项;</p>
<p>选择目标单片机型号 - 添加型号和头文件到 Keil - 选择 Keil 安装目录文件夹 - 确定,提示添加成功;</p>
</blockquote>
<p>打开最新版 <code>AIapp-ISP</code> 软件,菜单栏点击 <code>AiCube</code> 标签,进入 <code>项目创建助手</code> ;</p>
<p>选择目标单片机型号 - 填写项目名称 - 设置保存路径 - 点击 <code>下一步</code> - 进入参数配置界面;</p>
<h4>参数配置</h4>
<p>勾选 <code>外设</code> - <code>USB 通用串行总线</code> 项(为了实现 USB 串口打印);</p>
<p><img src="data/attachment/forum/202504/26/185008ymfws4kfwd4ykg6y.jpg" alt="AiCube_USB_print.jpg" title="AiCube_USB_print.jpg" /></p>
<p>勾选 <code>外设</code> - <code>ADC,模数转换</code> 项(初始化 ADC 配置);</p>
<p><img src="data/attachment/forum/202504/26/185049tagie1jaf6iuguu4.jpg" alt="AiCube_ADC.jpg" title="AiCube_ADC.jpg" /></p>
<p>可根据需求更改参数、模拟通道等。</p>
<p>进入 <code>可视化图形I/O口配置</code> 界面</p>
<ul>
<li>点击 P1.0 管脚,选择 ADC0 项 ;</li>
<li>点击 P3.0 和 P3.1 分别配置为 D- 和 D+ ;</li>
</ul>
<p><img src="data/attachment/forum/202504/26/185106b2h0nhtjov1o6r16.jpg" alt="AiCube_Pin.jpg" title="AiCube_Pin.jpg" /></p>
<p>设置完成后,点击右下角的 <code>创建项目</code> ,此时初始化完成,自动打开项目。</p>
<p>编译直接生成的工程,确保无误。</p>
<h3>代码添加</h3>
<p>AiCube 生成项目后,仅需添加 <strong>7</strong> 行代码,即可实现电压值的计算和 USB 串口输出</p>
<pre><code>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(&quot;Analog Voltage: %0.2fV\r\n&quot;,(float)vol/100); // 打印电压值
      delay_ms(500);
    }
}
</code></pre>
<p>这里的电压转换公式参考 Ai8051U 官方示例工程:</p>
<p><code>18-P1.3做ADC3-使用ADC15测量内部1.19V信号源,计算外部电压VCC</code></p>
<p>此外,通过多次采集取平均值的方法,可以提高数据精度,详情参考上述官方 Demo 例程。</p>
<h3>编译上传</h3>
<p>编译代码后生成固件,通过 <code>AIapp-ISP</code> 软件烧录至芯片。</p>
<p>生成的 HEX 烧录固件位于 <code>Objects</code> 文件夹下,</p>
<p>使用 Type-C 数据线连接开发板和电脑,按住 <code>P32</code> 按键的同时,短按 <code>POWER</code> 按键,</p>
<p>此时 Aiapp-ISP 软件自动识别 <code>HID</code> 设备</p>
<p><img src="data/attachment/forum/202504/26/191439fmqh6p6zxhzwgwqm.jpg" alt="isp_writer.jpg" title="isp_writer.jpg" /></p>
<p>点击 <code>下载/编程</code> 按钮,待烧录结束,程序自动运行。</p>
<p>此时软件识别出 USB 串口,进入 <code>CDC/HID-串口助手</code> 标签, 打开相应的串口 (波特率 <code>115200 bps</code> )即可接收芯片打印的数据。</p>
<p><img src="data/attachment/forum/202504/26/191333szhivsn3573n3oql.jpg" alt="ISP_Upload_CDC-print.jpg" title="ISP_Upload_CDC-print.jpg" /></p>
<h3>效果演示</h3>
<p><strong>ADC 采集 I/O 电压并 USB 打印</strong></p>
<p>Channel 0 (P1.0) 引脚悬空</p>
<p><img src="data/attachment/forum/202504/26/185804emiwfx5iboomifbb.gif" alt="ADC_voltage_reading.gif" title="ADC_voltage_reading.gif" /></p>
<p>P1.0 接地</p>
<p><img src="data/attachment/forum/202504/26/185750xhhaun5nhsq66zhs.gif" alt="ADC_voltage_GND.gif" title="ADC_voltage_GND.gif" /></p>
<p>P1.0 接 VCC(5V)</p>
<p><img src="data/attachment/forum/202504/26/185727diny0e9vinpzg01n.gif" alt="ADC_voltage_VCC.gif" title="ADC_voltage_VCC.gif" /></p>
<p>此时完成了 I/O 电压采集和 USB 串口打印电压值的流程。</p>
<h2>水位传感器</h2>
<p>水位传感器(Water Sensor)可以检测水位高度(检测高度:0 - 40 mm),亦可用作雨滴传感器,用于各种天气状况的监测,检测是否下雨及雨量的大小,广泛应用于汽车自动刮水系统、智能灯光系统和智能天窗系统等。</p>
<h3>模块简介</h3>
<ul>
<li>当模块上电,电源指示 LED 点亮;</li>
<li>工作电压:DC <code>3.3V - 5V</code> ;</li>
<li>输出类型:模拟信号;</li>
</ul>
<p><img src="data/attachment/forum/202504/26/185707lyg4epri3y0dxlz6.jpg" alt="water_level_sensor.jpg" title="water_level_sensor.jpg" /></p>
<p>传感器具有 10 条裸露的铜线,其中 5 条是电源铜线,另外 5 条是感测铜线。</p>
<p>走线隔行平行排列,每两条电源铜线间有一条感测铜线。</p>
<h3>模块原理图</h3>
<p><img src="data/attachment/forum/202504/26/185647t7ehee9hpdewpayy.jpg" alt="SCH_water-sensor2.jpg" title="SCH_water-sensor2.jpg" /></p>
<p>参考:水位检测 - Telesky .</p>
<h4>引脚定义</h4>
<ul>
<li><strong>S(信号)为模拟输出;</strong></li>
<li><strong>+(VCC)为传感器供电;</strong></li>
<li><strong>–(GND)为接地。</strong></li>
</ul>
<p><img src="data/attachment/forum/202504/26/185632x5f2vpnnfv6py2nt.jpg" alt="water_sensor_pinout.jpg" title="water_sensor_pinout.jpg" /></p>
<p>参考:水位传感器 .</p>
<h3>运行原理</h3>
<p>当水位上升时,更多的电子可以在正负极之间运动,因此电阻减小,ADC 采集的电压值随之增大;</p>
<p><img src="data/attachment/forum/202504/26/185616ubc5js48orczzylc.gif" alt="water_level_sensor_resistance.gif" title="water_level_sensor_resistance.gif" /></p>
<p>参考:水位传感器如何工作 .</p>
<p>因此根据 ADC 测量传感器输出的电压,便可以确定水位。</p>
<h2>硬件连接</h2>
<p><strong>Water-Sensor_Signal -&gt; P1.0</strong></p>
<p><img src="data/attachment/forum/202504/26/185559oodhjh42t5f2hfee.jpg" alt="board_water-sensor-connect.jpg" title="board_water-sensor-connect.jpg" /></p>
<p>硬件连接完成后,终端打印测试,此时输出的电压值应为 <code>0</code> .</p>
<h2>水位校准</h2>
<p>由于各地的水质差异,导电性能不同,因此需要根据实际情况进行校准。</p>
<ul>
<li><strong>多次校准,取平均值;</strong></li>
<li><strong>每次校正前,需将 PCB 表面的平行铜线擦干,待测得电压为 0 时再置入水中,记录水位值和电压值。</strong></li>
</ul>
<h3>校准数据采集</h3>
<p>水位 21 毫米,相应的串口输出电压为 2.65 伏特</p>
<p><img src="data/attachment/forum/202504/26/185536brb4h6hzuucidb4b.jpg" alt="water-sensor_measure.jpg" title="water-sensor_measure.jpg" /></p>
<p><strong>……</strong></p>
<p>增加水位高度,采集多组电压-水位数据。</p>
<p>假设 ADC 读取电压(V)与水位高度(mm)为线性相关关系,使用 Excel 软件对上述数据进行拟合</p>
<p><img src="data/attachment/forum/202504/26/185512jx6ug9xg9kcijni1.jpg" alt="water_level_linear_fit.jpg" title="water_level_linear_fit.jpg" /></p>
<p>获得拟合表达式 <code>y = 20.674 x - 32.727</code> .</p>
<h2>代码</h2>
<p>代码包括两部分:</p>
<ol>
<li><strong>ADC 采集水位传感器模拟信号的电压;</strong></li>
<li><strong>水位高度转换和 USB 串口打印数值</strong></li>
</ol>
<pre><code>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); // voltage
      wl = (u16)((u32)vol * 20.674 - 3272.7); // water level
      printf_usb(&quot;Analog Voltage: %0.2fV, Water Level: %0.2fmm\r\n&quot;,(float)vol/100,(float)wl/100); // USB print
      delay_ms(500);
    }
}
</code></pre>
<p>注意代码中公式参数的变化,保留两位小数,因此将方程乘以100</p>
<p>完整代码及工程见附件。</p>
<h2>效果</h2>
<p>编译工程并烧录固件,打开 USB 串口,获得打印数据。</p>
<p>上下移动水位传感器,使探测的水位高度发生变化</p>
<p><img src="data/attachment/forum/202504/26/185454sz50xa33bf9i96ia.gif" alt="water_level_measurement.gif" title="water_level_measurement.gif" /></p>
<p>相应的 USB 串口打印如下</p>
<p><img src="data/attachment/forum/202504/26/185436kdvpdkv8dvvesep3.gif" alt="water_level_print.gif" title="water_level_print.gif" /></p>
<h3>结果分析</h3>
<p>经过多次测量,可以获得较为理想的检测结果。</p>
<p>此外,校准和测量过程中发现 ADC 采集的电压值会随时间逐渐减小,可能原因是</p>
<ul>
<li>PCB 板被液体浸润,液体表面张力导致初始时刻覆盖更大面积的铜板,电阻较小,输出电压较大;</li>
<li>随着时间推移,表面张力被克服,PCB板液面覆盖面积逐渐平稳下降,此时电压也逐渐减小,最后趋于稳定。</li>
</ul>
<blockquote>
<p>类似“海水退潮”</p>
</blockquote>
<p>因此采样和校准时需要等待示数稳定,再记录数值,以提高精度。</p>
<h2>总结</h2>
<p>本文介绍了 Aiapp-ISP 仿真调试平台软件的 <strong>AiCube</strong> 工具实现 ADC 电压采集,并以此为基础结合水位传感器实现<strong>水位监测</strong>系统的项目设计,为 STC 系列单片机的快速开发和应用提供了参考。</p>
<p><a href="forum.php?mod=attachment&amp;aid=95362" title="attachment"><img src="/source/plugin/zhanmishu_markdown/template/editor/images/upload.svg" alt="upload" /> 附件:main.c</a></p>
<p><a href="forum.php?mod=attachment&amp;aid=95363" title="attachment"><img src="/source/plugin/zhanmishu_markdown/template/editor/images/upload.svg" alt="upload" /> 附件:ADC_print_voltage.zip</a></p>

国芯人工智能 发表于 2025-4-26 19:03:00

AiCube 试用 - ADC 水位监测系统

水位监测技术在水资源管理、城市防洪、农业灌溉、家用电器及工业生产等领域中具有重要应用价值。通过水位传感器与智能处理系统的结合,可以实现水资源的精准管理,提升生产效率,降低人工成本。本文将介绍基于擎天柱开发板与 AiCube 工具的水位监测系统设计,重点阐述 ADC 电压转换与采集、水位传感器信号处理及水位高度转换的实现过程。

项目概述
本项目旨在通过 ADC(模数转换)技术,实现对水位传感器模拟信号的采集与处理,并将采集到的电压值转换为实际水位高度,最终通过 USB 串口实时输出监测结果。

项目分为两个主要部分:
1. ADC 电压转换与采集:通过 ADC 模块获取模拟通道的电压值,并进行电压转换与计算。
2. 水位信号处理与转换:将水位传感器的模拟电压信号转换为水位高度,并进行实时监测与数据输出。

项目方案
1. ADC 采集与电压转换
使用 ADC 模块获取模拟通道的电压值。
通过计算将 ADC 原始值转换为实际电压值。
2. 水位传感器校准与转换
连接水位传感器,获取其输出的模拟电压信号。
通过电压-水位校准,将电压值转换为水位高度。
3. 数据输出与监测
通过 USB 串口实时打印电压值和水位高度,实现水位的持续监测。

硬件平台
本项目基于 擎天柱开发板,其主控芯片为 AI8051U-34K64。该开发板具备丰富的 I/O 接口与 ADC 模块,适合用于传感器数据采集与处理任务。

I/O 电压采集
1. ADC 工程创建
使用 AiCube 工具快速创建 ADC 工程,配置 ADC 模块以实现模拟信号的采集与转换。
通过计算将 ADC 原始值转换为实际电压值,并通过 USB 串口打印输出。

2. 工程创建步骤
安装并打开最新版 AIapp-ISP 软件。
在右侧操作界面中选择 Keil 仿真设置 标签项,添加目标单片机型号及头文件到 Keil 开发环境。
在菜单栏中点击 AiCube 标签,进入 项目创建助手。
选择目标单片机型号,填写项目名称并设置保存路径,点击 下一步 进入参数配置界面。

3. 参数配置
勾选 外设 - USB 通用串行总线 项,以实现 USB 串口打印功能。
勾选 外设 - ADC,模数转换 项,初始化 ADC 模块配置。

水位传感器信号处理
1. 传感器连接与校准
将水位传感器连接到开发板的模拟输入通道。
通过实验数据建立电压-水位对应关系,完成传感器校准。
2. 水位高度转换
根据校准数据,将采集到的电压值转换为实际水位高度。
通过 USB 串口实时输出水位高度信息。

总结
本项目通过 AiCube 工具与擎天柱开发板,实现了水位监测系统的快速开发与部署。系统利用 ADC 模块采集水位传感器的模拟信号,并通过电压-水位转换实现水位的实时监测。该方案具有开发效率高、硬件成本低、应用场景广泛等特点,适用于水资源管理、工业控制及智能家居等领域。

未来,可进一步优化系统算法,提升测量精度,并扩展无线通信功能,实现远程监测与数据管理,为智能化水位监测提供更全面的解决方案。

[本文内容由国芯人工智能辅助生成,仅供参考]

神农鼎 发表于 2025-4-26 19:50:24


jackduan 发表于 2025-4-28 09:37:15

{:4_174:} 学习
页: [1]
查看完整版本: AiCube 试用@STC-ISP V6.95M, ADC 水位监测系统,Ai8051U