【PMM2018】タイミング割り込み系のバグ多発<Xbee Sleep未だ謎>

本日は心拍センサ付きで38km走行しました。
revの古い母艦プログラムをいれてしまったので数Kmでスマホ送信のTICKER0.1秒になってなかったのでNaNエラーなどでてしまいました。しょうがないので、BlueTermで受信して心拍データをみていたのですが、心拍数がGarminで120bpmなのに
50-60bpmになる場合が多発してしまってました。
さらに、BlueTermの受信が止まってしまうというとんでもない出来事が発生して、Xbeeモジュールをはずしたら無事BlueTermもスマホプログラムも38kmまで動作しましたので、
本日の4M変動であるXbeeと旧revのプログラムが問題があることがわかりました。

●心拍数Arduinoプログラムバグ
割り込みを使ってないので、Xbee送信とSLEEPのタイミングに遅れが発生するともろに心拍数が少なくなります。
どうもそれが怪しいので、SLEEP設定をやめて、心拍数エッジタイミングでXBEE送信をする単純なプログラムにしてXbeeもSLEEP無しモードに戻して、心拍数をみてみたらGarminと±5bpm程度におさまりました。
XbeeのSLEEPをCYCLICに設定した状態で、プログラムで連続送信させると動作が不安定になってしまって心拍数のでたらめが一層ひどくなりました。CYCLICモードからSLEEP無モードにXCTUで書き換えてようやく通常の心拍数出力がえられました。
XbeeのSLEEPモードの動作はまだ謎が多くて、実使用段階にはしないほうがいいと思いました。
Arduino UNOは割り込みピンが2,3しかないので、配線をしなおさないといけないので、次回心拍数基板全体の電力量測定するときをに割り込み改造もやってみます。多分、心拍センサとCPUで30mA以上くっていてXbeeが10-20mAなのでXbeeがSLEEPしても全体からすると20-30%しか節電できてないと思います。ですので、しばらくは、SLEEP無で電池をもってあるけば数時間はもつので大丈夫だと思います。



●母艦からのBlueTooth送信でのスマホバファオーバーエラー
心拍数Xbee受信はシリアル割り込みで受信してますが
母艦プログラムはすべて割り込みで処理してますのでそれがどうなっているのか無管理状態です。
①BlueTooth送信は、Ticker割り込み0.1秒
②車輪の回転数センサはピン割り込み
③Xbee受信はシリアル割り込み
D6FPHのI2C読み込みは、早いのでメインLOOPの中で
やってます。

 

これで走行するとNanエラーがでるようになりました。
本日38km走行でXbee無で無事NaNエラーなしでOKだったのでXbee割り込みが悪さをしていると思われます。

■BlueTooth送信部に割り込み禁止
なんと、プログラム全体の速度おそくなって値がばらばらに
なってしまいました。割り込み禁止すると何か想定外のことが
発生するみたいで、割り込み禁止を安易に使うのは危険だと悟りました。

●結局 BlueTooth送信Tickerタイミングを0.5秒にしたら
3kmほど走行で、スマホプログラムが安定してNaNが発生しませんでしたので、この条件で50kmくらい走ってOKなら
母艦プログラムrev09はOKとなります。



●以後
今週中になんちゃってパワーメーターをつくらないといけませんので、急いで実装してプログラムを作ります。
左クランクは、場所がないので、Xbeeをいれるのが厳しいです。右クランクにしてついでにみぎクランクに曲げひずみ出力も測定してSeatTubeひずみと比較しようかと思います。

カテゴリー: Xbee

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です