联盛德W806-KIT开发板试用评测系列之二:ADC 功能使用与测试

联盛德W806-KIT开发板试用评测系列

之二:ADC 功能使用与测试

作者:大信<QQ8125036>

今天着手对W806开发板ADC功能做测试,都知道ADC在物联网应用场景中常需要用到的一个重要技术。W806手册说这款芯片支持片内ADC,介绍是这样的:

片内集成 4 路 16 比特 ADC,最高采样率 1KHz。ADC基于Sigma-Delta ADC 的采集模块,完成最多 4 路模拟信号的采集,采样率通过外部输入时钟控制,可采集输入电压,也可采集芯片温度,支持输入校准和温度补偿校准。

其管脚定义如下:

管脚   IO口名称   功能 上下拉能力

19     PA_1   ADC_1    UP/DOWN

20     PA_2   ADC_4    UP/DOWN

21     PA_3   ADC_3    UP/DOWN

22     PA_4   ADC_2    UP/DOWN

电路设计参考如下:

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

 

 图 1 ADC 分压电路设计参考

这在很多MCU里还是少见的,不禁心生喜欢,马上动手来测试一下,看看芯片集成的ADC功能性能如何。

从项目工程DEMO目录下,找到adc目录,在Sky-CDK的项目视图里加入该工程,工程代码如下:

#include <stdio.h>

#include "wm_hal.h"

void Error_Handler(void);

static void ADC_Init(void);

ADC_HandleTypeDef hadc;

int main(void)

{

int value;

SystemClock_Config(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", value);

    HAL_Delay(500);

}

}

static void ADC_Init(void){

hadc.Instance = 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_HandleTypeDef* hadc){

}

void Error_Handler(void){

while (1)

{}

}

void assert_failed(uint8_t *file, uint32_t line)

{

printf("Wrong parameters value: file %s on line %d\r\n", file, line);

}

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

typedef struct __ADC_HandleTypeDef{

ADC_TypeDef                   *Instance;

ADC_InitTypeDef               Init;

HAL_LockTypeDef               Lock;

int                          offset;

}ADC_HandleTypeDef;

编译后,烧写fls文件到开发板里。然后板上连接如下图的连线,第一次将PA1直接接入地,此时ADC1输入电压应该为0.

图 2 ADC 测试接线图一

从串口收到实际的数据,如下:

 图 3 ADC 测试PA1直接接地时输出的数值

可见数据基本上稳定在 -64mv,其中有个别数据出现偏差,不是因为ADC稳定性的问题,而是因为硬件接线,是把导线直接插而不是焊接在开发板的接口孔里,接触不稳定造成。

这里吐槽一下,既然提供开发板为何不附带送一下排针,排针不焊接可以理解,但是没有排针导致无法插入杜邦线使用,手边又没有排针,还不得不另外网购排针去。而购买排针的邮费又可以购买一块W806开发板了,晕!。

这个偏差测试几次后,它的读数基本是固定的值,那么就可以把它看成是初始的偏差,在后面的测量种进行修正即可,即测量的值减去这哥偏差。期间在几块W806都测试一下初始偏差值,发现不同的板子并不一样,初始偏差分别  -60mv ~ +50mv左右。

在测试完对地的初始偏差后,可以测量目标电压,这里拿一节新的5号电池做测试,电池正极接PA1,负极接板上的GND。此时可以从串口得到如下的数据:

图 4 ADC 测试PA1接5号电池时输出的数值

测试该电池直接读数为: 1576mv,根据前面的修正方法,减去初始偏差 -64mv.得到被测电压为:1576-(-64)=1640mv.

为做对比,使用三位半精度数字万用表电压档测试该5号电池,读数为1609mv。则可以算出,以此万用表为基准的误差率:

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

图 5 使用万用表测量5号电池的数值

 总结,本次简单的测试,初步的测试W806的ADC的电压测量效果,比较精确。因为没有精密调压电压,没有对个点的电压测量。但其它网友对其线性度进行过测量,并绘制了拟合线,从测量误差标准方差分析,其误差小于<5%。同时本次测试也没有对温漂进行测试,以及高频采样下的ADC的精度情况。但从一般的消费领域的应用场景来看,已经可以满足需求。

### 回答1: w806是一款盛德(Lichee)公司生产的开发板,支持Micropython编程语言。Micropython是一种基于Python的嵌入式系统开发语言,可以在微控制器上运行Python程序。使用Micropython可以方便地开发嵌入式系统,实现各种功能盛德w806开发板支持多种外设,如WIFI、蓝牙、摄像头等,可以满足各种应用需求。 ### 回答2: W806盛德(LELSD)出品的一款基于MicroPython的开发板,它拥有低功耗、高效、易用等特点,适用于物联网、AR/VR、智能家居等领域的开发使用W806的芯片采用的是飞思卡尔(Freescale)的Kinetis K66F,它的主频高达180MHz,拥有256KB的RAM和1MB的Flash,支持LwIP、SSL/TLS等多种协议。W806还配备了丰富的接口,例如可以通过WIFI、蓝牙、Zigbee等多种协议进行连接,还拥有USB和JTAG等调试接口,为开发人员提供了更加便捷的开发环境。 除了硬件控制,w806还支持各种高级语言编程,其中就包括了Micropython,这是一种非常便捷的语言,它已经成为了物联网领域的一种核心语言。利用Micropython可以直接在W806上进行代码编写和调试,并且可以利用其强大的历史数据存储和展示能力来进行数据分析和处理。通过Micropython,w806 可以接收和发送数据,进行大量的实时数据分析和控制,大大提高了物联网应用的可靠性和效率。 总之,W806盛德Micropython这个组合非常适合开发物联网系统和智能家居等智能设备,它让开发人员可以通过Micropython的编程语言进行开发,支持多种协议,拥有丰富的硬件控制接口,可以快速地进行产品原型测试,最终实现智能化的物联网设备。 ### 回答3: W806是一款支持MicroPython编程语言的智能小车。它的流线型设计和高性能的电机使得它在运动中非常稳定,能够在各种复杂地形下行走。 W806的核心是一块STM32F407VET6单片机,它拥有240MHz的主频以及512KB的Flash存储和192KB的SRAM。这使得W806能够流畅地运行MicroPython脚本,同时还可以轻松处理传感器数据和控制命令。此外,W806还配备了多个传感器模块,包括超声波模块、红外线循迹模块和心率传感器模块等,可以满足不同的应用需求。 盛德W806还支持WiFi和蓝牙通信,可以通过手机APP或者PC控制,并支持远程控制和远程更新程序。这也让W806在科研、教育、开发等领域得到广泛的应用。 总之,W806是一款功能丰富、扩展性高的智能小车,既适用于初学者快速上手,也适用于高级开发人员进行二次开发。作为一款支持MicroPython编程语言的智能小车,W806将成为未来机器人领域的重要一员,为智能生活和人工智能的发展做出重要贡献。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值