MPU6050 使用注意事項(xiàng)
正點(diǎn)原子的MPU6050很多時(shí)候會(huì)突然莫名奇妙的抽風(fēng)...
我一度以為是傳感器壞掉的原因,但是實(shí)際上傳感器時(shí)好時(shí)壞。我就做了一些嘗試,查看DMP輸出到底卡在了那里,因?yàn)槭裁磳?dǎo)致了MPU6050不能正常工作。
DMP輸出主要卡在一下地方。
連接失敗
這個(gè)我實(shí)測(cè),只有給mpu6050芯片重新上電來(lái)的實(shí)在。重新上電,然后重新運(yùn)行程序。
DMP的初始化失敗(自檢失?。?/p>
一定要保持穩(wěn)定的連接?。?!初始化的時(shí)候最好不要亂動(dòng),不要用手碰傳感器的引腳,尤其實(shí)杜邦線(xiàn)連接的?。?!我相當(dāng)一部分時(shí)間都是拿在手里測(cè)試的,所以總是出問(wèn)題。手觸碰引腳的時(shí)候會(huì)造成一個(gè)突然的毛刺。在初始化的時(shí)候,可能就是因?yàn)檫@個(gè)毛刺,導(dǎo)致了DMP的初始化失敗。
DMP初始化成功,但是讀不到數(shù)據(jù)
這是因?yàn)樽x取dmp的buffer 的時(shí)候出現(xiàn)了問(wèn)題??梢試L試一下重啟程序。如果重啟不能解決問(wèn)題。那就需要給傳感器斷電。(先按住reset,讓程序不運(yùn)行,然后給傳感器斷電,上電,再松開(kāi)reset。這樣子可以保證下一次如果初始化成功了,那就能讀到數(shù)據(jù))
DMP剛開(kāi)始可以正常輸入輸出,但是突然間掛掉了。
這個(gè)是因?yàn)楣╇姵霈F(xiàn)了一下問(wèn)題,給mpu重新上電,然后重啟程序。不用懷疑數(shù)據(jù)線(xiàn)出了問(wèn)題,因?yàn)镮IC讀取出現(xiàn)錯(cuò)誤的話(huà),hal庫(kù)應(yīng)該會(huì)報(bào)錯(cuò),但是當(dāng)數(shù)據(jù)線(xiàn)重新連接之后,就能夠正常的讀取數(shù)據(jù)了。
????一般來(lái)說(shuō)這個(gè)初始化都是寫(xiě)在setup里面的,而不是在loop里面。所以這個(gè)問(wèn)題只能通過(guò)物理的reset來(lái)處理。所以在讀取的時(shí)候,所以應(yīng)該添加一個(gè)變量來(lái)監(jiān)測(cè),當(dāng)DMP沒(méi)有準(zhǔn)備好,或者buffer沒(méi)有準(zhǔn)備好的時(shí)候,就重啟一下DMP。如我下面的做法。
????這個(gè)flag最好不要使用bool類(lèi)型的值來(lái)作為判斷。因?yàn)樵趯?shí)際的測(cè)試中發(fā)現(xiàn),第一次讀取到值的時(shí)候,第二次數(shù)據(jù)一定會(huì)出問(wèn)題(我使用的庫(kù)是這樣子的,可能是庫(kù)有bug)。在這之后的一直正常。再一個(gè)就是當(dāng)電源出現(xiàn)非常短暫的接觸不良的時(shí)候,其實(shí)是可以續(xù)上的。所以這個(gè)時(shí)候就可以認(rèn)定為沒(méi)有問(wèn)題。如果多次獲取數(shù)據(jù)出現(xiàn)問(wèn)題,就說(shuō)明需要重啟mpu6050。

????這樣子可以一下子知道問(wèn)題出現(xiàn)再哪個(gè)地方,遇到不嚴(yán)重的,他自己就能重啟DMP。如果這個(gè)反復(fù)運(yùn)行這個(gè)重啟DMP的程序,說(shuō)明有地方一直過(guò)不去,給mpu斷一下電就可以了。