当前位置: 首页 > 文档资料 > YoC 编程基础 >

ADC 电压采集例程开发指南

优质
小牛编辑
111浏览
2023-12-01

ADC(Analog-to-Digital Converter),指模/数转换器或者模数转换器,是指将连续变化的模拟信号转换为离散的数字信号的器件。在电压测量设计中,ADC用于直接采集模拟电压并将模拟信号转换成数字信号。本实例实现了ADC电压采集功能。

该例程适用于CB6502M开发板。

如图所示,本实例通过ADC实现了电压值采集功能。

流程图

3.1. 应用初始化

应用入口函数app_main(),主要实现如下功能:

  • 创建APP Task

代码分析:

int app_main(int argc, char *argv[])
{
    ......
    /* 板级初始化,各业务模块初始化 */
    board_yoc_init();

    ......
    /* 创建APP Task */
    aos_task_new_ext(&task_handle, "app_task", app_task_entry,
                         NULL, 2048, AOS_DEFAULT_APP_PRI);

    ......

    return;
}

3.2. APP Task

APP Task主要实现了:

  • 注册电压采集设备并定时查询电压值数据

代码分析:

/* 电池电压监测周期 */
#define BATTERY_CHECK_PERIOD            15   //unit:s

/* 电压采集设备配置参数,需要设置ADC通道号 */
static battery_pin_config_t battery_config = {6, //PA14_PWM10_ADC6, adc channel
                                              -1, //gpio pin for battery removed event
                                              battery_event //handle battery event
                                              };
void app_task_entry(void *arg)
{
    ......
    /* 注册电压采集设备 */
    battery_fetch_register(&battery_config, 1);

    ......

    while (1) {

        ......

        /* 电压值监测 */
        voltage_check_action();

        ......

        /* 休眠 */
        if (time_enter > 0)
            aos_msleep(BATTERY_CHECK_PERIOD);
    }
}

3.3. 电压值采集

电压值采集需要将ADC接口连接VDDIO,处理流程图如下图所示: Battery流程图

代码分析:

/* 电池电压告警阈值 */
#define BATTERY_VOLTAGE_THRESHOLD       2400   //unit:mv

static void voltage_check_action(void)
{
    /* 打开已注册的电压采集设备 */
    dev = battery_open_id(DEVICE_BATTERY_NAME, 1);
    /* 采集电压值 */
    if (battery_fetch(dev, VOLTAGE) == 0) {
        /* 获取采集到的电压值数据 */
        if (battery_getvalue(dev, VOLTAGE, &battery_val, sizeof(battery_voltage_t)) == 0) {
            LOGD(TAG, "read voltage: %d mv", battery_val.volt);
            /* 监测电压值是否到达门限值,是否告警 */ 
            if (battery_val.volt <= BATTERY_VOLTAGE_THRESHOLD) {
                LOGE(TAG, "voltage warnning");
            }
        }
        ......
    } 
    ......

    /* 关闭电压采集设备 */
    battery_close(dev);
}

以CB6502M开发板为例,示例程序的运行步骤为:

4.1. 接线

  • CB6502M开发板J34引脚图 RS485子板连接

  • ADC接线 | 开发板J34 | 开发板J34 | | --------- | --------- | | ADC | VDDIO |

4.2. 编译下载

  • 连接打印串口和调试口

  • 打印串口的串口调试工具配置为:

    波特率: 115200, 数据位: 8, 校验位: None, 停止位: 1, 流控: None

  • 使用集成开发环境CDK编译工程文件,然后下载至CB6502M开发板

  • 按RESET按键,复位开发板,串口将打印如下信息

[     0.340321][I][init    ]OS version: 7.0.2
[     0.360536][D][adc_fetch_voltage_demo]Enter APP mode

[     0.366995][D][adc_fetch_voltage_demo]read voltage: 3294 mv
[    15.360954][D][adc_fetch_voltage_demo]read voltage: 3295 mv
[    30.360957][D][adc_fetch_voltage_demo]read voltage: 3295 mv
[    45.360960][D][adc_fetch_voltage_demo]read voltage: 3294 mv  //采集的电压值。单位 mv