2021-09-01から1ヶ月間の記事一覧
これまでNUCLEO上でSTM32用のドライバを作ってきて、大体そろったので、順次STEVAL-DRONE01に移植。マイコンの系列が違うのでレジスタの番地も違うし、フラグの位置も違うので結構変更が発生しています(HAL使っていないのでしょうがない)。とりあえず、シ…
ドローン制御プログラムの続きで、PWMを制御するためのドライバを開発。この理由は、ドローン用モータの制御はPWMで行うため。いきなりドローンでデバッグするのはモータが不用意に回って危険すぎるので、NUCLEO-L476RGのボードでテスト。 NUCELOのボードに…
9DoFからの計測値は数字だけ見てもなかなかどの軸で移動が検知されているのか分かりにくい。そこで、視覚的に把握できるようGUIのViewerを作った。Unityとかだと勉強しないといけないので、、Python+Tkinterで作成。普通の作り方だとボタン操作等を処理する…
Rustで書いた9DoF(ST社のLSM9DS1)の制御プログラムをNUCLEO-L476RG上で動かし、USB-Serial経由でPCに送信している。PC側はPythonのデータダンプツールを作って、9DoFから得られたジャイロと加速度センサの値を随時更新するようにした。実際の値は以下 この値…
9DoFのセンサのI/FがI2Cであったので、HALを使わないI2C用ドライバを作っていた。タイミングのパラメータ等、ベストではないけど、一応動くようになった。これまでずっとバスアービトレーションが異常であったが、根本原因はI2CデバイスによるI2CバスGND引き…
次は、HALを使わず素でI2Cを制御しようと思って、いろいろ試作しているけど、うまくいかない。I2Cの9DoFセンサ(LSM9DS1)と接続して、STM32からI2Cアドレスを出すタイミングでなぜかI2CバスがHi-Zになってしまうようで、STM32からクロックを出せないでいる。S…
ひきつづき、HALを使わず、素でレジスタを叩いてUART用のsend/receiveルーチンを作成 以下のソースはシステムクロック4HMzで、38400bpsで通信する。抽象化していないので、STM32L47xxxシリーズ専用。 変数型もu32でなくてもいいところがあるけど、、無駄が多…
前回、HALを使わずレジスタ直叩きでLチカさせてみた。次はシリアルをつなぎたいが、シリアルを動かすにはUARTのブロックにどのようなクロックが供給されているのかを理解しないといけない。でないとボーレートが計算できないから。前回のソースではクロック…
組み込みRustでは、ハードウエア抽象化したライブラリHALを使ってプログラミングするのが正統派なんでしょうが、自分の場合、Rustの正しい所有権の書き方がイマイチわかっておらず、どうやってもペリフェラル操作をmainからモジュール側に出すことができなか…
STM32用のRust開発環境を設定して、I2CとかUARTとかボチボチ動いている。が、、あくまでもサンプルコードをベースに修正した程度である。 素の状態から最低限のコードだけで動かそうとすると、いろいろエラーが出てくる。一つはSTM32用ライブラリのエラーで…
絶対座標で計算するから大変なんであって、XYZ軸の傾きを検知して、相対的にモータの回転数を±で補正する程度のアルゴリズムで、まずはドローンを飛ばしてみようと思う(変な方に飛んでいくかもしれないが)。ただ、このままMicroPython で試作を続けるとあ…
SPIでレジスタが読めるようなので、センサを動かすための最低限の設定だけ行って、ジャイロセンサ、加速度センサ、温度センサの値を読んでみた。以下がその値。ドローンを置いただけなので、Y軸の加速度だけ値が出ている。それ以外は誤差なんだろう。 # gyro…
STEVAL-DRONE01上の加速度センサはマイコンとSPI 3-Wireモードで接続されていてMicroPython上で利用可能な標準のSPIドライバでは制御できない*1。 泥臭いが、ビットバンギングでIOポートを上げ下げしてSPI 3-Wire相当のバスを作って加速度センサのレジスタを…
STEVAL-DRONE01に制御ボードSTEVAL-FCU001V1が搭載されていて、そのボードには、角速度センサ(LIS2MDL)や加速度センサ(LSM6DSL)が搭載されている。STM32F401CCとセンサーはSPIで接続されている。が、、回路図をよく読むと接続が、SPIの3線(CS/CLK/MOSI)なの…