以下の内容はhttps://chamekichi.hatenadiary.jp/entry/2024/05/17/145229より取得しました。


【ATOMS3】ATOMS3ではmicros()の代わりにESP.getCycleCount()を使ったほうが良いかも【ESP32S3】

現在、ATOMS3を使ったデバイスを開発しているのだが、PlatformIOを用いて、プログラムをアップロードした直後に、5回に1回程度の確率で、ATOMS3がフリーズしてうんともすんとも言わなくなってしまうという問題が起きた。

初めはハードウェア側を疑い、供給電圧を5Vに昇圧してみたりしたのだが(元々LipoバッテリーからDCDCコンバーターを使わずに直で供給していた)、治らず・・・

micros()がだめっぽい??

問題はソフト側で、加速度センサーの値からPitch角度を算出する部分だった。

    void calculatePitch(){
    readGyro();
    unsigned long currentMicros = micros();
    float dt = (currentMicros - lastMs) / 1000000.0f;
    lastMs = currentMicros;
    float pitch = getPitch();
    kalAnglePitch = kalmanPitch.getAngle(pitch, gyro[2], dt);
}

どうもmicros()を使うとフリーズが発生するっぽい.

github.com

似たようなことで悩んでいるひとがいて、どうやらESP.getCycleCount()を代わりに使えとのこと。 そこで以下のようにmicros()をESP.getCycleCount()に書き換えると、フリーズは発生しなくなった。

void calculatePitch(){
    readGyro();
    unsigned long currentMicros = ESP.getCycleCount();
    float dt = (currentMicros - lastMs) / 1000000.0f;
    lastMs = currentMicros;
    float pitch = getPitch();
    kalAnglePitch = kalmanPitch.getAngle(pitch, gyro[2], dt);
}

原因はよくわからんが、まぁうまくいったのでヨシ!(๑•̀ㅂ•́)و✧




以上の内容はhttps://chamekichi.hatenadiary.jp/entry/2024/05/17/145229より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14