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

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

3天内不再提示

有浅入深的介绍BLE与MEMS中的开发板设计

MEMS技术 来源:互联网 作者:佚名 2018-03-31 08:44 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

当BLE遇到MEMS,就如同天使有了翅膀。本期从有浅入深的介绍BLE与MEMS的那些事,就从ST的STEVAL-IDB007V1开发板中BLE_SensorDemo例程开始。

蓝牙入门网上资料很多,可参考《蓝牙BLE权威教程》,或者看看干货 | BLE开发,你要知道这几件事

开发环境搭建请参考论坛帖子STEVAL-IDB007V1之透传演示操作流程和所需软件资源下载(http://bbs.eeworld.com.cn/thread-604229-1-1.html),从开始菜单进入BlueNRG-1 Navigator可以实际运行各种例程查看效果。

硬件连接:使用ST-Link V2中SWCLK与SWDIO与开发板对应的引脚连接,用来仿真;供电和串口都通过USB线缆。

下图是局部放大图:

会发现陀螺仪的值会跳变(不同的倾角下跳变的概率不一样,更新频率越高,跳变的概率越大),由于陀螺仪在原始的寄存器值上乘以了70,将跳变值除以70后为+255和-255。

经过一系列的摸索,和ST工程师的帮助,终于解决了问题,见下图,那就是将BDU(Block Data Update)位置1,没有置1的话,数据没有准备好就被读出来也是有可能的,这也就是为何更新频率设置的越高就会越容易出现错误值的原因。

其实早在2015年在数据手册中就建议将BDU位置1了,后来的官方初始化程序中也都将BDU置1了。

下面是不动芯片,仅仅将BDU置1后的效果:

因此想要准确的的获取的数据记得将BDU位置1哦。

更高效的读取数据传感器使用的是SPI接口,这点很好,相比于IIC,SPI这是要快太多了,我们可以节约更多的时间用来做其他的事,也有利于节能,该芯片最高支持10MHz的SPI速度,但是驱动却写的不是很高效,官方代码如下:

  1. static IMU_6AXES_StatusTypeDef LSM6DS3_G_GetAxes( int32_t *pData )

  2. {

  3. /*Here we have to add the check if the parameters are valid*/

  4. int16_t pDataRaw[3];

  5. float sensitivity = 0.0f;

  6. if(LSM6DS3_G_GetAxesRaw(pDataRaw) != IMU_6AXES_OK)

  7. {

  8. return IMU_6AXES_ERROR;

  9. }

  10. if(LSM6DS3_G_GetSensitivity( &sensitivity ) != IMU_6AXES_OK)

  11. {

  12. return IMU_6AXES_ERROR;

  13. }

  14. pData[0] = (int32_t)(pDataRaw[0] * sensitivity);

  15. pData[1] = (int32_t)(pDataRaw[1] * sensitivity);

  16. pData[2] = (int32_t)(pDataRaw[2] * sensitivity);

  17. return IMU_6AXES_OK;

  1. static IMU_6AXES_StatusTypeDef LSM6DS3_G_GetAxesRaw( int16_t *pData )

  2. {

  3. /*Here we have to add the check if the parameters are valid*/

  4. uint8_t tempReg[2] = {0, 0};

  5. if(LSM6DS3_IO_Read(&tempReg[0], LSM6DS3_XG_MEMS_ADDRESS, LSM6DS3_XG_OUT_X_L_G, 2) != IMU_6AXES_OK)

  6. {

  7. return IMU_6AXES_ERROR;

  8. }

  9. pData[0] = ((((int16_t)tempReg[1]) << 8) + (int16_t)tempReg[0]);

  10. if(LSM6DS3_IO_Read(&tempReg[0], LSM6DS3_XG_MEMS_ADDRESS, LSM6DS3_XG_OUT_Y_L_G, 2) != IMU_6AXES_OK)

  11. {

  12. return IMU_6AXES_ERROR;

  13. }

  14. pData[1] = ((((int16_t)tempReg[1]) << 8) + (int16_t)tempReg[0]);

  15. if(LSM6DS3_IO_Read(&tempReg[0], LSM6DS3_XG_MEMS_ADDRESS, LSM6DS3_XG_OUT_Z_L_G, 2) != IMU_6AXES_OK)

  16. {

  17. return IMU_6AXES_ERROR;

  18. }

  19. pData[2] = ((((int16_t)tempReg[1]) << 8) + (int16_t)tempReg[0]);

  20. return IMU_6AXES_OK;

  21. }

每次都是单次读取(读两个字节)每一轴的数据,而且还获取了一次sensitivity(读一个字节)。

我们知道SPI要完成一次读数据的操作,本质是需要读写两次的,第一次将地址写进去,然后再将0写入,将数据弄出来。因此驱动如果需要读取6轴的数据一共需要写12次,读18次SPI。而我认为sensitivity是开始设置的,可以不读,然后6轴的数据可以一次全部读出来,因为默认SPI地址是会累加的,

因此程序可以改成如下,然后将陀螺仪值乘以70,加速度计值乘以0.122

  1. void Get_Sensor_RawData(void){

  2. Sensor_IO_Read(NULL,LSM6DSL_ACC_GYRO_OUTX_L_G,regValue, 12);

  3. for(int i=0;i<6;i++){

  4. Sensor_Raw_Data[/size][/font][font=微软雅黑][size=3] = ( ( ( ( int16_t )m_rx_buf[2*i+2] ) << 8 ) + (int16_t )m_rx_buf[2*i+1] );

  5. }

  6. }

从0x22地址开读,也就是写1次,读12次,而且还节约了SPI的开启和关闭的耗时,这样就大大的提高的数据获取的速度,如果可以使用DMA能够更高效。

因此如果想要更加高效的使用陀螺仪加速度计,记得要连续的读取12个字节且无需读取灵敏度哦。


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

    关注

    129

    文章

    4529

    浏览量

    199565
  • 陀螺仪
    +关注

    关注

    44

    文章

    897

    浏览量

    102093
  • ST
    ST
    +关注

    关注

    32

    文章

    1193

    浏览量

    132758

原文标题:干货 | 当BLE遇到MEMS——收服和调教

文章出处:【微信号:wwzhifudianhua,微信公众号:MEMS技术】欢迎添加关注!文章转载请注明出处。

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    免费试用|睿擎派开发板等你来测:提交高质量报告,开发板免费送

    正在为下一代工业控制器选型?想在实际硬件上验证AMP混合部署、EtherCAT实时性?免费申请一块睿擎派,30天深度测试,只要提交高质量报告,开发板就归你。睿擎工业平台现面向真实项目需求的开发
    的头像 发表于 04-17 11:56 105次阅读
    免费试用|睿擎派<b class='flag-5'>开发板</b>等你来测:提交高质量报告,<b class='flag-5'>开发板</b>免费送

    新品!从MINI到工业:米尔T153开发板工业场景全覆盖

    今年1月,米尔发布了MYD-YT153MX-MINI开发板,该产品精准切入国产核心端市场领域,具有极致性价比,自上市即获得良好的市场反响。为方便开发者灵活选择、适配更专业的场景,
    的头像 发表于 03-27 08:03 2040次阅读
    新品!从MINI到工业<b class='flag-5'>板</b>:米尔T153<b class='flag-5'>开发板</b>工业场景全覆盖

    Azukar-FPGA开源FPGA教育开发板介绍

    初学 FPGA 数字设计总遇坎?商用开发板绑定专有工具链,学习成果无法跨项目复用;元件封装稀有难焊接,新手手动装配频频失败;设计文件不公开,想复刻改造却无据可依;开发板架构固定,适配不了实验室多样的实训需求?
    的头像 发表于 03-11 11:22 610次阅读
    Azukar-FPGA开源FPGA教育<b class='flag-5'>开发板</b><b class='flag-5'>介绍</b>

    LuatOS平台下BLE蓝牙开发从入门到实践

    者,全面介绍LuatOSBLE模块的基础知识,涵盖角色定义(主机/从机)、服务配置、特征值操作与事件回调机制,并通过一个完整的温湿度数据上报案例,逐步演示应用开发全过程。 一、
    的头像 发表于 02-02 16:32 7644次阅读
    LuatOS平台下<b class='flag-5'>BLE</b>蓝牙<b class='flag-5'>开发</b>从入门到实践

    星鸿派——开源星闪开发板上线!首批试用申请~

    “本项目是一款基于海思WS63V100系列平台的星闪开发板,支持Wi-Fi、BLE和SLE通信。可以应用于开发智能家电、物联网智能终端等方面。配置了一块0.96寸oled显示屏,六个按键以及一个复位
    的头像 发表于 01-27 08:04 793次阅读
    星鸿派——开源星闪<b class='flag-5'>开发板</b>上线!首批试用申请<b class='flag-5'>中</b>~

    工程师必!288 元解锁赛灵思开发板

    做项目、练技术、备赛事却找不到高性价比开发板?合众恒跃重磅福利——赛灵思ZYNQ系列开发板限时特惠,HZ-XC-7Z010-SP_EVM宠粉价仅需288元!
    的头像 发表于 12-17 17:48 1003次阅读
    工程师必<b class='flag-5'>入</b>!288 元解锁赛灵思<b class='flag-5'>开发板</b>

    ESP32-P4全功能开发板和ESP32-P4-TINY开发板该怎么选?看这篇就够了!

    启明云端基于乐鑫科技ESP32-P4芯片设计了多款开发板,这些开发板什么区别?基于应用场景如何选择?本期,我们聚焦两款代表性产品:WT99P4C5-S1开发板与WT9932P4-TI
    的头像 发表于 12-09 18:02 1236次阅读
    ESP32-P4全功能<b class='flag-5'>开发板</b>和ESP32-P4-TINY<b class='flag-5'>开发板</b>该怎么选?看这篇就够了!

    【作品合集】沁恒微电子CH585开发板测评

    沁恒微电子CH585开发板测评作品合集 产品介绍: CH585是集成BLE无线通讯和高速USB及NFC的RISC-V MCU/SoC。片上集成了2Mbps低功耗蓝牙BLE通讯模块、US
    发表于 09-08 10:38

    ESP32开发板元件资料

    ESP32开发板元件
    发表于 07-21 14:47 17次下载

    如何选择合适的芯科科技Wi-Fi开发板

    您正在寻找适用于超低功耗物联网应用项目的Wi-Fi 开发板吗?本文将介绍Silicon Labs(芯科科技)推出的所有SiWx917 Wi-Fi 6和低功耗蓝牙5.4解决方案的Wi-Fi 开发板。SiWx917是目前市场上最节能
    的头像 发表于 07-09 09:15 2932次阅读

    微爱芯32位MCU开发板AiP32RV15X介绍

    AiP32RV15X开发板是一款基于RISCV内核的32位MCU开发板,提供了板载调试器、RESET、WAKEUP按键、三色LED、CAN收发器、USB接口、UART、ADC、SPI、IIC、RTC、TIMER、WDT、GPIO等资源。
    的头像 发表于 06-17 10:54 1020次阅读
    <b class='flag-5'>中</b>微爱芯32位MCU<b class='flag-5'>开发板</b>AiP32RV15X<b class='flag-5'>介绍</b>

    ARM,NPU,FPGA三种核心的开发板 — 米尔安路飞龙派开发板

    最近我发现一个有趣的开发板。这个开发板集合了ARM核心,NPU核心甚至还有FPGA核心。它就是米尔新出的YM90X开发板。它基于安路科技所打造的芯片上海安路信息科技于2021年在上交所科创
    的头像 发表于 06-13 08:03 1984次阅读
    <b class='flag-5'>有</b>ARM,NPU,FPGA三种核心的<b class='flag-5'>开发板</b> — 米尔安路飞龙派<b class='flag-5'>开发板</b>

    【新品】远距离图传数传模块开发板、蓝牙模块开发板、无线模块开发板

    新品上市图传数传模块开发板蓝牙模块开发板国产无线模块开发板部分型号参与送样文末了解详情↓↓↓EWT611-900NW20S远距离图传数传模块开发板EWT611-900NW20S是一款入
    的头像 发表于 06-12 19:33 1414次阅读
    【新品】远距离图传数传模块<b class='flag-5'>开发板</b>、蓝牙模块<b class='flag-5'>开发板</b>、无线模块<b class='flag-5'>开发板</b>

    第二章 开发板与芯片介绍 详解W55MH32芯片及开发板

    本章介绍了W55MH32芯片及开发板。该芯片采用Cortex-M3内核,主频216MHz,集成以太网功能,L和Q两种型号。配套开发板L-EVB功能丰富、Q-EVB为最小系统
    的头像 发表于 05-26 09:19 1715次阅读
    第二章 <b class='flag-5'>开发板</b>与芯片<b class='flag-5'>介绍</b>  详解W55MH32芯片及<b class='flag-5'>开发板</b>

    NXP i.MX 91开发板#支持快速创建基于Linux®的边缘器件

    例评估,使开发人员能够加快产品开发,同时显著降低成本。FRDM i.MX 91具有各种接口、PMIC和三频无线电Wi-Fi^®^ 6、蓝牙低功耗(BLE)和802.15.4模块。^^
    的头像 发表于 05-19 10:55 3387次阅读
    NXP i.MX 91<b class='flag-5'>开发板</b>#支持快速创建基于Linux®的边缘器件