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のバージョン変えてみたけど特に変わらず.仕方ないので関数の引数にポインタ渡しで値を取り出すことにした.
こちらはうまく値を取り出せた.違いはなんだ???