OpenHarmony平臺驅動使用(一),ADC

OpenHarmony平臺驅動使用(一)


ADC

概述

功能簡介

ADC(Analog to Digital Converter),即模擬-數字轉換器,可將模擬信號轉換成對應的數字信號,便于存儲與計算等操作。除電源線和地線之外,ADC只需要1根線與被測量的設備進行連接,其物理連線如圖1所示:

圖 1?ADC物理連線示意圖

ADC物理連線示意圖

ADC接口定義了完成AD轉換的通用方法集合,包括:

  • ADC設備管理:打開或關閉ADC設備。

  • ADC讀取轉換結果:讀取AD轉換結果。

基本概念

  • 分辨率

    分辨率指的是ADC模塊能夠轉換的二進制位數,位數越多分辨率越高。

  • 轉換誤差

    轉換誤差通常是以輸出誤差的最大值形式給出。它表示A/D轉換器實際輸出的數字量和理論上的輸出數字量之間的差別。常用最低有效位的倍數表示。

  • 轉換時間

    轉換時間是指A/D轉換器從轉換控制信號到來開始,到輸出端得到穩定的數字信號所經過的時間。

運作機制

在HDF框架中,同類型設備對象較多時(可能同時存在十幾個同類型配置器),如果采用獨立服務模式則需要配置更多的設備節點,且相關服務會占據更多的內存資源。相反,采用統一服務模式可以使用一個設備服務作為管理器,統一處理所有同類型對象的外部訪問(這會在配置文件中有所體現),實現便捷管理和節約資源的目的。ADC模塊接口適配模式采用統一服務模式。

約束與限制

ADC模塊僅支持輪詢方式讀取數據。

使用指導

場景介紹

ADC設備通常用于將模擬電壓或電流轉換為數字量,例如與NTC電阻搭配進行溫度測量,或者將其他模擬傳感器的輸出量轉換為數字量的場景。

接口說明

ADC模塊提供的主要接口如表1所示,具體API詳見。

表 1?ADC驅動API接口功能介紹

接口名接口描述
DevHandle AdcOpen(uint32_t number)打開ADC設備
void AdcClose(DevHandle handle)關閉ADC設備
int32_t AdcRead(DevHandle handle, uint32_t channel, uint32_t *val)讀取AD轉換結果值

開發步驟

使用ADC設備的一般流程如圖2所示。

圖 2?ADC使用流程圖

ADC使用流程圖

打開ADC設備

在進行AD轉換之前,首先要調用AdcOpen打開ADC設備。

DevHandle AdcOpen(int16_t number);

表 2?AdcOpen參數和返回值描述

參數參數描述
numberint16_t類型,ADC設備號
返回值返回值描述
NULL打開ADC設備失敗
設備句柄打開的ADC設備句柄

假設系統中存在2個ADC設備,編號從0到1,那么我們現在打開1號設備。

DevHandle adcHandle = NULL;  // ADC設備句柄// 打開ADC設備
adcHandle = AdcOpen(1);
if (adcHandle == NULL) {HDF_LOGE("AdcOpen: fail\n");return NULL;
}
讀取AD轉換結果
int32_t AdcRead(DevHandle handle, uint32_t channel, uint32_t *val);

表 3?AdcRead參數和返回值描述

參數參數描述
handleDevHandle類型,ADC設備句柄
channeluint32_t類型,ADC設備通道號
valuint32_t類型指針,AD轉換結果
返回值返回值描述
HDF_SUCCESS讀取成功
負數讀取失敗

讀取轉換結果示例(以通道1為例):

uint32_t value;
int32_t ret;ret = AdcRead(adcHandle, 1, &value);
if (ret != HDF_SUCCESS) {HDF_LOGE("ADC read fail!\n");return ret;
}
關閉ADC設備

ADC通信完成之后,需要關閉ADC設備。

void AdcClose(DevHandle handle); 

表 4?AdcClose參數和返回值描述

參數參數描述
handleDevHandle類型,ADC設備句柄
返回值返回值描述

關閉ADC設備示例:

AdcClose(adcHandle); // 關閉ADC設備

使用實例

本例擬對Hi3516DV300開發板上ADC設備進行簡單的讀取操作,基本硬件信息如下:

  • SOC:hi3516dv300。

  • 硬件連接:電位器掛接在0號ADC設備1通道下。

本例程對測試ADC進行連續讀取操作,測試ADC功能是否正常。

示例如下:

#include "adc_if.h"          // ADC標準接口頭文件
#include "hdf_log.h"         // 標準日志打印頭文件/// 設備號0,通道號1
#define ADC_DEVICE_NUM  0
#define ADC_CHANNEL_NUM 1
#define ADC_TEST_NUM    30// ADC例程總入口
static int32_t TestCaseAdc(void)
{int32_t i;int32_t ret;DevHandle adcHandle = NULL;uint32_t readBuf[ADC_TEST_NUM] = {0};// 打開ADC設備adcHandle = AdcOpen(ADC_DEVICE_NUM);if (adcHandle == NULL) {HDF_LOGE("%s: Open ADC%u fail!", __func__, ADC_DEVICE_NUM);return -1;}// 連續進行30次AD轉換并讀取轉換結果for (i = 0; i < ADC_TEST_NUM; i++) {ret = AdcRead(adcHandle, ADC_CHANNEL_NUM, &readBuf[i]);if (ret != HDF_SUCCESS) {HDF_LOGE("%s: ADC read fail!:%d", __func__, ret);AdcClose(adcHandle);return -1;}}HDF_LOGI("%s: ADC read successful!", __func__);// 訪問完畢關閉ADC設備AdcClose(adcHandle);return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/82437.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/82437.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/82437.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CSS【詳解】彈性布局 flex

適用場景 一維&#xff08;行或列&#xff09;布局 基本概念 包裹所有被布局元素的父元素為容器 所有被布局的元素為項目 項目的排列方向&#xff08;垂直/水平&#xff09;為主軸 與主軸垂直的方向交交叉軸 容器上啟用 flex 布局 將容器的 display 樣式設置為 flex 或 i…

基于MATLAB實現傳統譜減法以及兩種改進的譜減法(增益函數譜減法、多帶譜減法)的語音增強

基于MATLAB實現傳統譜減法以及兩種改進的譜減法&#xff08;增益函數譜減法、多帶譜減法&#xff09;的語音增強代碼示例&#xff1a; 傳統譜減法 function enhanced traditional_spectral_subtraction(noisy, fs, wlen, inc, NIS, a, b)% 參數說明&#xff1a;% noisy - 帶…

symbol【ES6】

你一閉眼世界就黑了&#xff0c;你不是主角是什么&#xff1f; 目錄 什么是Symbol&#xff1f;?Symbol特點?&#xff1a;創建方法&#xff1a;注意點&#xff1a;不能進行運算&#xff1a;顯示調用toString() --沒有意義隱式轉換boolean 如果屬性名沖突了怎么辦&#xff1f;o…

LeetCode 649. Dota2 參議院 java題解

https://leetcode.cn/problems/dota2-senate/description/ 貪心。不會寫。 class Solution {public String predictPartyVictory(String senate) {boolean rtrue,dtrue;int flag0;//flag>0,d前面有r;flag<0,r前面有dchar[] senatessenate.toCharArray();//每一輪while(r…

機器學習第二十二講:感知機 → 模仿大腦神經元的開關系統

機器學習第二十二講&#xff1a;感知機 → 模仿大腦神經元的開關系統 資料取自《零基礎學機器學習》。 查看總目錄&#xff1a;學習大綱 關于DeepSeek本地部署指南可以看下我之前寫的文章&#xff1a;DeepSeek R1本地與線上滿血版部署&#xff1a;超詳細手把手指南 感知機詳解…

maven快速上手

之前我們項目如果要用到其他額外的jar包&#xff0c;需要自己去官網下載并且導入。但是有maven后&#xff0c;直接在maven的pom.xml文件里用代碼配置即可&#xff0c;配置好后maven會自動幫我們聯網下載并且會自動導入該jar包 在右邊的maven中&#xff0c;我們可以看到下載安裝…

科學養生指南:解鎖健康生活密碼

健康是人生最寶貴的財富&#xff0c;在快節奏的現代生活中&#xff0c;科學養生成為保持良好狀態的關鍵。遵循現代醫學與營養學的研究成果&#xff0c;無需依賴傳統中醫理論&#xff0c;我們也能找到適合自己的養生之道。? 均衡飲食是健康的基石。現代營養學強調 “食物多樣&…

Qt狀態機QStateMachine

QStateMachine QState 提供了一種強大且靈活的方式來表示狀態機中的狀態&#xff0c;通過與狀態機類(QStateMachine)和轉換類(QSignalTransition&#xff0c; QEventTransition)結合&#xff0c;可以實現復雜的狀態邏輯和用戶交互。合理使用嵌套狀態機、信號轉換、動作與動畫、…

C++八股 —— 原子操作

文章目錄 1. 什么是原子操作2. 原子操作的特點3. 原子操作的底層原理4. 內存序內存屏障 5. 原子操作和互斥鎖的對比6. 常用的原子操作7. 相關問題討論 參考&#xff1a; C atomic 原子操作_c 原子操作-CSDN博客DeepSeek 1. 什么是原子操作 原子操作&#xff08;Atomic Opera…

雙紫擒龍紫紫紅指標源碼學習,2025升級版紫紫紅指標公式-重點技術

VAR1:MA((LOWHIGHCLOSE)/3,5); VAR2:CLOSEHHV(C,4) AND REF(C,1)LLV(C,4); 雙紫擒龍:REF(C,1)LLV(C,4) AND C>REF(C,2) OR REF(C,2)LLV(C,4) AND REF(C,1)<REF(C,3) AND REF(C,2)<REF(C,4) AND C>REF(C,1); VAR4:VAR1>REF(VAR1,1) AND REF(VAR1,1)<REF(VAR1,…

NeuralRecon技術詳解:從單目視頻中實現三維重建

引言 三維重建是計算機視覺領域中的一項關鍵技術&#xff0c;它能夠從二維圖像中恢復出三維形狀和結構。隨著深度學習的發展&#xff0c;基于學習的方法已經成為三維重建的主流。NeuralRecon是一種先進的三維重建方法&#xff0c;它能夠從單目視頻中實時生成高質量的三維模型。…

Ubuntu 上開啟 SSH 服務、禁用密碼登錄并僅允許密鑰認證

1. 安裝 OpenSSH 服務 如果尚未安裝 SSH 服務&#xff0c;運行以下命令&#xff1a; sudo apt update sudo apt install openssh-server2. 啟動 SSH 服務并設置開機自啟 sudo systemctl start ssh sudo systemctl enable ssh3. 生成 SSH 密鑰對&#xff08;本地機器&#xf…

MySQL 索引的增刪改查

MySQL 索引的增刪改查 1 建表時創建索引 [UNIQUE|FULLTEXT|SPATIAL] INDEX|KEY [別名] (字段名 [(長度)] [ASC|DESC] )主鍵直接寫&#xff1a; PRIMARY KEY (Id)例如&#xff1a; CREATE TABLE people (id int NOT NULL PRIMARY KEY AUTO_INCREMENT,last_name varchar(10)…

為什么現代CSS應該選擇OKLCH:從顏色科學到設計系統革新

在數字界面中&#xff0c;顏色不僅是美學的載體&#xff0c;更是信息傳遞的重要工具。CSS Color Level 4 標準引入了 OKLCH 顏色空間, 提供??感知均勻性??&#xff08;顏色差異與實際視覺感受一致&#xff09;&#xff0c;解決傳統HSL/HSV在調整顏色時的不自然問題。文本幫…

【java】小練習--零錢通

文章目錄 前言一、項目開發流程說明二、功能實現2.1 菜單2.2 零錢通明細2.3 零錢通收益2.4 零錢通消費2.5 零錢通退出確認2.6 零錢通金額校驗2.7 完整代碼 三、零錢通OOP版 前言 本文是我跟著B站韓順平老師的 Java 教程學習時動手實現“零錢通”項目的學習筆記&#xff0c;主要…

人工智能數學基礎實驗(四):最大似然估計的-AI 模型訓練與參數優化

一、實驗目的 理解最大似然估計&#xff08;MLE&#xff09;原理&#xff1a;掌握通過最大化數據出現概率估計模型參數的核心思想。實現 MLE 與 AI 模型結合&#xff1a;使用 MLE 手動估計樸素貝葉斯模型參數&#xff0c;并與 Scikit-learn 內置模型對比&#xff0c;深入理解參…

我的第1個爬蟲程序——豆瓣Top250爬蟲的詳細步驟指南

我的第1個爬蟲程序——豆瓣Top250爬蟲的詳細步驟指南 一、創建隔離開發環境 1. 使用虛擬環境&#xff08;推薦venv&#xff09; # 在項目目錄打開終端執行 python -m venv douban_env # 創建虛擬環境 source douban_env/bin/activate # Linux/macOS激活 douban_env\Scri…

STM32八股【11】-----Linux Bootloader (U-Boot)

參考U-Boot U-Boot是什么 嵌入式Linux系統需要一個bootloader來加載系統 U-boot就是一個通用開源的嵌入式Linux bootloader 主要實現的功能&#xff1a; 初始化硬件資源&#xff08;如內存、串口、存儲器等&#xff09;從存儲介質加載Linux內核到內存中傳遞啟動參數給內核啟…

【設計模式】責任鏈+模板+工程模式使用模板

前言 方便寫出優雅&#xff0c;解耦&#xff0c;高內聚&#xff0c;高復用的代碼。 Demo // 1. 定義驗證器接口&#xff08;責任鏈模式&#xff09; public interface Validator {Validator setNext(Validator next);boolean validate(Data data); }// 2. 創建抽象驗證器&am…

Unity3D仿星露谷物語開發49之創建云杉樹

1、目標 創建一顆既可以生長又可以砍伐的云杉樹&#xff0c;這個和之前創建橡樹類似。 2、創建云杉樹預制體 創建新物體命名為CropTreeBlueSpruce&#xff0c;并且添加Box Collider 2D和Crop組件。 在CropTreeBlueSpruce下創建子物體命名為CropSprite&#xff0c;添加3個組件…