关注分享主机优惠活动
国内外VPS云服务器

厉安德w 806-套件开发板试用评估系列II:ADC功能的使用和测试

联盛德开发板试用评测系列二功能使用与测试作者大新今天开始测试开发板功能,都知道一项物联网应用场景中经常需要的重要技术。

厉安德w 806-套件开发板试用评估系列

二、ADC功能的使用和测试

作者:大新

今天开始测试W806开发板ADC的功能,我们都知道ADC是物联网应用场景中经常用到的一项重要技术。W806手册上说这个芯片支持片内ADC。介绍如下:

芯片上集成了四个16位ADC,最高采样速率为1KHz。基于Sigma-Delta ADC的采集模块最多可采集4路模拟信号,采样率由外部输入时钟控制,可采集输入电压和芯片温度,支持输入校准和温度补偿校准。

其引脚定义如下:

引脚端口名称功能的下拉能力

19 PA_1 ADC_1上升/下降

20 PA_2 ADC_4向上/向下

21 PA_3 ADC_3向上/向下

22 PA_4 ADC_2向上/向下

电路设计参考如下:

芯片的19~21脚可以作为普通ADC使用,输入电压范围为0 ~ 2.4 V,高于2.4 V时,需要外部分压后才能接入ADC接口。为了提高精度,R1和R2需要使用高精度电阻。根据传感器的输出电压值,选择合适的R1和R2电阻值来分压。如图3-3所示。

图1 ADC分压器电路设计参考

这在很多单片机里还是比较少见的,所以忍不住喜欢。我们马上测试一下,看看芯片集成的ADC功能如何。

从项目的演示目录中,找到adc目录,将项目添加到Sky-CDK的项目视图中。项目代码如下:

#包括

#包含" wm_hal.h "

void错误_处理程序(void);

静态void ADC _ Init(void);

ADC _ HandleTypeDef hadc

int main(void)

{

int值;

系统时钟_配置(CPU _ CLK _ 160m);

printf(" enter main/r/n ");

ADC _ Init();

while (1) {

value = HAL _ ADC _ GET _ INPUT _ VOLTAGE(& hadc);

//hadc . offset = -1;

printf("value = %dmv/r/n ",值);

HAL _ Delay(500);

}

}

静态void ADC_Init(void){

hadc。实例= ADC

hadc。init . CHANNEL = ADC _ CHANNEL _ 0;

hadc。Init.freq = 1000

if (HAL_ADC_Init(&hadc)!= HAL_OK) {

Error_Handler()。

}

}

void HAL _ ADC _ ConvCpltCallback(ADC _ handle typedef * hadc){

}

void Error_Handler(void){

while (1)

{}

}

void assert _ failed(uint 8 _ t *文件,uint32_t行)

{

printf("错误的参数值:文件%s在第%d/r/n行",文件,行);

}

整体代码非常简单明了。设置好芯片主屏幕后,直接初始化ADC,然后进入循环读取ADC的输出值,其中ADC的各个函数句柄结构如下:

typedef struct _ _ ADC _ handle typedef {

ADC _ TypeDef *实例;

ADC _ InitTypeDef Init

HAL_LockTypeDef锁;

int偏移量;

} ADC _ HandleTypeDef

编译后,将fls文件刻录到开发板中。然后在板上连接下图所示的布线,第一次将PA1直接接地。此时,ADC1的输入电压应为0。

图2 ADC测试布线图1

实际数据是从串行端口接收的,如下所示:

图3当PA1直接接地时ADC的输出值

可以看到数据基本稳定在-64mv,其中有部分数据有偏差,不是因为ADC的稳定性,而是硬件走线的原因,直接把线插入开发板接口孔而不是焊接,导致接触不稳定。

这里有一个评论。既然提供开发板,为什么不附带针阵列?针阵列不焊可以理解。但是没有针阵就无法插入到杜邦线中使用,手头也没有针阵,只好在网上再买一个针阵。而且针排的邮费可以买个W806开发板,晕!。

这个偏差测试几次后,它的读数基本上是一个固定值,所以可以视为初始偏差,在后期的测量中可以修正,即测量值减去这个偏差。期间我们测试了几款W806的初始偏差值,发现不同的板不一样,初始偏差分别在-60mv ~ +50mv左右。

测试初始对地偏差后,就可以测量目标电压了。这里拿一块新的5号电池来检测。电池的正极连接到PA1,负极连接到电路板上的GND。此时,您可以从串口获取以下数据:

图4当PA1连接到5号电池时ADC的输出值

电池的直接读数为1576mv,用前面的校正方法减去初始偏差后,测得的电压为1576-(-64)=1640mv。

作为对比,5号电池用三位半精密数字万用表电压电平测试,读数为1609mv。你可以根据这个万用表计算误差率:

(1640-1609)/1609 x100% = 1.9%

图5用万用表测量5号电池的电量。

综上所述,这个简单的测试,初步测试W806 ADC的电压测量效果,比较准确。因为没有精确的调节电压,所以没有对每个点的电压测量。不过也有其他网友测了一下它的线性度,画了一条拟合线。从测量误差的标准方差分析来看,其误差小于

未经允许不得转载:主机频道 » 厉安德w 806-套件开发板试用评估系列II:ADC功能的使用和测试

评论 抢沙发

评论前必须登录!