Harmony鸿蒙南向驱动开发-ADC接口使用

ADC(Analog to Digital Converter),即模拟-数字转换器,可将模拟信号转换成对应的数字信号,便于存储与计算等操作。除电源线和地线之外,ADC只需要1根线与被测量的设备进行连接,其物理连线如图1所示:

图 1 ADC物理连线示意图

ADC接口定义了完成AD转换的通用方法集合,包括:

  • ADC设备管理:打开或关闭ADC设备。

  • ADC读取转换结果:读取AD转换结果。

基本概念

  • 分辨率

    分辨率指的是ADC模块能够转换的二进制位数,位数越多分辨率越高。

  • 转换误差

    转换误差通常是以输出误差的最大值形式给出。它表示A/D转换器实际输出的数字量和理论上的输出数字量之间的差别。常用最低有效位的倍数表示。

  • 转换时间

    转换时间是指A/D转换器从转换控制信号到来开始,到输出端得到稳定的数字信号所经过的时间。

运作机制

在HDF框架中,同类型设备对象较多时(可能同时存在十几个同类型配置器),如果采用独立服务模式则需要配置更多的设备节点,且相关服务会占据更多的内存资源。相反,采用统一服务模式可以使用一个设备服务作为管理器,统一处理所有同类型对象的外部访问(这会在配置文件中有所体现),实现便捷管理和节约资源的目的。ADC模块接口适配模式采用统一服务模式。

约束与限制

ADC模块仅支持轮询方式读取数据。

使用指导

场景介绍

ADC设备通常用于将模拟电压或电流转换为数字量,例如与NTC电阻搭配进行温度测量,或者将其他模拟传感器的输出量转换为数字量的场景。

接口说明

ADC模块提供的主要接口如表1所示,具体API详见//drivers/hdf_core/framework/include/platform/adc_if.h。

表 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设备

在进行AD转换之前,首先要调用AdcOpen打开ADC设备。

复制代码
DevHandle AdcOpen(int16_t number);

表 2 AdcOpen参数和返回值描述

参数 参数描述
number int16_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参数和返回值描述

参数 参数描述
handle DevHandle类型,ADC设备句柄
channel uint32_t类型,ADC设备通道号
val uint32_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参数和返回值描述

参数 参数描述
handle DevHandle类型,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;
}

最后

有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)资料用来跟着学习是非常有必要的。

这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony **多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)**技术知识点。

希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!

获取这份完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料****

鸿蒙(HarmonyOS NEXT)最新学习路线

  • HarmonOS基础技能
  • HarmonOS就业必备技能
  • HarmonOS多媒体技术
  • 鸿蒙NaPi组件进阶
  • HarmonOS高级技能
  • 初识HarmonOS内核
  • 实战就业级设备开发

有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)鸿蒙(OpenHarmony )开发入门教学视频 ,内容包含:ArkTS、ArkUI、Web开发、应用模型、资源分类...等知识点。

获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料****

《鸿蒙 (OpenHarmony)开发入门教学视频》

《鸿蒙生态应用开发V2.0白皮书》

《鸿蒙 (OpenHarmony)开发基础到实战手册》

OpenHarmony北向、南向开发环境搭建

《鸿蒙开发基础》

  • ArkTS语言
  • 安装DevEco Studio
  • 运用你的第一个ArkTS应用
  • ArkUI声明式UI开发
  • .......

《鸿蒙开发进阶》

  • Stage模型入门
  • 网络管理
  • 数据管理
  • 电话服务
  • 分布式应用开发
  • 通知与窗口管理
  • 多媒体技术
  • 安全技能
  • 任务管理
  • WebGL
  • 国际化开发
  • 应用测试
  • DFX面向未来设计
  • 鸿蒙系统移植和裁剪定制
  • ......

《鸿蒙进阶实战》

  • ArkTS实践
  • UIAbility应用
  • 网络案例
  • ......

获取以上完整鸿蒙HarmonyOS学习资料,请点击→纯血版全套鸿蒙HarmonyOS学习资料****

总结

总的来说,华为鸿蒙不再兼容安卓,对中年程序员来说是一个挑战,也是一个机会。只有积极应对变化,不断学习和提升自己,他们才能在这个变革的时代中立于不败之地。

相关推荐
龚礼鹏6 分钟前
android 图像显示框架二——流程分析
android
消失的旧时光-194312 分钟前
kmp需要技能
android·设计模式·kotlin
帅得不敢出门1 小时前
Linux服务器编译android报no space left on device导致失败的定位解决
android·linux·服务器
爱笑的眼睛111 小时前
HarmonyOS Want意图传递机制深度解析
华为·harmonyos
Digitally1 小时前
将联系人添加到iPhone的8种有效方法
ios·iphone
Digitally1 小时前
如何在没有 iCloud 的情况下备份 iPhone
ios·iphone·icloud
sukalot2 小时前
windows显示驱动开发-用于连接和配置的接口(一)
驱动开发
雨白2 小时前
协程间的通信管道 —— Kotlin Channel 详解
android·kotlin
Dashing3 小时前
KN:Kotlin 与 OC 交互
ios·kotlin
TimeFine3 小时前
kotlin协程 容易被忽视的CompletableDeferred
android