Giter VIP home page Giter VIP logo

Comments (3)

Hom-Wang avatar Hom-Wang commented on June 14, 2024

Hi 依蓉,

關於 slv0 & slv4 的差別可以參考 mpu9250 datasheet"4.14 MPU-9250 Solution Using SPI Interface"

mpu9250_spi_slvx

就自己的實驗與理解,對於 single byte 的讀寫 slv4 較為合適,像是設定 mpu9250 裡的磁力計暫存器或是讀取 device id 之類的,對於重複讀取資料則是以 slv0~3 較合適,依所設定的 i2c 資訊與地址,自動器讀取磁力計的暫存器。

所以我是先透過 slv4 (this and this) 來設定磁力計、讀取 id 以及相關的校正參數,這部分只需要做一次,再設定 slv0 (this)來自動讀取磁力計的資料暫存器與狀態暫存器,最後只需要跟加速度與角速度一起讀出即可。

下面是讀取 mpu9250 九軸資料的實現 source code,因為 slv0~3 會透過 i2c 自動將從磁力計的資料讀取並存至暫存器 EXT_SENS_DATA_xx 裡,所以只須從該暫存器讀出,並判斷磁力計數據是否轉換完成(磁力計部分可參考 ak8963 datasheet

getdata

另外關於 spi 讀取多顆 mpu9250 的部分,不同的 mpu9250 會接在相同的 sck, sdo, sdi 上,透過不同的 cs 來選擇要讀寫哪個 mpu9250,每個都是獨立去設定 slv0~4,不同的 mpu9250 間並不互相衝突,自然也就不會有你所說的"若使用Slave 4否適用在SPI讀取多顆MPU9250的情況"的問題了。

建議可以了解一下之前寫的 spi 讀取磁力計資料的程式,已經驗證過沒有問題,希望可以幫助到你 : )

from smartimu.

ijunglee avatar ijunglee commented on June 14, 2024

謝謝您的回答,請問SPI讀取磁力計資料的程式是指這支嗎?

我參考了您的流程實作後的程式碼如this,大致上的流程就是先做完InitialSensor之後,就直接進入ReadAll,num參數均為sensor編號,這邊只用一顆所以均設定為初始值0。

結果發現有以下兩個問題:

  1. line 178的
    if(!(!(response[14] & AK8963_STATUS_DRDY) || (response[14] & AK8963_STATUS_DOR) || (response[21] & AK8963_STATUS_HOFL)))
    response為我去讀取ACC~MAG資料的結果,會存在這個buffer內
    這段我一直判斷出false,所以無法取得磁力計的資料
    我抓了response的結果如下:
    problem
  2. 不只磁力計,加速規和陀螺儀我讀出來的資料也非常不穩定:
    problem2

以上資料均為MPU9250平放時的結果
請問您有看出什麼樣的問題嗎?謝謝您!

from smartimu.

Hom-Wang avatar Hom-Wang commented on June 14, 2024

關於你的兩個問題:

1、直判斷出 false 的情況有可能是因為沒有設定好 slv0 的自動讀取或是磁力計的設定,可以在寫完後,再讀出來確認是否有正確寫入,另外是我比較你和我寫的,發現初始化的 clock source 不同,不知道有沒有差,有點懶得看 datasheet...,還有 delay 的部分(this line 140),速度太快會導致 i2c 還沒有寫完就被中斷掉了,延遲部分感覺問題比較大。

有試過讀取磁力計的 device id 還有之前的問題嗎?

2、磁力計的讀寫應該是影響不到陀螺儀和加速度計的,需要先確定是否在傳輸的部分有問題,可以先關閉 slv0 的自動讀取,再讀看看加速度計和陀螺儀是否還有相同問題。

因為手邊也沒有相同的硬體,很難幫忙除錯,只能比較自己寫的,
另外可以試試從感測器上拉出 AUX_CL 和 AUX_DA 的腳位,勾在示波器上,
確定 i2c 可以自動讀寫以及時脈是否有錯誤。

from smartimu.

Related Issues (7)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.