当前位置: 主页 > 新机快讯 >

用独立硬件方法简化嵌入式系统设计:驱动程序实现

发布者:365bet体育
来源:未知 日期:2025-07-10 10:57 浏览()
图1 项目文件夹结构基于系统的系统设计简介,设计人员经常为驱动程序和固件编写代码,以确保所选的传感器可以实现所需的基本功能。这个过程通常是及时和乏味的。为了解决此问题,可以通过组合硬件,软件和固件来简化传感器选择和系统集成来使用插件设计思想。独立的硬件驱动程序不仅可以使传感器集成更好,而且还可以作为重新使用未来设计的通用解决方案。本文将使用惯性测量单元(IMU)传感器作为一个示例来说明如何实现独立硬件的驱动程序,但是此方法也适用于其他类型的传感器和设备。 TheDriver用C编写,并对一般目标微控制器进行了测试。驾驶员的实现附录包含所有提到的图片和代码,可供读者查看。 ■adis16500_rd_error_flag的附录中的图10显示i该功能的效率。此功能读取ADIS16500_REG_DIAG_STAT寄存器中包含的错误标志,如果未发生错误,则所有零件为0。有10个可能的错误,因此该操作返回ADIS16500_ERROR_FLAGS结构,带有10个布尔字段,每个字段表示错误。此功能仅读取ADIS16500_REG_DIAG_STAT寄存器,并使用特定的错误掩码检查每个寄存器。当找到逻辑1时,结构的相应字段将设置为真。 ■ADIS16500_RD_TEMP这是一个pag andar读取温度,其实现方法既加速和陀螺仪(有关详细信息,请参见本系列的第一篇文章)。读取量在℃单元中表示。其二进制值包含在16位寄存器ADIS16500_REG_TEMP_OUT中。之后,数据将转换为两者的补充。两个两者中产生的补品量乘以温度尺度facTOR(在°C/LSB处),最后在°C下有许多数字,并在指针中记录为输入。该功能的实现可在附录中的图9中找到。 ■ADIS16500_GET_TS_USEC此功能用于以μs获取IMU时间戳。实现它的方法与ADIS16500_RD_TEMP函数完全相同。有关详细信息,请参阅附录中的图9。 ■ADIS16500_RD_DATA_CNTR此程序读取Outpu Datumt。实际上,它仅通过读取名为adis16500_reg_data_cntr的寄存器来完成。当寄存器达到其最大值时,它可以从0重新启动。该功能的实现可在附录中的图9中找到。 ■ADIS16500_WR_ACC_CALIB此功能用于执行自定义偏移量。设计人员使用此功能,可以将偏移量添加到从输出数据寄存器中读取的数量中,从而增加X,Y,Y,Z的数据校准的X,Y,Z。浮动。此功能的目的是从floa转换点的点为两个补充值,然后从两个值pand pand增加到两个补充量。所有步骤均可在附录中的图11中找到。接下来,二进制值需要写在“偏置”寄存器中。例如,对于X轴,需要编写两个寄存器:adis16500_reg_x_accel_bias_l(下部16位)和ADIS16500_REG_X_X_ACCEL_BIAS_BIAS_H(较高16位)。两者对于y轴和z轴都是正确的,每个轴都有相应的偏置寄存器。要检查程序是否正确执行,请确保放置IMU传感器时将Z轴垂直针对天空。在这种情况下,X轴和Y轴的加速度值接近0,Z轴值的加速度接近-9.81 m/s2(–g)。调用校准函数并通过校准结构,其中X,Y和Z字段等于–9.81 m/s2,并且读取校准的结果为x = –9.81; y = –9.81; z = 0,这意味着校准偏移函数也可以工作mally。 ■ADIS16500_WR_GYRO_CALIB这是与陀螺仪相关的校准功能的抵消,实现它的方法与加速度的功能完全相同。区别在于,陀螺仪的校准需要根据数据表上的说明以及使用相应的陀螺仪偏移寄存器进行。本文侧重于IMU传感器驱动程序,但其软件/固件结构可用于任何类型的传感器。因此,为了获得所有传感器的通用支持,您只需要根据传感器和微控制器之间的通信协议(例如SPI,I2C,UART等)进行调整。传感器启动过程仍然有效,因为启动记录的操作是通过通信协议发送和接收到的。除了有关传感器和微控制器之间的硬件连接的基本说明之外,如何在项目中介绍和使用驱动程序(MCu)传感器和单元还提供有关如何从软件和固件角度介绍驱动程序的相关指南。图1项目文件夹的项目结构驱动程序没有标准的组织结构。图1显示了文件夹的建议结构。 Userlib文件夹包含所有传感器驱动程序。在此示例中,只有IMU传感器驱动程序,但是如果该项目包含更多的传感器,则实际上以相同的方式组织起来。 Userlib中有两个文件夹,尤其是SRC。该文件夹包含驱动程序的标头文件,即在此示例中,adis16500.h,SRC包含源文件,即ADIS16500.C。还有一个makefile是指Userlib上随附的指令,此类牙齿显示图2。它位于Main.C附近的应用层中。 MakeFile包含user.mk,如图3(代码行115)中的红色下划线所示。在makefile(.mk)中,设计人员可以将驱动程序接口引入应用程序ation层(例如Main.C中),可以调用传感器驱动程序的所有常规功能。这样,将在应用程序层和传感器驱动层层之间建立链接。传感器驱动程序(ADIS16500.H)的接口可以用应用层识别。因此,在应用程序层中,将通过上面的开始程序建立传感器驱动器层和外围驱动器层之间的链接。在使用IMU传感器的特定情况下,发射器,接收器SPI函数和系统延迟在main.c文件中定义,如附录中的图2所示。这三个操作员完全符合驱动程序标头文件中的原型,尤其是附录图3顶部显示的原型。这三个函数是由外围驱动器层提供的内部功能,例如spiselect,spisend,superceive,spiunelect和chthdsleepmicroseconds。因此,SPI,发射器和系统延迟的接收者代表如图2所示的附录中的图2所示,外围驱动层和传感器驱动器层之间的链接将分配给开始 - UP结构。以上是将驱动因素引入项目的整个过程。如果您想从传感器中获取输出,设计人员可以使用ADIS16500_RD_ACC和ADIS16500_RD_GYRO部分中引入的单函数。传感器读数没有绝对的一般过程,图4仅提供一个示例。图4传感器输出读取此示例中的示例,Main.c上有一个无限循环,该循环始终对名为_ADIS16500_DATA_READY的布尔静态变量进行评估。该变量与回调函数关联,当DR引脚高时,它会移至真实,这意味着可以使用新数据。在这种情况下,主函数将称为ADIS16500_RD_ACC和ADIS16500_RD_GYRO函数。通过全速运行IMU传感器,设计人员以2 kh的输出(ODR)数据速率获取数据z。结论本文介绍了驾驶员的功能以及如何通过Indepen PropecturesHardware对话简化传感器的集成。独立的硬件驱动程序可以用作将来设计中重复使用的一般解决方案。作者Giocomo Paterniani的引言拥有博洛尼亚大学的生物医学工程学位,并拥有摩德纳 - 雷吉奥·埃米里亚大学的电子工程硕士学位。毕业后,他在Modena-Reggio大学艾米利亚大学担任研究员一年。 2022年4月,他加入了ADI研究生课程,担任研究生现场申请工程师。 2023年4月,他成为Fae。
分享到