HaaS EDU K1设备资源 之 ADC

1、概述

ADC即模拟数字转换器(英语:Analog-to-digital converter)是用于将模拟形式的连续信号转换为数字形式的离散信号的一类设备。与之相对的设备成为数字模拟转换器(DAC)。

典型的模拟数字转换器将模拟信号转换为表示一定比例电压值的数字信号。然而,有一些模拟数字转换器并非纯的电子设备,例如旋转编码器,也可以被视为模拟数字转换器。

 

本文将向开发者介绍如何使用ADC。HaaS EDU K1 的ADC有3路,分别是GPADC0,GPADC1,GPADC2。

引脚

引脚编号

说明

GPADC0

M4

ADC输入引脚0

扫描二维码关注公众号,回复: 12808147 查看本文章

GPADC1

F5

ADC输入引脚1

GPADC2

G6

ADC输入引脚2

其中两路已经分配,一路(ADC0)用于测量模拟麦克风音量,一路(ADC1)用于检测电池电压,一路(ADC2)外接备用。

HaaS EDU K1自带的三路ADC 均为7通道 10bit。精度为1/1024。

 

2、HAL层接口介绍

AliOS Things对于不同底层驱动的ADC操作实现,统一封装成本文所述hal adc接口。 hal相关头文件位于目录:include/aos/hal。

hal相关实现位于具体的mcu目录下,如:platform/mcu/haas1000/hal/。

2.1、API列表

hal_adc_init

初始化指定ADC

hal_adc_value_get

获取ADC采样值

hal_adc_finalize

关闭指定ADC

2.2、API详情

请参考include/aos/hal/rtc.h

 

2.2.1、相关结数据结构

adc_dev_t

typedef struct {

    uint8_t      port;   /* adc port */

    adc_config_t config; /* adc config */

    void        *priv;   /* priv data */

} adc_dev_t;

 

adc_config_t

typedef struct {

    uint32_t sampling_cycle;  /* sampling period in number of ADC clock cycles */

} adc_config_t;

 

2.2.2、hal_adc_init

初始化指定ADC

函数原型

int hal_adc_init(adc_dev_t *adc);

参数

adc_dev_t *adc

入参

ADC设备描述

用户自定义一个adc_dev_t结构体

返回值

返回成功或失败, 返回0表示ADC初始化成功,非0表示失败

调用示例

#define ADC1_PORT_NUM 1

/* define dev */

adc_dev_t adc1;

/* adc port set */

adc1.port = ADC1_PORT_NUM;

/* set sampling_cycle */

adc1.config.sampling_cycle = 100;

/* init adc1 with the given settings */

ret = hal_adc_init(&adc1);

 

2.2.3、hal_adc_value_get

获取ADC采样值

函数原型

int  hal_adc_value_get(adc_dev_t *adc, void *output, unsigned int timeout);

参数

adc_dev_t *adc

入参

ADC设备描述

使用hal_adc_init时传入adc_dev_t结构体

void *output

出参

数据缓冲区

int value; 传入&value

unsigned int timeout

入参

超时时间,单位tick

HAL_WAIT_FOREVER

返回值

返回成功或失败, 返回0表示ADC时间获取成功,非0表示失败

调用示例

int value = 0;

adc_dev_t adc1;

ret = hal_adc_value_get(&adc1, &value, HAL_WAIT_FOREVER);

 

2.2.4、hal_adc_finalize

关闭指定ADC

函数原型

int32_t hal_adc_finalize(adc_dev_t *adc);

参数

adc_dev_t *adc

入参

ADC设备描述

使用hal_adc_init时传入adc_dev_t结构体

返回值

返回成功或失败, 返回0表示ADC去初始化成功,非0表示失败

调用示例

ret = hal_adc_finalize(&adc1);

 

3、示例介绍

选取ADC读取电压这来学习ADC的使用。

 

3.1、硬件实现

本章用到的硬件电路在开发板上默认是已经连接好的,如下:

                         adc部分原理图

 

默认的看门狗超时周期为1.6s, WDI管脚有电平转换就会重置定时器(喂狗成功,否则就会重启主MCU。

 

3.2、软件设计

代码位于application/example/edu_demo/mfg_test/adc_test.c

 

驱动初始化

初始化GADC1。

adc_dev_t adc = {1, 1000, 0x12345678};

ret = hal_adc_init(&adc);

if (ret)

{

    printf("\r\n=====adc test : adc init failed===\r\n");

    return -1;

}

电量读取   

 for (int32_t i = 0; i < 34; i++)

    {

        hal_adc_value_get(&adc, &output, 1000);

        test_sum += output;


        /* the min sampling voltage */

        if (test_min >= output)

        {

            test_min = output;

        }

        /* the max sampling voltage */

        if (test_max <= output)

        {

            test_max = output;

        }

        osDelay(20);

    }


    hal_adc_finalize(&adc);

    test_avrg = (test_sum - test_min - test_max) >> 5;


    printf("\r\n=====adc test : the samping volage is:%dmv===\r\n", test_avrg);



    if (((test_avrg - 200) > TEST_VOLT_MV) || ((test_avrg + 200) < TEST_VOLT_MV))

    {

        printf("\r\n=====adc test : the samping volage is out of scope===\r\n");

        printf("\r\n=====adc test : FAIL===\r\n");

        return -1;

    }


    printf("=====adc test : Done=====\r\n");

 

3.3、编译与下载

3.3.1、代码准备

打开edu_demo的产测开关

application/example/edu_demo/Config.in

在该文件中修改编译选项,打开EDK_DEMO_FACTORY_TEST_ENABLIE开关。

config EDK_DEMO_FACTORY_TEST_ENABLIE

    bool "enable factory test function"

    default y

加入Demo到启动代码

application/example/edu_demo/app_entry.c

函数application_start中注释掉menu_init();,添加adc_test();

        //menu_init();

        adc_test();

 

3.3.2、编译

命令行方式进行编译

aos make distclean

aos make edu_demo@haaseduk1 -c config

aos make

 

3.3.3、烧录

  • 命令行方式
aos upload
  • 图形界面方式

详见HaaS EDU K1 快速开始 第4.3.3章节-使用GUI工具烧录部分。

 

开发者技术支持

如需更多技术支持,可加入钉钉开发者群,或者关注微信公众号

更多技术与解决方案介绍,请访问阿里云AIoT首页https://iot.aliyun.com/

猜你喜欢

转载自blog.csdn.net/HaaSTech/article/details/114647274