0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

有淺入深的介紹BLE與MEMS中的開發(fā)板設(shè)計

MEMS技術(shù) ? 來源:互聯(lián)網(wǎng) ? 作者:佚名 ? 2018-03-31 08:44 ? 次閱讀

當BLE遇到MEMS,就如同天使有了翅膀。本期從有淺入深的介紹BLE與MEMS的那些事,就從ST的STEVAL-IDB007V1開發(fā)板中BLE_SensorDemo例程開始。

藍牙入門網(wǎng)上資料很多,可參考《藍牙BLE權(quán)威教程》,或者看看干貨 | BLE開發(fā),你要知道這幾件事

開發(fā)環(huán)境搭建請參考論壇帖子STEVAL-IDB007V1之透傳演示操作流程和所需軟件資源下載(http://bbs.eeworld.com.cn/thread-604229-1-1.html),從開始菜單進入BlueNRG-1 Navigator可以實際運行各種例程查看效果。

硬件連接:使用ST-Link V2中SWCLK與SWDIO與開發(fā)板對應(yīng)的引腳連接,用來仿真;供電和串口都通過USB線纜。

下圖是局部放大圖:

會發(fā)現(xiàn)陀螺儀的值會跳變(不同的傾角下跳變的概率不一樣,更新頻率越高,跳變的概率越大),由于陀螺儀在原始的寄存器值上乘以了70,將跳變值除以70后為+255和-255。

經(jīng)過一系列的摸索,和ST工程師的幫助,終于解決了問題,見下圖,那就是將BDU(Block Data Update)位置1,沒有置1的話,數(shù)據(jù)沒有準備好就被讀出來也是有可能的,這也就是為何更新頻率設(shè)置的越高就會越容易出現(xiàn)錯誤值的原因。

其實早在2015年在數(shù)據(jù)手冊中就建議將BDU位置1了,后來的官方初始化程序中也都將BDU置1了。

下面是不動芯片,僅僅將BDU置1后的效果:

因此想要準確的的獲取的數(shù)據(jù)記得將BDU位置1哦。

更高效的讀取數(shù)據(jù)傳感器使用的是SPI接口,這點很好,相比于IIC,SPI這是要快太多了,我們可以節(jié)約更多的時間用來做其他的事,也有利于節(jié)能,該芯片最高支持10MHz的SPI速度,但是驅(qū)動卻寫的不是很高效,官方代碼如下:

  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. }

每次都是單次讀?。ㄗx兩個字節(jié))每一軸的數(shù)據(jù),而且還獲取了一次sensitivity(讀一個字節(jié))。

我們知道SPI要完成一次讀數(shù)據(jù)的操作,本質(zhì)是需要讀寫兩次的,第一次將地址寫進去,然后再將0寫入,將數(shù)據(jù)弄出來。因此驅(qū)動如果需要讀取6軸的數(shù)據(jù)一共需要寫12次,讀18次SPI。而我認為sensitivity是開始設(shè)置的,可以不讀,然后6軸的數(shù)據(jù)可以一次全部讀出來,因為默認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次,而且還節(jié)約了SPI的開啟和關(guān)閉的耗時,這樣就大大的提高的數(shù)據(jù)獲取的速度,如果可以使用DMA能夠更高效。

因此如果想要更加高效的使用陀螺儀加速度計,記得要連續(xù)的讀取12個字節(jié)且無需讀取靈敏度哦。


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • mems
    +關(guān)注

    關(guān)注

    128

    文章

    3868

    瀏覽量

    189851
  • 陀螺儀
    +關(guān)注

    關(guān)注

    44

    文章

    768

    瀏覽量

    98186
  • ST
    ST
    +關(guān)注

    關(guān)注

    32

    文章

    1120

    瀏覽量

    128551

原文標題:干貨 | 當BLE遇到MEMS——收服和調(diào)教

文章出處:【微信號:wwzhifudianhua,微信公眾號:MEMS技術(shù)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    51開發(fā)板芯片資料

    51開發(fā)板芯片資料
    發(fā)表于 09-18 09:29 ?1次下載

    瑞薩開發(fā)板?RX-FSOE-REF-KIT功能安全使用介紹(上)

    本文基于瑞薩官方開發(fā)板RX-FSOE-REF-KIT,介紹EtherCAT通訊的功能安全應(yīng)用開發(fā)以及實現(xiàn)過程所需的開發(fā)環(huán)境。
    的頭像 發(fā)表于 08-20 15:25 ?230次閱讀
    瑞薩<b class='flag-5'>開發(fā)板</b>?RX-FSOE-REF-KIT功能安全使用<b class='flag-5'>介紹</b>(上)

    EFR32MG24開發(fā)板介紹及IDE使用

    EFR32MG24開發(fā)板介紹及IDE使用
    的頭像 發(fā)表于 08-10 10:47 ?365次閱讀
    EFR32MG24<b class='flag-5'>開發(fā)板</b><b class='flag-5'>介紹</b>及IDE使用

    多個esp32開發(fā)板如何組成ble mesh網(wǎng)絡(luò),是否可以自動組網(wǎng)呢?

    關(guān)于example下的ble_mesh樣例ble_mesh_node 1.多個esp32開發(fā)板如何組成mesh網(wǎng)絡(luò),是否可以自動組網(wǎng)? 2、在組成mesh的情況下,各個esp32如何和應(yīng)用程序進行接口,如api和回調(diào)? 3、節(jié)點
    發(fā)表于 06-24 07:53

    使用esp-idf-v5.0.1 example的esp_ble_mesh例程遇到的疑問求解

    本人使用esp-idf-v5.0.1 example的esp_ble_mesh例程,共使用6個ESP-WROVER-KIT開發(fā)板。在4個開發(fā)板上燒寫onoff_client例程,在1
    發(fā)表于 06-12 07:25

    鴻蒙OpenHarmony南向:【Hi3861開發(fā)板介紹

    Hi3861開發(fā)板是一片大約2cm*5cm大小的開發(fā)板,是一款高度集成的2.4GHz WLAN SoC芯片,集成IEEE 802.11b/g/n基帶和RF(Radio Frequency)電路。支持,并配套提供開放、易用的開發(fā)
    的頭像 發(fā)表于 05-06 17:19 ?706次閱讀
    鴻蒙OpenHarmony南向:【Hi3861<b class='flag-5'>開發(fā)板</b><b class='flag-5'>介紹</b>】

    fpga開發(fā)板是什么?fpga開發(fā)板哪些?

    FPGA開發(fā)板是一種基于FPGA(現(xiàn)場可編程門陣列)技術(shù)的開發(fā)平臺,它允許工程師通過編程來定義和配置FPGA芯片上的邏輯電路,以實現(xiàn)各種數(shù)字電路和邏輯功能。FPGA開發(fā)板通常包括FPGA芯片、時鐘模塊、電源模塊、輸入輸出接口等組
    的頭像 發(fā)表于 03-14 18:20 ?1496次閱讀

    fpga開發(fā)板使用教程

    FPGA開發(fā)板的使用教程主要包括以下幾個關(guān)鍵步驟。
    的頭像 發(fā)表于 03-14 15:50 ?783次閱讀

    fpga開發(fā)板與linux開發(fā)板區(qū)別

    FPGA開發(fā)板與Linux開發(fā)板是兩種不同的硬件開發(fā)平臺,各自具有不同的特點和應(yīng)用場景。在以下的文章,我將詳細介紹FPGA
    的頭像 發(fā)表于 02-01 17:09 ?1679次閱讀

    51單片機開發(fā)板的主要功能 51單片機開發(fā)板能做什么

    51單片機開發(fā)板是一種基于8051系列單片機芯片的開發(fā)板,具有豐富的功能和廣泛的應(yīng)用。下面將詳細介紹51單片機開發(fā)板的主要功能以及能夠?qū)崿F(xiàn)的各種應(yīng)用。 一、基本功能: 通用輸入輸出:5
    的頭像 發(fā)表于 01-23 15:52 ?2665次閱讀

    51單片機開發(fā)板原理圖介紹

    電子發(fā)燒友網(wǎng)站提供《51單片機開發(fā)板原理圖介紹.pdf》資料免費下載
    發(fā)表于 12-18 09:12 ?4次下載

    小安派-Cam-D開發(fā)板哪些新亮點

    這次升級迭代了AiPi-Cam-D,來看看這款開發(fā)板哪些新亮點?
    的頭像 發(fā)表于 12-03 10:01 ?399次閱讀
    小安派-Cam-D<b class='flag-5'>開發(fā)板</b><b class='flag-5'>有</b>哪些新亮點

    Python拷貝與拷貝的操作

    【例子】拷貝與拷貝 list1 = [ 123 , 456 , 789 , 213 ]list2 = list1list3 = list1[:] print (list2) # [ 123
    的頭像 發(fā)表于 11-02 10:58 ?315次閱讀

    國民技術(shù)N32系列開發(fā)板資料合集

    本專題為國民技術(shù)N32系列開源移植挑戰(zhàn)賽配套資料,包含了N32G45x開發(fā)板、N32G43x開發(fā)板和N32G430開發(fā)板等7款開發(fā)板的詳細資料
    發(fā)表于 10-08 14:21
    國民技術(shù)N32系列<b class='flag-5'>開發(fā)板</b>資料合集

    【XR806開發(fā)板試用】留言功能開發(fā)

    XR806開源鴻蒙開發(fā)板是一款基于XR806芯片設(shè)計,高度集成WiFi/BLE/常用外設(shè),可供開發(fā)者進行方案評估、DIY或小規(guī)模產(chǎn)品研發(fā),可廣泛應(yīng)用于智能家居、智能樓宇、智能城市和工業(yè)互聯(lián)等領(lǐng)域。
    的頭像 發(fā)表于 10-08 10:58 ?524次閱讀