0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

与现代传感器接口:接口设计

李雪 来源: bairunwanda168 作者: bairunwanda168 2022-07-21 11:15 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在现代开发周期中使用传感器时,重要的是在编写任何传感器代码之前,开发人员花时间仔细考虑他们的系统架构。精心架构的应用程序将提供软件接口,不仅提供与传感器交互的通用方法,而且还将抽象这些传感器的硬件细节。许多嵌入式开发人员仍在编写代码,将他们的传感器代码与他们的应用程序紧密耦合,这使得重用、扩展和测试软件变得具有挑战性。开发人员可以遵循的一个很好的最佳实践是花时间在他们的架构中设计一个合适的接口,然后产生这些好处。在我之前的帖子中,我讨论了不同类型的驱动程序。在这篇文章中,我将讨论接口设计概念以及如何将它们应用于与传感器的接口。

创建接口的好处

使用面向对象语言的开发人员自然会理解接口可以为应用程序提供的好处,但大多数嵌入式系统仍然使用 C 编写,因此这些开发人员可能会忽略这些好处。嵌入式系统中创建与 I/O 设备交互的接口有很多好处,例如:

  • 反转代码依赖方向
  • 增强便携性
  • 抽象的复杂性和低级细节
  • 提高重用性和可扩展性
  • 简化软件维护

当使用接口与传感器交互时,开发人员会发现许多低级细节都是从高级应用程序中抽象出来的。这意味着应用程序不知道传感器是否连接到 ADCI2C 总线、SPI 总线或其他一些硬件接口。

例如,花点时间看一下下图:

pYYBAGLXUT6AEktyAABYBODCu_s638.png

pYYBAGLXUT6AEktyAABYBODCu_s638.png
传感器接口中的抽象(来源:Jacob Beningo)

在此示例中,应用程序通过传感器 API 进行调用,并使用其操作之一与传感器进行交互。应用程序不知道 Sensor API 的幕后发生了什么,它可能有函数调用,例如:

  • Sensor_Read
  • Sensor_Write

该传感器接口可能正在直接调用 ADC 外围设备,或者它可能正在创建从通信外围设备发送出去的消息包。界面的好处是应用程序开发人员不需要知道这些细节。(事实上​​,接口层可能只是取消对已配置为指向正确模块以处理传感器通信的函数指针的引用!这在我们的 C 应用程序中提供了一种简单的继承形式。)

设计传感器接口

有兴趣创建良好、可重复使用的传感器接口的开发人员应该遵循几个步骤。这些步骤有助于确保界面在第一次交互时尽可能可用,即使在界面完全稳定之前可能需要多次迭代。

第一步是确定将在您将设计的嵌入式系统中使用的传感器类型,然后检查数据表。在此步骤中,您希望熟悉所有不同传感器类型之间共有的操作和数据,以及哪些不常见。您会发现,即使跨不同类型的传感器,操作和数据之间也始终存在共性。我们希望将这种共性构建到界面中。我们将不常见的操作和数据构建到该接口的扩展中,这允许我们根据正在开发的应用程序添加和删除这些功能。

接下来,一旦我们确定了操作和数据,我们就可以用 C 语言勾勒出一个可以满足我们传感器需求的接口。该接口的复杂性完全取决于开发人员。例如,我们可以设计一个简单的基于函数调用的接口,其中函数原型可能如下所示:

bool Sensor_Init(const SensorConfig_t * const Config);
bool Sensor_Read(const SensorObj_t * const, SensorData_t * const SensorData);
bool Sensor_Write(const SensorObj_t * const, SensorData_t * const SensorData);

在这种情况下,对接口的任何调用都会返回一个布尔值,该布尔值提供有关操作结果的信息。例如,我们可能会调用Sensor_Read,如果底层实现是轮询设备以获取传感器数据就绪,那么如果没有新数据,我们可能会返回 false。如果数据可用,则可能会将其复制到提供给接口的SensorData位置并返回 true。(我们当然可以变得更复杂并创建错误代码和其他返回值,但我们应该从简单开始)。

该接口可用于与任意数量的传感器进行交互,我们只需将SensorObj信息传递给接口,然后让接口完成我们需要完成的操作即可。我们也可以将其用作模板并为传感器名称重命名Sensor,尽管这开始最小化抽象的有用性和可重用性。

我们可以设计接口的最后一种有趣的方式是成为函数指针的结构。然后,开发人员将实例化该结构并使用与他们想要连接的传感器相关的特定函数调用对其进行初始化。此实现可能如下所示:

typedef struct
{
bool ( Init)(const SensorConfig_t * const Config);
bool (
Read)(const SensorObj_t * const, SensorData_t * const SensorData);
bool (*Write)(const SensorObj_t * const, SensorData_t * const SensorData);
} 传感器_t;

然后,我们可以通过简单地创建和初始化这个结构来为多个传感器使用相同的接口,例如:

常量 Sensor_t 模拟 =
{
Adc_Init,
Adc_Read,
Adc_Write
};
常量 Sensor_t Gyro =
{
Gyro_Init,
Gyro_Read,
Gyro_Write
};

调用传感器的接口然后看起来像:

模拟.Init(AdcConfig);
Gryo.Init(GyroConfig);

正如你所看到的,这种类型的接口是非常可扩展和可重用的。这可能会让一些开发人员感到紧张,因为它确实使用了函数指针。必须注意确保这些函数指针正常运行。

结论

将传感器连接到嵌入式系统时,自然的本能是检查该传感器,然后开始为其编写驱动程序。不幸的是,这导致软件紧密耦合并且不具有可扩展或可重用的优点。正如我们在这篇文章中所看到的,我们应该首先关注我们的软件架构以及我们的传感器如何适应该架构。然后我们可以开发一个接口来抽象出我们传感器的细节,这样应用程序就不会意识到复杂性或低级细节。这样一来,如果在设计周期后期发现传感器不适合应用程序,则可以轻松更换传感器,而无需修改核心应用程序代码


审核编辑 黄昊宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2574

    文章

    54417

    浏览量

    786264
  • 接口设计
    +关注

    关注

    2

    文章

    202

    浏览量

    30645
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    分享1-Wire接口数字温度传感器IC型号

    如今,随着测温应用环境的升级和拓展,精准的温度测量与控制已成为各种环境数据采集的关键,传统模拟温度传感器已经无法满足市场的要求,而1-Wire接口数字温度传感器IC的出现,极大地简化了系统设计。为此
    的头像 发表于 12-02 16:34 389次阅读
    分享1-Wire<b class='flag-5'>接口</b>数字温度<b class='flag-5'>传感器</b>IC型号

    单总线接口数字温度传感器芯片GX18E20

    在工业控制、环境监测与智能设备等领域,温度检测的准确性、系统集成复杂度及布网灵活性直接影响整体方案的可行性与成本。单总线接口数字温度传感器芯片因其极简的硬件连接、可靠的组网能力与高精度特性,正逐步
    的头像 发表于 11-11 15:22 149次阅读

    温度传感器一般走哪些协议和接口

    温度传感器常用的通信协议和接口可根据应用场景(如工业控制、智能家居、物联网等)和传输需求(距离、速度、功耗等)分为有线和无线两大类,具体协议和接口的选择需结合传感器类型、系统架构及成本
    的头像 发表于 09-23 17:22 930次阅读

    HP206W高精度气压与高度传感器:特性、应用及接口设计

    内容概要:HP206W是一款高精度气压计和高度计传感器,具有1.8V到3.6V的工作电压范围,支持直接读取补偿后的气压(20位测量)、高度(20位测量)和温度(20位测量)数据。该传感器采用高速I
    发表于 07-17 14:14 1次下载

    HPS27W高精度气压与温度传感器:特性、应用及接口设计

    内容概要:HPS27W是一款高精度数字气压传感器,具有低功耗和小尺寸的特点,适用于多种移动设备和可穿戴应用。它支持I2C和SPI接口,能够在-40到85℃的工作温度范围内运行,供电电压为1.7V到
    发表于 06-30 16:27 4次下载

    博世推出内置蓝牙接口的MEMS胎压监测传感器

    胎压监测系统(TPMS)。博世推出的新款SMP290胎压传感器,正是在此背景下应运而生。该产品是首款内置低功耗蓝牙(BLE)接口的超小型MEMS(微机电系统)胎压传感器
    的头像 发表于 06-27 10:56 1029次阅读

    传感器有哪些类型?有哪些接口

    传感器的类型和接口种类繁多,以下是一些常见的分类和接口方式: 传感器类型 温度传感器:用于测量温度,常见的有热电偶、热电阻、数字温度
    的头像 发表于 05-22 09:33 1.2w次阅读

    可以通过 slavefifo 接口建立 FX3 和传感器通信吗?

    需要在CYUSB2014和AR0144c之间建立通信。 我们不采用 UVC 框架。 我们可以通过 slavefifo 接口建立 FX3 和传感器通信吗? 我已将“slfifosync”项目文件视为
    发表于 05-19 08:30

    AN75779中描述的图像传感器接口支持的最大分辨率和帧速率吗?

    AN75779中描述的图像传感器接口支持的最大分辨率和帧速率吗? 我想通过连接 FX3 和 Semtech GS2971(SDI 解串)来实现 1920 x1080 @ 30 fps 视频输入的 UVC 流设计,无需 FPGA
    发表于 05-14 06:30

    MAX9621双通道、2线霍尔传感器接口,提供模拟和数字输出技术手册

    MAX9621是Maxim霍尔传感器接口系列产品(现有器件为MAX9921)的新成员。MAX9621提供单芯片方案,用于连接两个2线霍尔传感器和低压微处理(µP),提供数字输出(用于
    的头像 发表于 05-07 10:16 684次阅读
    MAX9621双通道、2线霍尔<b class='flag-5'>传感器</b><b class='flag-5'>接口</b>,提供模拟和数字输出技术手册

    从RF到HDMI:传统接口现代优化

    射频(RF)、复合视频(RCA)、S-Video和视频色差是几种传统的视频接口。尽管这些接口在一些旧设备或特定应用场景中仍然被使用,但随着数字技术的发展,它们的使用频率已经显著下降。现代显示设备
    的头像 发表于 04-15 11:50 1264次阅读
    从RF到HDMI:传统<b class='flag-5'>接口</b>的<b class='flag-5'>现代</b>优化

    【透明胶带】接口检测挑战?超声波传感器来应对

    接头显得尤为重要。然而,由于胶带是透明的,且接口厚度差异不明显,传统的传感器往往难以胜任这一任务。本期小明将给大家分享明治的超声波原理槽型传感器,它以超强的检测稳
    的头像 发表于 03-18 07:33 875次阅读
    【透明胶带】<b class='flag-5'>接口</b>检测挑战?超声波<b class='flag-5'>传感器</b>来应对

    EE-358:红色/透明传感器与ADSP-BF609 Blackfin处理接口

    电子发烧友网站提供《EE-358:红色/透明传感器与ADSP-BF609 Blackfin处理接口.pdf》资料免费下载
    发表于 01-08 14:44 0次下载
    EE-358:红色/透明<b class='flag-5'>传感器</b>与ADSP-BF609 Blackfin处理<b class='flag-5'>器</b><b class='flag-5'>接口</b>

    全球首例介入式脑机接口传感器血管内取出试验成功

    近日,全球首例介入式脑机接口传感器血管内取出试验在北京取得了圆满成功。这一里程碑式的成就标志着脑机接口技术在安全性和可行性方面取得了重大突破。 此次试验由南开大学医学院副院长、人工智能学院教授段峰
    的头像 发表于 01-08 11:31 1068次阅读

    EE-300:Blackfin EZ-KIT Lite电路板与CMOS图像传感器接口

    电子发烧友网站提供《EE-300:Blackfin EZ-KIT Lite电路板与CMOS图像传感器接口.pdf》资料免费下载
    发表于 01-05 10:00 0次下载
    EE-300:Blackfin EZ-KIT Lite电路板与CMOS图像<b class='flag-5'>传感器</b>的<b class='flag-5'>接口</b>