マイクロマウスへの挑戦
挑戦へのモチベーション
「個人製作で何か作りたい」
twitterとかでマイクロマウスの動画上げてる人、かっこよくないですか…?
僕も作りたいなーと思い、挑戦しようと決意。
で、とりあえず作ってみないことには何もわからないと思うので作ります。
一つできればモチベーションも維持できるだろうし。
機体の仕様
現状、何がよくて何がよくないのかを理解していないのでまずは以下の仕様で作ろうと思います。
- マイクロマウス競技のレギュレーションに則ったサイズ
- 「走行」と「センシング」ができる
- なるべく安く作れるようにする
選定したもの
部材 | 選定品 | 選定理由 |
---|---|---|
モーター | MK06-4.5 | 小さい使っている人が多い印象 |
エンコーダー | AS5045B | サンプルで頂ける磁気エンコーダの試用 |
マイコン | STM32F405RGT | 秋月で手に入るflashが多い |
赤外線センサ | RPR-220 | 秋月にある |
ジャイロセンサ | MPU-6050 | 持ってる安い |
環境
基板設計にEagle
機体設計にFusion360
プログラムはSW4STM32+HAL
といった感じです。
目標
4月中 : 設計
5月中 : 発注, 組み上げ
理想はこんなスケジュールです
できるとは言っていない
遅くても夏休み前までには一号機を作りたい…
現状
壁と柱ができてます!
参考にしているページ
Autodesk Fusion 360で干渉を計算する
まずはメニューの「検査」から「干渉」を選択する。
Ctrl押しながら干渉を計算したいコンポーネントを選択して…
計算を押すと…
こんな感じに干渉してるところが赤く表示される!
また,「一致した面も含める」にチェックを入れると
隣り合ってる面も表示してくれます!
これは便利だ~
HALでUSARTしよう
はじめに
HALを用いてUSARTの割り込み受信,送信をしようと思います.
使用するマイコンはSTM32F303K8T6,LQFP32をDIP32に変換したのを使います.
CubeMxでの設定
Pinoutタブ
今回用いるのはUSART2(Tx:A2,Rx:A3)です.
左のツリーのUSART2を"Asyncronous"(非同期)に設定します.
Configurationタブ
“Connectivity"からUSART2を選択しましょう.
“NVIC Settings"にある"USART2 global interrupt/ホニャララ"のEnableに✓をつけます.
これで割込み時にそれぞれのコールバック関数が呼ばれるようになります.
送信完了割込みvoid HAL_UART_TxCpltCallback(UART_HandleTypeDef *UartHandle){}
受信完了割込みvoid HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle){}
また,Enableのすぐ隣にある"Preemption Priority"をデフォルトの0から1にします.
こうすることで割込みの優先度がひとつ下がり,コールバック関数内でDelay等が使えるようになる…と考えています.(割込みの競合がなくなる)
次は"Parameter Settings"タブでボーレートやデータ長などをお好みの設定にします.
プログラム上での扱い方
main関数内では以下のように記述します.
int main(){ HAL_UART_Receive_IT(&huart2, &RxData, 1); while(1){ //infinity loop } }
HAL_UART_Receive_IT(&huart2, &RxData, 1);
で初回の割込みの設定をしています.
データ保存先 : RxData(型はuint8_t) データサイズ : 1byte
また,コールバック関数も重要になります.
私は受信完了割り込みのコールバック関数を以下のように定義しています.
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle) { HAL_UART_Receive_IT(&huart2, &RxData, 1); /* 様々な処理 */ }
コールバック関数内に次回用の割込みの設定を入れています.
送信の際はは以下の関数で行います.
HAL_UART_Transmit_IT(&huart2,TxData,10);
ここでTxDataは要素数10の配列です.
送信完了割込みもありますが,私は使う機械が無いため割愛します.
終わりに
見難いかと思いますがとりあえず忘れないうちにメモしました.
ここにこれを用いたコードを公開しています.
USART割込みを単純に書いたものではなく,開発中のボードのプログラムですのでかなり汚いことを前もって言っておきます.
では.