HarmonyOS系统中内核实现ADC采样的方法

简介: 大家好,今天主要和大家聊一聊,如何使用鸿蒙系统实现ADC采样。

image.png

第一:ADC基本简介

   单片机会读到什么值?需要看一个特性,就是几位的ADC,在手册上就会给出,例如,STM32的ADC是12位的。另外,还有8位,10位,16位,24位等。

 读到的值怎么换算成实际的电压值?

   前面提到了,我们输入GND,读到的值是0,输入VDD,得到的值是4095,那么,当你读到2035的时候,你知道输入电压多少V吗?这个问题,归根接地,就到了数学XY坐标,已知两点坐标值(0,0)(3.3,4095)

第二:鸿蒙ADC API函数分析

  AdcRead()

unsigned int AdcRead (WifiIotAdcChannelIndex channel, unsigned short * data, WifiIotAdcEquM

功能描述:

   根据输入参数从指定的ADC通道读取一段采样数据

参数:

名字 描述
channel 表示ADC通道.
data 表示指向存储读取数据的地址的指针
equModel 表示平均算法的次数
curBais 表示模拟功率控制模式
rstCnt 指示从重置到转换开始的时间计数。一次计数等于334纳秒。值的范围必须从0到0xFF

第三:硬件设计

 本示例将使用板载用户按键F1来模拟GPIO口电压的变化。通过查看芯片手册可知GPIO_11对应的是 ADC Channel 5 ,所以需要编写软件去读取ADC Channel 5的电压,程序设计时先将GPIO_11上拉,使GPIO_11的电压一直处于高电平,当按键按下时GPIO_11接地,此时GPIO_11的电压变为 0 V。


34c0f720bd1e4b188a3736dc0fc16c01.png

第四:软件设计

   该函数通过使用AdcRead()函数来读取ADC_CHANNEL_5的数值存储在data中,WIFI_IOT_ADC_EQU_MODEL_8表示8次平均算法模式,WIFI_IOT_ADC_CUR_BAIS_DEFAULT表示默认的自动识别模式,最后通过data * 1.8 * 4 / 4096.0 计算出实际的电压值。

static float GetVoltage(void)
{
    unsigned int ret;
    unsigned short data;
    ret = AdcRead(WIFI_IOT_ADC_CHANNEL_5, &data, WIFI_IOT_ADC_EQU_MODEL_8, WIFI_IOT_ADC_CUR_BAIS_DEFAULT, 0xff);
    if (ret != WIFI_IOT_SUCCESS) 
    {
        printf("ADC Read Fail\n");            
    }
    return (float)data * 1.8 * 4 / 4096.0;  /* data * 1.8 * 4 / 4096.0: Convert code into voltage */
}

第五:编译调试

  修改BUILD.gn文件

 修改applications\BearPi\BearPi-HM_Nano\sample 路径下 BUILD.gn 文件,指定 pwm_example 参与编译。

#"B1_basic_led_blink:led_example",
#"B2_basic_button:button_example",
#"B3_basic_pwm_led:pwm_example",
"B4_basic_adc:adc_example",
#"B5_basic_i2c_nfc:i2c_example",
#"B6_basic_uart:uart_example",

第六:运行结果

   示例代码编译烧录后,按下开发板的RESET按键,通过串口助手查看日志,当F1按键未按下时采集到的电压为3.3V左右,当按键按下时,电压变为0.2V左右。

=======================================
*************ADC_example***********
=======================================
vlt:3.371V
=======================================
*************ADC_example***********
=======================================
vlt:3.371V
=======================================
*************ADC_example***********
=======================================
vlt:3.373V
=======================================
*************ADC_example***********
=======================================
vlt:0.248V
=======================================
*************ADC_example***********
=======================================
vlt:0.244V


目录
相关文章
|
3月前
|
编解码
如何让开源鸿蒙系统适配其它机型?
如何让开源鸿蒙系统适配其它机型?
28 0
|
3月前
|
安全 开发工具 开发者
请说明鸿蒙操作系统的生态系统建设和开发者支持措施。
请说明鸿蒙操作系统的生态系统建设和开发者支持措施。
32 5
|
4月前
|
存储 前端开发 IDE
【华为鸿蒙系统学习】- 如何利用鸿蒙系统进行App项目开发|自学篇
【华为鸿蒙系统学习】- 如何利用鸿蒙系统进行App项目开发|自学篇
102 0
|
4月前
|
数据管理 API 调度
【华为鸿蒙系统学习】- HarmonyOS4.0开发|自学篇
【华为鸿蒙系统学习】- HarmonyOS4.0开发|自学篇
216 0
|
5月前
|
人工智能
极智AI | 全志XR806 OpenHarmony鸿蒙系统固件烧录
大家好,我是极智视界,本教程详细记录了全志 XR806 OpenHarmony 鸿蒙系统固件烧录的方法。
43 0
|
5月前
|
人工智能 JavaScript 物联网
极智AI | 全志XR806 OpenHarmony鸿蒙系统固件编译
大家好,我是极智视界,本教程详细记录了全志 XR806 OpenHarmony 鸿蒙系统固件编译的方法。
38 0
|
5月前
|
IDE 安全 开发工具
初学鸿蒙系统HarmonyOS第一课
初学鸿蒙系统HarmonyOS第一课
80 0
|
5月前
|
开发者
鸿蒙系统开源
鸿蒙系统开源
51 1
|
6月前
|
安全 前端开发 Android开发
鸿蒙开发|鸿蒙系统的介绍(为什么要学习鸿蒙开发|鸿蒙系统的官方定义|鸿蒙和安卓、ios的对比)
鸿蒙开发学习是一项探索性的工作,旨在开发一个全场景分布式操作系统,覆盖所有设备,让消费者能够更方便、更直观地使用各种设备。
299 6
鸿蒙开发|鸿蒙系统的介绍(为什么要学习鸿蒙开发|鸿蒙系统的官方定义|鸿蒙和安卓、ios的对比)