chakokuのブログ(rev4)

テック・コミック・DTM・・・ごくまれにチャリ

2021-09-01から1ヶ月間の記事一覧

NUCLEO上で開発したドライバをSTEVAL-DRONE01に移植、PWMでモータを制御

これまでNUCLEO上でSTM32用のドライバを作ってきて、大体そろったので、順次STEVAL-DRONE01に移植。マイコンの系列が違うのでレジスタの番地も違うし、フラグの位置も違うので結構変更が発生しています(HAL使っていないのでしょうがない)。とりあえず、シ…

STM32+RustでHALを使わず素でPWM制御

ドローン制御プログラムの続きで、PWMを制御するためのドライバを開発。この理由は、ドローン用モータの制御はPWMで行うため。いきなりドローンでデバッグするのはモータが不用意に回って危険すぎるので、NUCLEO-L476RGのボードでテスト。 NUCELOのボードに…

Python+Tkinterによる9DoFセンサビューアの作成

9DoFからの計測値は数字だけ見てもなかなかどの軸で移動が検知されているのか分かりにくい。そこで、視覚的に把握できるようGUIのViewerを作った。Unityとかだと勉強しないといけないので、、Python+Tkinterで作成。普通の作り方だとボタン操作等を処理する…

9DoFのセンサーをNUCLEO経由でPCに転送できた

Rustで書いた9DoF(ST社のLSM9DS1)の制御プログラムをNUCLEO-L476RG上で動かし、USB-Serial経由でPCに送信している。PC側はPythonのデータダンプツールを作って、9DoFから得られたジャイロと加速度センサの値を随時更新するようにした。実際の値は以下 この値…

STM32/RustでHALを使わずレジスタを直接操作してI2Cの send/receive

9DoFのセンサのI/FがI2Cであったので、HALを使わないI2C用ドライバを作っていた。タイミングのパラメータ等、ベストではないけど、一応動くようになった。これまでずっとバスアービトレーションが異常であったが、根本原因はI2CデバイスによるI2CバスGND引き…

素のSTM32で、I2Cの制御プログラムでトラブル中

次は、HALを使わず素でI2Cを制御しようと思って、いろいろ試作しているけど、うまくいかない。I2Cの9DoFセンサ(LSM9DS1)と接続して、STM32からI2Cアドレスを出すタイミングでなぜかI2CバスがHi-Zになってしまうようで、STM32からクロックを出せないでいる。S…

STM32/RustでHALを使わずレジスタを直接操作してUART send/receive

ひきつづき、HALを使わず、素でレジスタを叩いてUART用のsend/receiveルーチンを作成 以下のソースはシステムクロック4HMzで、38400bpsで通信する。抽象化していないので、STM32L47xxxシリーズ専用。 変数型もu32でなくてもいいところがあるけど、、無駄が多…

STM32+Rustで初期状態のクロック設定を確認

前回、HALを使わずレジスタ直叩きでLチカさせてみた。次はシリアルをつなぎたいが、シリアルを動かすにはUARTのブロックにどのようなクロックが供給されているのかを理解しないといけない。でないとボーレートが計算できないから。前回のソースではクロック…

STM32/RustでHALを使わずレジスタを直接操作してLチカ

組み込みRustでは、ハードウエア抽象化したライブラリHALを使ってプログラミングするのが正統派なんでしょうが、自分の場合、Rustの正しい所有権の書き方がイマイチわかっておらず、どうやってもペリフェラル操作をmainからモジュール側に出すことができなか…

組み込みRustのむつかしさ

STM32用のRust開発環境を設定して、I2CとかUARTとかボチボチ動いている。が、、あくまでもサンプルコードをベースに修正した程度である。 素の状態から最低限のコードだけで動かそうとすると、いろいろエラーが出てくる。一つはSTM32用ライブラリのエラーで…

STM32用バイナリがビルドできるよう組み込み用Rust環境をセットアップ

絶対座標で計算するから大変なんであって、XYZ軸の傾きを検知して、相対的にモータの回転数を±で補正する程度のアルゴリズムで、まずはドローンを飛ばしてみようと思う(変な方に飛んでいくかもしれないが)。ただ、このままMicroPython で試作を続けるとあ…

6DoFのLSM6DSLからジャイロ、加速度、温度のセンサーデータを取ってみる

SPIでレジスタが読めるようなので、センサを動かすための最低限の設定だけ行って、ジャイロセンサ、加速度センサ、温度センサの値を読んでみた。以下がその値。ドローンを置いただけなので、Y軸の加速度だけ値が出ている。それ以外は誤差なんだろう。 # gyro…

ビットバンギングで、SPI 3-Wireモードを実装して加速度センサ(LSM6DSL)のレジスタを読んでみる

STEVAL-DRONE01上の加速度センサはマイコンとSPI 3-Wireモードで接続されていてMicroPython上で利用可能な標準のSPIドライバでは制御できない*1。 泥臭いが、ビットバンギングでIOポートを上げ下げしてSPI 3-Wire相当のバスを作って加速度センサのレジスタを…

STEVAL-DRONE01の制御ボードに搭載されたセンサーを読む(読みたい)

STEVAL-DRONE01に制御ボードSTEVAL-FCU001V1が搭載されていて、そのボードには、角速度センサ(LIS2MDL)や加速度センサ(LSM6DSL)が搭載されている。STM32F401CCとセンサーはSPIで接続されている。が、、回路図をよく読むと接続が、SPIの3線(CS/CLK/MOSI)なの…