首页 > 其他分享 >基于FlexLua低代码单片机实现4通道AD电压采集

基于FlexLua低代码单片机实现4通道AD电压采集

时间:2024-05-28 23:01:23浏览次数:39  
标签:采样 AD LIB A0 50 单片机 FlexLua 通道

AD电压采集

一、AD电压采集功能介绍

  • ShineBlink 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在此例程中就不体现出来了。

三、接线图

bffeb81c3b027f1db36bc604c3a0a293.jpeg

四、完整代码

--配置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查询。

五、演示结果

75fba1db84e5fd6f0894c8fd398c4c6b.jpeg

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

六、结语

本文基于 FlexLua 低代码单片机技术,无需复杂单片机C语言开发。即使新手也可很容易用FlexLua零门槛开发各种功能丰富稳定可靠的 IoT 硬件,更多学习教程可参考 FlexLua 官网。

标签:采样,AD,LIB,A0,50,单片机,FlexLua,通道
From: https://blog.csdn.net/ucos_hqu/article/details/139280178

相关文章

  • WPF Path Geometry PathFigureCollection PathFigure PathFigure.Segments PolyQuadra
    <Windowx:Class="WpfApp118.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft......
  • Java三种方法实现多线程,继承Thread类,实现Runnable接口,实现Callable接口
    目录线程:继承Thread类:实现Runnable类:实现Callable接口:验证多线程:线程:定义:进程可以同时执行多个任务,每个任务就是线程。举个例子:一个Java程序,如果同时有两个循环同时进行,就是线程。再比如,你用百度网盘,边看视频,边下载。继承Thread类:步骤写在代码里的classmythrea......
  • 虚拟机系列:虚拟机使用的是此版本 VMware Workstation 不支持的硬件版本。 模块“Upgra
    虚拟机使用的是此版本VMwareWorkstation不支持的硬件版本。模块“Upgrade”启动失败。未能启动虚拟机。虚拟机使用的是此版本VMwareWorkstation不支持的硬件版本。模块“Upgrade”启动失败。未能启动虚拟机。虚拟机使用的是此版本VMwareWorkstation不......
  • 单片机调试mipi接口屏幕记录
    问题1.RGB颜色不对和图片显示不正确(花屏)mipi参数的配置是否全部配置进去,此参数由屏幕厂商提供2.白光闪屏屏幕刷新率有关3.使用mipi屏幕播放视频方案选择3.1直接播放avi格式使用官方JPEG_MJPEG_VideoDecoding例程去播放视频3.2逐帧获取图片信息播放图片包括图片信息......
  • ICPC2024昆明邀请赛 J The Quest for El Dorado 题解
    QuestionTheQuestforElDorado有一个王国,有\(n\)个城市和\(m\)条双向铁路连接这些城市。第\(i\)条铁路由第\(c_i\)家铁路公司运营,铁路的长度为\(l_i\)。你想要环游这个国家,从城市\(1\)出发。为了你的旅行,你购买了\(k\)张火车票。第\(i\)张火车票用两个整数\(......
  • 06-ADT
    抽象数据类型ADT抽象数据类型与表示独立性:如何设计良好的抽象数据结构,通过封装来避免客户端获取数据的内部表示(即“表示泄露”),避免潜在的bug——在client和implementer之间建立“防火墙”ADT特性:表示泄露、抽象函数、表示不变量RepresentationInvariance数学形式描述设计目......
  • hadoop学习之MapReduce案例:输出每个班级中的成绩前三名的学生
    hadoop学习之MapReduce案例:输出每个班级中的成绩前三名的学生所要处理的数据案例:1500100001施笑槐,22,女,文科六班,4061500100002吕金鹏,24,男,文科六班,4401500100003单乐蕊,22,女,理科六班,3591500100004葛德曜,24,男,理科三班,4211500100005宣谷芹,22,女,理科......
  • Hadoop学习之hdfs的操作
    Hadoop学习之hdfs的操作1.将HDFS中的文件复制到本地packagecom.shujia.hdfs;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.FileSystem;importorg.apache.hadoop.fs.Path;importorg.junit.After;importorg.junit.Before;importor......
  • 基于51单片机的脉搏体温监测仪
    一.硬件方案系统以STC89C52单片机为核心,以光电传感器利用单片机系统内部定时器来计算时间,由光电传感器感应产生信号,单片机通过对信号累加得到脉搏跳动次数,时间由定时器定时而得。系统运行中可以通过观察指示灯闪烁,若均匀闪烁说明测量值准确。系统停止运行时,能够显示总的脉......
  • 关于ADT的一些思考
    ADT基本概念1.什么是ADT?抽象数据类型(AbstractDataType,ADT)是将数据对象,数据对象之间的关系和数据对象的基本操作封装在一起的一种表达方式,是用于简化描述抽象算法,分类与评价数据结构,形式描述程序设计语言的类型系统。在ADT设计时,首先要考虑对不可变类型的满足,虽然不可变类型......