3行代码实现单片机AD采样功能

前言

shineblink core 开发板(简称Core)的库函数支持AD采样功能,所以只需要调用两三个API,即可实现AD采样功能。

PS:Core 仅用五、六行代码即可实现Wifi/Ble/NB/Lora/ThreadMesh/RFID/Eth/Usb/RS485/RS232通信、以及30多种传感器/10多种硬件外设/10多种Mcu内设功能,并且这些功能最多可以 5 种随机组合同时运行。更多关于Core的内容可以在 shineblink.com 上了解。

在这里插入图片描述
在这里插入图片描述

一、AD功能介绍

  • Core提供4个AD通道A0-A3。AD精度为12位,即0-4096对应电压0-3.6V。

    注意:A0-A3的输入电压必须在3.3V以内。

  • Core提供的AD功能函数包含:LIB_ADConfig()LIB_ADCheckBufFull()

其中LIB_ADConfig用来配置存储AD采样结果的Buffer容量Num(最大可配置为64),以及Buffer中每个采样结果的时间间隔Time(单位:us)。当配置完成后我们就可以通过调用LIB_ADCheckBufFull()函数来查询Buffer中的采样结果是否已装满,装满后我们就可以一次性从Buffer中读出所有的采样结果了。
这样做的意义在于,当我们配置好AD后,底层驱动会严格按照Time时间间隔来采样,而我们只需要保证在每Num * Time这段时间内调用LIB_ADCheckBufFull来查询并取出结果即可。

注意一旦调用LIB_ADConfig函数后,A0-A3这四个通道会同时以相同参数开始工作,开发者如果不需要同时用4个通道,可以只关心自己用的通道,其他的置之不顾即可。

二、本例程演示功能

通过A0通道采集外部电压值,每个采样点时间间隔10毫秒,每当采样点达到50个时,可以通过LIB_ADCheckBufFull函数读出50个采样点,求出这50个点的平均值,并通过print()函数打印输出。

A1,A2,A3通道此时其实也和A0一样工作着,因为这里我们只关心A0上的电压,所以A1,A2,A3在此例程中就不体现出来了。

三、接线图

在这里插入图片描述

四、完整代码

--配置A0-A3这四个通道同时开始工作,当每个通道采集满50个点时缓存满,每个点的采集时间间隔为10ms
LIB_ADConfig(50,10000)
--开始大循环
while(GC(1) == true)
do
	A0_full_flag, A0_tab = LIB_ADCheckBufFull("A0")
    --每当A0通道的缓存满以后,计算缓存内的50个元素的平均值,并换算成电压值print输出
    --由LIB_ADConfig(50,10000)可以算出,此处大概是50X10000us=0.5秒执行一次
	if A0_full_flag == 1 then
		SUM = 0
		for i = 1, #A0_tab do --此处#A0_tab的值是50,表示A0_tab表内的元素个数
			SUM = SUM + A0_tab[i]
		end
		AVER = SUM / #A0_tab
        --将A0通道的AD值转换成实际电压打印出来
		print(string.format("A0=%.2fv\r\n", AVER*3.6/4096.0))
	end
    
    --这里只演示A0通道,如果想看A1,A2,A3通道的结果,复制上面的代码修改一下编号即可
end

如果感兴趣,上面代码中出现的LIB开头的库函数可以在API文档中通过Ctrl+F查询。

五、演示结果

在这里插入图片描述

最后在TF卡中的LOG.TXT文件中我们可以看到如上图所示的print打印内容。从时间戳可以看到确实是按照LIB_ADConfig(50,10000)设置,即每0.5秒输出一次50点的平均值。需要注意的是,我们从日志上计算每次输出的时间戳的差值可能不是精确的0.5秒,这是因为print打印输出是上层应用代码,实时性不是太精确。但底层AD采样驱动代码是严格按照10000us这个时间间隔来采集点,这点请不要担心。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值