datasheet

技术文章—如何以最简单的方式获取传感器数据?

2019-03-13来源: EEWORLD 关键字:传感器


传感器作为各个领域最重要的设备之一,产品种类之多,应用领域之广,随着“智能时代”的到来,传感器的使用将发挥更加关键的作用。那么,要如何以最简单,最高效的方式使用这些种类繁多,操作复杂的传感器呢?

 

传感器作为一种检测装置,它的应用早已渗透到诸如工业生产、宇宙探索、海洋探测、环境保护、资源调查、医学诊断、生物工程、甚至文物保护等等极其之广泛的领域。可以毫不夸张地说,从茫茫的太空,到浩瀚的海洋,以及各种复杂的工程系统,几乎每一个现代化项目,都离不开传感器。

 

目前,市面上已经存在大量各种类型,各种型号,不同厂家生产的各种传感器,例如,温度、湿度、电压、电流、压强、光照、加速度、角速度等等。它们的应用场景、产品参数、使用方法都不尽相同,这往往使许多项目开发人员在使用传感器时举步维艰:添加一个传感器,就要编写对应的驱动,提供一套访问这个传感器的接口。通常情况下,在一个复杂的系统中,传感器往往不止一个,可能存在几个或几十个甚至更多不同种类的传感器,若这些传感器的使用接口都不相同,那么可想而知,软件方面的工作量和复杂度又会有多大?无形中又增加了很大的开发难度。不仅如此,若基于多种传感器开发的应用程序想跨平台复用,而底层各个传感器的接口却千奇百怪,那么,这样的工作量和复杂度又会上升到什么程度?

 

为了解决这些问题,AWorks定义了通用的传感器接口,适用于各式各样的传感器,只要是挂载在AWorks系统中的传感器,都可以通过相同的操作接口来访问。同时,只要是基于这些通用接口开发的应用程序,都不会与具体的硬件设备绑定,换句话说,底层更换使用不同型号的传感器,对应用程序不会造成影响,应用程序可以不做任何改动。

 

从功能上看,传感器实现了对真实世界中某种物理信号(温度、湿度、气压等)的采集,在使用传感器时,最重要的操作就是从传感器中获取出相应的数据。接下来,进一步介绍如何通过接口获取传感器数据作。

 

1.      传感器通道ID

 

在介绍接口的使用方法之前,需要简单了解一个概念,AWorks之所以能够实现使用一套相同的接口访问所有类型的传感器,是因为AWorks对系统中的传感器进行了统一的管理。为了实现对各式各样的传感器进行统一管理,在AWorks中,定义了“传感器通道”的抽象概念,一路传感器通道用于完成一路物理信号的采集,系统为每个传感器通道分配了一个唯一的ID。例如,若此时系统中存在三个传感器,分别为温湿度传感器HTS221(能为系统提供一路温度和一路湿度通道),三轴磁传感器LIS3MDL(能位系统提供X,Y,Z轴三路磁数据通道和一路温度通道)和光照传感器BH1730(能为系统提供一路光照度采集通道),则对应的ID分配范例详见表 1。

 

表 1  传感器通道id分配

 

 

按照以上的传感器通道ID分配方式,理论上,系统中可以挂载无数个各种类型的传感器,新加入的传感器通道只需按照以上方式依次向后分配ID即可。通常情况下,该ID号的分配已经由系统完成,无需我们自行分配,我们只需简单知道当前系统中的有效ID号所对应的传感器通道类型即可。例如,当前AWorks系统中存在的传感器如表 1所示,有三个传感器,ID号为0~6,下文中函数接口ID的使用将以此为例。

 

2.      获取传感器数据

 

基于以上对传感器ID的描述,此时若想获取传感器的数据,只需在应用程序中调用获取传感器数据的函数接口即可,获取传感器数据的函数接口如下:

 

aw_err_t  aw_sensor_data_get (int id, aw_sensor_val_t *p_val);

 

其中,id即为传感器通道ID号,p_val为存放对应ID的传感器数据。此处aw_sensor_val_t类型为一个结构体,只需知道它是一个保存传感器数据的变量即可。

 

基于此,获取系统中任意传感器通道的数据只需调用该接口即可,例如,每隔500ms获取一次温度采样数据的程序范例如下:

 

1aw_sensor_val_t tem_val;

 

2while (1) {

 

3aw_sensor_data_get(0, &tem_val);  // 通道ID为0,对应表 1中的温度采集通道

 

4aw_mdelay(500);

 

5}

 

同样,若想获取光照度传感器采样数据,程序范例如下:

 

1aw_sensor_val_t als_val;

 

2while (1) {

 

3aw_sensor_data_get(6, &als_val);  // 通道ID为6,对应表 1中的光照度采集通道

 

4aw_mdelay(500);

 

5}

 

以此类推,只需要调用这一个相同的接口,便可以依次获取系统中所有传感器的数据。此时,或许有人会疑问,系统中那么多传感器,一个一个调用该接口,会不会显得繁琐?对于该问题,AWorks系统当然给出了答案,那就是提供同时获取多通道或者所有通道传感器数据的接口,该接口原型如下:

 

aw_err_t  aw_sensor_group_data_get (const int       *p_ids,

 

                                int                num,

 

                                aw_sensor_val_t *p_buf);

 

其中,p_ids为指向传感器通道id列表的指针;num表示通道的数目,即id列表的大小;p_buf指向用于存储各通道数据的缓存,缓存大小与num一致。基于该接口,可以同时获取多个或所有系统中传感器的采样数据,例如,每隔500ms获取当前表 1中所有的传感器通道采样数据的程序范例如下:

 

1const int        id_s[7] = {0, 1, 2, 3, 4, 5, 6}; // 应用程序使用7个通道

 

2aw_sensor_val_t  val_buf[7];           // 存储7个通道数据的缓存

 

3

 

4while (1) {

 

5aw_sensor_group_data_get(id_s, 7, val_buf);      // 获取当前系统所有传感器通道的采样数据

 

6aw_mdelay(500);

 

7}

 

基于此,AWorks系统的传感器接口已经完美的实现了使用同种接口获取所有传感器采样数据的功能。此时,或许有人又会提出疑问,这两个接口采用的似乎都是轮询的方式获取传感器数据,若在效率要求较高的场合,调用该接口是不是不太好呢?再者说,如今的许多传感器都可以采用中断触发的方式获取数据,这样可以大大提高应用程序的效率,那么能不能实现这种功能呢?当然!AWorks同样提供了这种接口,而且接口的调用非常方便,简洁。接下来将为你一一揭秘。

 

3.      触发方式获取传感器数据

 

如今大多数传感器内部都支持了通过中断触发的方式通知应用程序获取传感器数据的功能,应用程序只需检测触发类型做相应的处理即可,这样大大提高了应用程序的执行效率,避免了以查询这种耗时的方式主动获取传感器数据的操作。

 

传感器具有的触发方式一般由传感器本身决定。例如,温湿度传感器HTS221具有的可配置触发方式只有数据准备就绪触发;三轴磁传感器LIS3MDL具有的可配置触发方式有数据准备就绪触发和上下门限值触发。接下来将只以数据准备就绪触发方式,讲解如何高效的获取传感器数据。

 

在AWorks中,要实现通过触发方式获取传感器通道数据,只需要两步操作即可,第一步是配置传感器通道的触发回调函数,第二步则是打开该通道的触发。

 

首先,配置传感器通道触发模式的函数原型如下:

 

aw_err_t aw_sensor_trigger_cfg (int                   id,

 

uint32_t               flags,

 

                           aw_sensor_trigger_cb_t  pfn_cb,

 

                           void                 *p_arg);

 

其中,id为传感器通道的编号,flags参数为配置的触发模式对应的宏(此处只以数据准备就绪触发举例,其所对应的宏在AWorks中定义为AW_SENSOR_TRIGGER_DATA_READY,直接传入即可),pfn_cb为触发回调函数,p_arg为用户触发回调函数参数。触发回调函数的类型为aw_sensor_trigger_cb_t,定义如下:

 

typedef void (*aw_sensor_trigger_cb_t) (void *p_arg, uint32_t trigger_src);

 

其中,p_arg为用户触发回调函数参数,trigger_src为存放的触发类型。例如,此时要配置三轴磁传感器LIS3MDL的X轴采集通道(表 1通道2)的数据准备就绪触发,程序范例如下:

 

1/* 定义一个回调函数,用于当触发事件产生时,该函数被调用 */

 

2static void __pfn_trigger_callback (void *p_arg, uint32_t trigger_src)

 

3{

 

4    /* 数据准备就绪触发*/

 

5if (trigger_src & AW_SENSOR_TRIGGER_DATA_READY) {

 

6aw_sensor_data_get(2, &data_val);   // 触发方式获取该通道的采样数据

 

7   }

 

8}

 

9aw_sensor_trigger_cfg( 2,

 

10                      AW_SENSOR_TRIGGER_DATA_READY,

 

11                   __pfn_trigger_callback,

 

12                   NULL);               // 配置通道2的数据准备就绪触发

 

当以上程序完成通道的触发方式的配置后,接下来,只需打开该通道的触发即可,该函数接口的定义如下:

 

aw_err_t aw_sensor_trigger_on (int id);

 

该函数接口只需传入id即可。注意,aw_sensor_trigger_on函数接口必须在aw_sensor_trigger_cfg接口之后调用,先后顺序不能颠倒。此时,要通过触发方式获取三轴磁传感器LIS3MDL的X轴采集数据的完整程序范例如下:

 

1aw_sensor_val_t data_val;     // 定义传感器数据缓存区

 

2

 

3/* 定义一个回调函数,用于当触发事件产生时,该函数被调用 */

 

4static void __pfn_trigger_callback (void *p_arg, uint32_t trigger_src)

 

5{

 

6    /* 数据准备就绪触发*/

 

7if (trigger_src & AW_SENSOR_TRIGGER_DATA_READY) {

 

8aw_sensor_data_get(2, &data_val);   // 触发方式获取该通道的采样数据

 

9   }

 

10}

 

11

 

12int mian()

 

13{

 

14aw_sensor_trigger_cfg(2,

 

15                      AW_SENSOR_TRIGGER_DATA_READY,

 

16                  __pfn_trigger_callback,

 

17    NULL);   

 

18aw_sensor_trigger_on (2);

 

19while (1) {

 

20aw_mdelay(1000);

 

21}

 

22}

 

通过以上的接口,完美的实现了一种接口访问所有传感器数据的功能,并且这些接口可以在任何运行AWorks操作系统的平台上使用,且无论平台中的传感器类型和数目如何变化,只需要知道该平台传感器通道的ID信息,则都可以使用这些通用接口来进行访问。只要是基于该通用接口开发的应用程序,只要是在AWorks系统中,应用程序能实现“零”修改的移植。在软件意义上,真正实现了“一次编程、终生使用、跨平台”的历史难题。

 

4.      总结

 

AWorks是ZLG历时12年开发的下一代开源嵌入式开发平台,将MCU和OS的共性高度抽象为统一接口,支持平台组件“可插拔、可替换、可配置”,与硬件无关、与操作系统种类无关的方式设计,用户只需修改相应的头文件,即可实现“一次编程、终生使用、跨平台”。

 

并且ZLG推出了一系列搭载AWorks操作系统的Cortex-M0/3/4/7、Coterx-A7/8/9、ARM7/9、DSP等常用内核的核心板。使用这些核心板,即可在AWorks平台上快速完成产品开发。

 

 


关键字:传感器

编辑:muyan 引用地址:http://www.eeworld.com.cn/MEMS/2019/ic-news03132409.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:安森美半导体助力奥斯卡小金人更璀璨
下一篇:最后一页

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

ST推出全新防水型MEMS压力传感器

  意法半导体的 LPS33W防水型MEMS压力传感器集化学兼容性、稳定性和精确性于一身,适合健身追踪器、可穿戴设备、真空吸尘器和通用工业感测等各种应用领域。 LPS33W在圆柱形金属封装内涂覆一层粘性灌封胶,IPx8级防水,可耐受盐水、氯、溴、洗涤剂(洗手液、洗发水等)、电子液体和轻工化学品(正戊烷)。封装盖具有高耐腐蚀性,圆柱形外观在需要密封外壳的应用中易于与O形圈配合使用。 意法半导体独有灌封胶配方的独特性质,结合传感器的内置信号调理电路ASIC,确保压力噪声达到同级领先的0.008hPa RMS水平,从而实现出色的测量分辨率。在组装过程中对回流焊应力的敏感性也极低,温漂小于±2hPa
发表于 2019-03-13
ST推出全新防水型MEMS压力传感器

ST推出低成本消费和工业用防水封装的MEMS压力传感器

意法半导体(ST)近日推出LPS33W防水型MEMS压力传感器结合了化学兼容性、稳定性和准确性,可用于各种应用,如健身应用或其他可穿戴设备,真空吸尘器和通用工业传感等。IPx8级LPS33W由圆柱形金属封装内的粘性灌封胶保护,可承受盐水,氯,溴,洗手液,洗发水,电子液体和轻工业化学品(如正戊烷)等洗涤剂。封装盖提供高耐腐蚀性,圆柱形外形易于在需要密封外壳的应用中使用O形圈。ST专有凝胶配方的独特性能与传感器的内置信号调理ASIC相结合,可确保达到领先的0.008hPa RMS压力噪声,从而实现出色的测量分辨率。组装过程中对回流焊应力的敏感性也极低,漂移小于±2hPa,在72小时内恢复正常精度,恢复速度是其他传感器的两倍多。温度补偿
发表于 2019-03-13

“物联之星”—安森美AR0430 CMOS图像传感器

产业奖认可单一、低功耗传感器在制作视频和深度图像的创新 推动高能效创新的安森美半导体宣布其AR0430 CMOS图像传感器因创新设计和丰富特性而获得“物联之星”2018中国物联网(IoT)最佳创新产品奖。 “物联之星”是由中国IoT产业应用联盟举办的年度评选,旨在推动IoT产业的发展,和表彰领先的企业和出色的产品创新。 AR0430适用于IoT应用,包括可穿戴设备、增强实境(AR)/虚拟实境(VR)产品、安防和家居/办公室/工厂自动化,归功于安森美半导体开发的技术,提供不可思议的省电及同步视频和深度映射。AR0430的领先功耗、尺寸和帧率,因此用户可有产生400万像素(MP)图像、功耗小于 8 mW
发表于 2019-03-13

创新的“天线罩”测试技术提升汽车雷达系统性能

。错误的数据将导致致命的决策。例如,如果在两辆车相距100米时,雷达系统的角度测量误差为1度,那么当它们靠近时彼此的距离或间隔的误差就有1.5米。这个距离误差足以影响这两辆车是能够安全驶过他们的车道,还是不幸地迎面相撞。麻烦的雷达“天线罩”雷达传感器通常隐藏在车辆散热器格栅上的品牌标志或其保险杠后面。这主要出于美观考虑,不过代价是在雷达信号传播的路径中引入了衰减材料。这些标志或保险杠将成为雷达传感器的“穹顶”或“天线罩”,成为其射频(RF)系统的一部分,它们会改变传输信号,在某种程度上可能影响雷达的探测性能和准确性。这会产生什么影响呢?根据平方反比定律,雷达发射信号的功率随目标距离r的平方而线性衰减,这意味着雷达传感器接收的反射信号
发表于 2019-03-12
创新的“天线罩”测试技术提升汽车雷达系统性能

【STM32】ADC库函数、一般步骤详解 实例:内部温度传感器

STM32F1xx官方资料:《STM32中文参考手册V10》-第11章 模拟/数字转换(ADC)《STM32中文参考手册V10》-第11章 第11.10小节 温度传感器 ADC采样数值如何STM32的ADC模块,得到接入ADC管脚上的实际电压值?会读到什么值由于STM32的ADC是12位逐次逼近型的模拟数字转换器,也就是说ADC模块读到的数据是12位的数据。因此:STM32读到的ADC值,是从0到4095(111111111111)。当把ADC引脚接了GND,读到的就是0;当把ADC引脚接了VDD,读到的就是4095。读到的值怎么换算成实际的电压值前面提到了,我们输入GND,读到的值是0,输入VDD,得到的值是4095
发表于 2019-03-12
【STM32】ADC库函数、一般步骤详解 实例:内部温度传感器

Tyrata推实时胎面磨损传感器 可在危险时发出信号

  据外媒报道,轮胎传感器和数据管理公司Tyrata在研发其IntelliTread TM实时胎面磨损传感器上取得了里程碑式的成就。在各种OEM乘用车轮胎上进行测试之后,该传感器的设计和操作都得到改善。IntelliTread传感器利用无线信号追踪胎面深度在毫米上的变化,当用作商用时且需要更换轮胎时,或报告有关胎面不均匀以及轮胎磨损情况危险的信息时,该传感器会发出信号。  每年,仅在美国,与轮胎相关的事故就造成了数百人死亡,数千人受伤,很多此类事故都因磨损轮胎造成。但是,确定胎面深度的唯一常用方法就是手动测量轮胎,如在轮胎凹槽中夹着一个硬币以确定深度。虽然集成式轮胎压力传感器提高了安全性,但是行业仍急需实时监控轮胎胎面厚度的方法
发表于 2019-03-12
Tyrata推实时胎面磨损传感器 可在危险时发出信号

小广播

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2018 EEWORLD.com.cn, Inc. All rights reserved