Training TracerのIMUを1軸だけ取得にすると1msでの制御周期ができそうなことは確認したが、実際に内部波形を見てみるともっと遅い周期で動いていそうなことに気づいた
エンコーダーとジャイロの値の更新が7ms毎に見えるので、検討してみる。
まずはI2Cの通信が影響していそうなので![]()
cubeMXのファイルを開いて、I2Cの項目を確認する。
なんとI2Cがスタンダードモードの100kHzに設定されていた。
クロックをFast modeの400kHzに設定してFall timeとRise timeも0 nsにしてみる。
データの更新速度を確認すると、エンコーダーの更新速度は3msで更新されたが、I2Cジャイロは9ms毎に遅くなったように見える

次にsimulinkに戻ってジャイロの初期化関数を見てみる
レジスタ10hに07hが書き込まれている。BMX055のレジスタ10hはバントパスフィルタとサンプリングレート(ODR)のレジスタで、07hはODRが100Hz(フィルタ32Hz)の設定だった。

ということでODRを1000Hz設定の02hに書き換えてみる。
データの更新速度をモニターしてみると、
2ms毎更新まで詰めることができた
意図した制御周期で動いているかの確認方法が、監視と調整の時間と実時間の一致だけでは判断できないことが分かった。
さてどう確認すればいいものか?










PIDコントローラは離散系にして、サンプリング時間は実機に合わせて0.005sに、実機に合わせて出力の上下限とアンチワインドアップも設定しておく。















Embedded Coderの出力するコードの制御周期が本当にソルバーの固定ステップの指定時間周期で動いているのか疑問だったが、無理な値では正しく動かないらしい。そして、制御周期が間に合っているかの判断は、監視と調整の設定時間と実時間があっているかで判断できる。




