目次

TinyMovr

https://tinymovr.com/
https://hackaday.io/project/168650-tinymovr-motor-controller
オープンソースのブラシレスモータドライバ.使っているMCUはPAC5527

DTSEを使って最初のシーケンス(シーケンスA)でオフセットを計測,次のシーケンス(シーケンスB)でそれぞれの電流を計測している模様.

キャリブレーションでLの計測に使う変数(I_high, I_low)が0初期化されていない.RもしくはLの計測で失敗するか,一回成功しないと0初期化されていない.つまり起動直後のキャリブレーションは初期値に変な値がはいっていると確実に失敗する.初期化してくれればいいのに.
 してた.見落としてた.
Controller_ControlLoop()の中でwhile回ってる.

ピンアサイン

CANトランシーバはNXPのUJA1162ATKっぽい.

Pin Function 概要 メモ
PD4 USDSCLK SPI_CLK
PD5 USDSS SPI_SS
PD6 USDMOSI SPI_MOSI
PD7 USDMISO SPI_MISO
PE0 未使用?
PE1 GPIOE1 CANトランシーバのSLPENに接続
PE2 CANRXD CAN_RX
PE3 CANTXD CAN_TX
PF0 TCK/SWDCL SWD_CLK
PF1 TMS/SWDIO SWD_DATA
PF2 USBMOSI UART_TX
PF3 USBMISO UART_RX
PF4 未使用?
PF5 未使用?
PF6 未使用?
PF7 GPIOF7 CANトランシーバのCTSに接続

作業ログ

参考にエンコーダのキャリブレーションプログラムを実装していたけど,どうやら変な?バグを埋め込んでしまった模様.
戻り値が欲しい関数で,関数のreturnで返すと1904という決まった値が返ってくる,逆アセンブルとかで確認すると,どうやらr0にこの値が入っている模様.なぜ? この値がどこから来たものかも見当がつかないし,ビルドするGCCによるのかもと思ってGCCのバージョン変えてみたけど特に変わらず.仕方ないので関数の引数にポインタ渡しで値を取り出すことにした.
こちらはうまく値を取り出せた.違いはなんだ???