W801 ADC功能,基于CDK Demo以及Arduino平台测试
- 🌼W801开发板(HLK-W801 详细资料见:
https://h.hlktech.com/Mobile/download/fdetail/170.html
)
📓W801 ADC简介
📑集成 4 路 12 比特 ADC,最高采样率 1KHz。ADC基于Sigma-Delta ADC 的采集模块,完成最多 4 路模拟信号的采集,采样率通过外部输入时钟控制,可采集输入电压,也可采集芯片温度,支持输入校准和温度补偿校准。
- 🌿ADC引脚映射关系
#define A0 PA1
#define A1 PA4
#define A2 PA3
#define A4 PA2
- 📐电压测量范围:10mV ~ 2.3V(
特别注意!!!
) -
- 📜参考《W801芯片设计指导书V3.1.pdf》中 ADC 电路设计说明:
- 📋芯片 19~21 脚可以作为普通 ADC 使用,输入电压范围 10mV ~2.3V。当高于 2.3V 时外部需做分压处理后才可进入 ADC 接口。为提高精度,R1 和 R2 需使用高精度电阻。根据 Sensor 输出电压值选择合适的R1,R2 电阻值分压。如图:
📝基于CDK平台的ADC Demo
- 📍W801 SDK Demo资料下载地址:
https://h.hlktech.com/Mobile/download/fdetail/170.html
- 📖ADC Demo内容,在源代码基础上添加了ADC4个采样通道。
/*****************************************************************************
*
* File Name : wm_adc_demo.c
*
* Description: adc demo function
*
* Copyright (c) 2014 Winner Micro Electronic Design Co., Ltd.
* All rights reserved.
*
* Author : dave
*
* Date : 2014-8-18
*****************************************************************************/
#include "wm_include.h"
#include "wm_adc.h"
#include "wm_gpio_afsel.h"
#if DEMO_ADC
int adc_input_voltage_demo()
{
u8 chan =0;
int voltage =0;
for(;chan<4;chan++)//全部读一遍各个ADC通道的值
{
if (chan <= 1)
{
wm_adc_config(chan);
}
else if (chan == 8 )
{
wm_adc_config(0);
wm_adc_config(1);
}
voltage = adc_get_inputVolt(chan);
if (voltage < 0)
{
voltage = 0 - voltage;
printf("chan:%d, -%d(mV) or -%d.%03d(V)\r\n", chan, voltage, voltage/1000, voltage%1000);
}
else
{
printf("chan:%d, %d(mV) or %d.%03d(V)\r\n", chan, voltage, voltage/1000, voltage%1000);
}
}
return 0;
}
int adc_chip_temperature_demo(void)
{
char temperature[8] = {0};
int temp;
temp = adc_temp();
if (temp < 0)
{
temp = 0 - temp;
sprintf(temperature, "-%d.%03d", temp/1000, temp%1000);
}
else
{
sprintf(temperature, "%d.%03d", temp/1000, temp%1000);
}
printf("tem: %s\r\n", temperature);
return 0;
}
int adc_power_voltage_demo(void)
{
int voltage =0;
voltage = adc_get_interVolt();
printf("Power voltage:%d(mV) or %d.%03d(V)\r\n",voltage, voltage/1000, voltage%1000);
return 0;
}
#endif
- 🌿烧录程序后,打开串口监视器:显示
ADC Demo测试菜单
- 🌿最好还是不要使用烧录软件集成的串口调试功能进行测试,发命令没有起到作用。
- 🌿通道电压测试。(测试命令:
t-adcvolt
)
- 芯片温度测试。(测试命令:
t-adctemp
)
✨这个温度有点高,手指轻轻触压在芯片上,确实有点烫手,又没有带散热片的。
- 🌿ADC电压电压测量。(测试命令:
t-adcpower
)
📗Arduino 平台代码
📌基于board707/w80x_arduino固件平台:https://kgithub.com/board707/w80x_arduino
/*
W801 ADC引脚映射关系:
#define A0 PA1
#define A1 PA4
#define A2 PA3
#define A4 PA2
W801:4x ADC(16 位,1KHz 采样率)
*/
#include "Arduino.h"
#define led PB5
static volatile bool led_flag = 0;
float volt = 0;
double value;
void setup()
{
Serial.begin(115200);
Serial.printf("ADC Demo\r\n");
pinMode(led, OUTPUT);//W801 :LED_BUILTIN_1 - LED_BUILTIN_7
pinMode(A2, ANALOG_INPUT);//PA3引脚
}
void loop()
{
value = analogRead(A2);
volt = 2.3 * value / 2337; //MAX电压:2.3V --> MAX:2337,
Serial.printf("ADC value: [%.2f]->Volt:%.2fV \r\n", value, volt);
digitalWrite(led, led_flag);
led_flag = !led_flag;
delay (1000);
}