[FFH]标准系统HDF平台驱动(二)—ADC平台驱动使用

系统 OpenHarmony
ADC(Analog to Digital Converter),即模拟-数字转换器,是一种将模拟信号转换成对应数字信号的设备。

想了解更多关于开源的内容,请访问:

​51CTO 开源基础软件社区​

​https://ost.51cto.com​

前言

前面一篇文章已经实现了UnionPi_Tiger的ADC驱动的HDF框架接入(在最新的master版本上已经进行了适配,OpenHarmony-3.2-Beta5上目前还没实现),现在已经可以正常调用HDF提供的ADC统一驱动接口进行应用开发。现在就使用这些接口来读取LM35温度传感器数据。

环境

  • OpenHarmony-3.2-Beta5
  • 九联UnionPi-Tiger开发板
  • USB_Burning_Tool烧录工具
  • LM35线性模拟温度传感器

参考

​平台驱动使用——ADC​​​​标准系统HDF平台驱动(一)——ADC驱动适配​

前置知识

ADC

  1. 简介
    ADC(Analog to Digital Converter),即模拟-数字转换器,是一种将模拟信号转换成对应数字信号的设备。
  2. 基本概念
  • 分辨率:即每个采样数据精度,用多少位数字来表示采集到一个模拟量,分辨率越高就能采集越精确的数据。常用分辨率:8bit、10bit、12bit。
  • 精度:即模拟量转换成数字量的精确程度
  • 采样速率:即每秒对ADC采样的次数

ADC设备硬件连接

#创作者激励# [FFH]标准系统HDF平台驱动(二)——ADC平台驱动使用-开源基础软件社区

除电源线和地线之外,ADC只需要1根线与被测量的设备进行连接,例如对于UnionPi_Tiger与LM35线性模拟温度传感器如下:

  • 红线 -- 3.3V
  • 黑线 -- GND
  • 蓝线 -- ADC_1/ADC_2

#创作者激励# [FFH]标准系统HDF平台驱动(二)——ADC平台驱动使用-开源基础软件社区

LM35温度传感器原理及计算

购买:​​LM35线性模拟温度传感器​LM35数据手册

  • LM35测温范围是0℃到100℃,灵敏度为10mV/℃,输出电压与温度成正比。
  • 输入输出以及电压和温度的关系如下。

#创作者激励# [FFH]标准系统HDF平台驱动(二)——ADC平台驱动使用-开源基础软件社区

#创作者激励# [FFH]标准系统HDF平台驱动(二)——ADC平台驱动使用-开源基础软件社区

  • 温度值计算方法:
    开发板分辨率为12位,即,查看原理图可知ADC的信号基准电压为1.8V。

#创作者激励# [FFH]标准系统HDF平台驱动(二)——ADC平台驱动使用-开源基础软件社区

则信号电压值计算为:
每10mv为1°C,则温度值为: 

ADC平台接口介绍

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

  • ADC设备管理:打开或关闭ADC设备。
  • ADC读取转换结果:读取AD转换结果。
    具体API详见//drivers/hdf_core/framework/include/platform/adc_if.h。

接口名

接口描述

参数

返回值

DevHandle AdcOpen(uint32_t number)

打开ADC设备

number:ADC设备号

DevHandle:ADC设备句柄

void AdcClose(DevHandle handle)

关闭ADC设备

handle:ADC设备句柄

int32_t AdcRead(DevHandle handle, uint32_t channel, uint32_t *val)

读取AD转换结果值

handle:ADC设备句柄

channel:通道号

*val:采样值

0:读取成功

负数:读取失败

使用流程

使用ADC设备的一般流程如图。

#创作者激励# [FFH]标准系统HDF平台驱动(二)——ADC平台驱动使用-开源基础软件社区


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

平台驱动使用

接下来测试一下ADC的HDF驱动框架是否成功,以读取LM35温度传感器为例,测试ADC接口层函数功能。工程位置为vendor/unionman/unionpi_tiger/sample/hdf。

hdf
├── adc
├── adc.c
└── BUILD.gn
├── BUILD.gn

1、编写驱动代码

#include <stdio.h>
#include <stdlib.h>
#include "adc_if.h"
#include "hdf_log.h"
#include "osal_time.h"
/* 设备号0,通道号1 */
#define ADC_DEVICE_NUM 0
#define TEMP_CONST (1.8/(0.01*4096))

int32_t main(int argc, char *argv[])
{
int32_t ret;
uint32_t channelNum=0;
DevHandle adcHandle = NULL;
uint32_t read_val = 0;
double temperature = 0;
//默认打开通道0,可以输入参数使用其他通道
if(argc == 2)
{
channelNum=atoi(argv[1]);
}

/* 打开ADC设备 */
adcHandle = AdcOpen(ADC_DEVICE_NUM);
if (adcHandle == NULL) {
HDF_LOGE("%s: Open ADC%u fail!", __func__, ADC_DEVICE_NUM);
return -1;
}
/* 读取ADC数据 */
ret = AdcRead(adcHandle, channelNum, &read_val);
if (ret != HDF_SUCCESS) {
HDF_LOGE("%s: ADC read fail!:%d", __func__, ret);
AdcClose(adcHandle);
return -1;
}
/* 计算温度 */
temperature = ((double)read_val) * TEMP_CONST;

printf("ADC value is %d\r\n",read_val);
printf("Temperature is %.1f°C\n", temperature);

HDF_LOGI("%s: ADC read successful!", __func__);

/* 访问完毕关闭ADC设备 */
AdcClose(adcHandle);
return HDF_SUCCESS;
}

2、编写BUILD.gn

import("//build/ohos.gni")
import("//drivers/hdf_core/adapter/uhdf2/uhdf.gni")

ohos_executable("adc") {
sources = [ "adc.c" ]

include_dirs = [
"//drivers/hdf_core/framework/include/platform",
]

deps = [ "//drivers/hdf_core/adapter/uhdf2/platform:libhdf_platform" ]

external_deps = [
"hdf_core:libhdf_utils",
"hiviewdfx_hilog_native:libhilog",
]

cflags = [
"-Wall",
"-Wextra",
"-Werror",
"-Wno-format",
"-Wno-format-extra-args",
]

install_enable = true
install_images = [ "vendor" ]
module_install_dir = "bin"
part_name = "unionman_products"
}

3、添加进编译

import("//build/ohos.gni")

group("hdf") {
deps = [
"gpio:gpio",
"led_light:led_light",
"pwm:pwm",
"adc:adc" # 添加这句话
]
}

4、编译打包烧录

具体步骤参考:https://gitee.com/openharmony/device_board_unionman/blob/master/unionpi_tiger/README_zh.md#编译与调试。

如果开发板原本烧录的系统与编译的系统一致,也可以直接通过hdc_std工具直接将生成的可执行程序发送到开发板,编译生成的可执行程序位于out/unionpi_tiger/packages/phone/vendor/bin。

  • 打开cmd窗口,挂载,打开权限
hdc_std shell
mount -o rw,remount /
  • 发送文件
hdc_std file 你的路径/adc /vendor/adc
  • 运行可执行文件
./vendor/bin/adc

5、运行

连接好传感器后,进入开发板终端:

./vendor/bin/adc  #默认通道0进行采样(ADC_1)
./vendor/bin/adc 1 #使用通道1进行采样(ADC_2)

运行结果:

#创作者激励# [FFH]标准系统HDF平台驱动(二)——ADC平台驱动使用-开源基础软件社区

文章相关附件可以点击下面的原文链接前往下载:

 https://ost.51cto.com/resource/2622。

想了解更多关于开源的内容,请访问:

​51CTO 开源基础软件社区​

​https://ost.51cto.com​

责任编辑:jianghua 来源: 51CTO 开源基础软件社区
相关推荐

2023-03-20 16:21:26

ADC数字转换器

2023-03-24 14:47:24

NAPI框架HDF框架

2023-09-14 15:49:42

PWM鸿蒙

2023-09-13 15:33:57

I2C鸿蒙

2021-12-15 10:02:25

鸿蒙HarmonyOS应用

2023-09-06 15:27:22

ADC鸿蒙

2023-09-06 15:35:14

2023-08-18 14:28:18

UART异步通信

2022-08-08 19:35:37

HDF驱动开发鸿蒙

2021-09-10 15:12:04

鸿蒙HarmonyOS应用

2021-09-07 15:48:28

鸿蒙HarmonyOS应用

2017-11-16 14:46:58

Linuxplatform总线驱动设备

2023-03-16 15:18:16

2017-03-03 08:40:32

2022-02-16 15:55:21

驱动调用操作系统鸿蒙

2021-11-30 14:52:41

鸿蒙HarmonyOS应用

2009-08-21 19:04:11

Windows 7驱动戴尔

2023-08-07 07:48:47

2022-10-17 14:29:24

鸿蒙应用开发

2011-03-31 13:55:16

点赞
收藏

51CTO技术栈公众号