0
点赞
收藏
分享

微信扫一扫

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


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

目录

​​第一:ADC基本简介​​

​​第二:鸿蒙ADC API函数分析​​

​​第三:硬件设计​​

​​第四:软件设计​​

​​第五:编译调试​​

​​第六:运行结果​​

第一: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, WifiIotAdcEquModelSel equModel, WifiIotAdcCurBais curBais, unsigned short rstCnt )

功能描述:

    根据输入参数从指定的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。

HarmonyOS系统中内核实现ADC采样的方法_硬件设计_02

第四:软件设计

    该函数通过使用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

举报

相关推荐

0 条评论