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 系列單片機的快速開發和應用提供了參考。