ADC电压采集例程开发指南
1. 概述
ADC(Analog-to-Digital Converter),指模/数转换器或者模数转换器,是指将连续变化的模拟信号转换为离散的数字信号的器件。在电压测量设计中,ADC用于直接采集模拟电压并将模拟信号转换成数字信号。本实例实现了ADC电压采集功能。
2. 开发板支持
该例程适用于CB6502M开发板。
3. 工作流程
如图所示,本实例通过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,处理流程图如下图所示:
代码分析:
/* 电池电压告警阈值 */
#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);
}
4. 例程运行
以CB6502M开发板为例,示例程序的运行步骤为:
4.1. 接线
CB6502M开发板J34引脚图
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