2020年8月10日月曜日
HDDサンダーをマイコンで定速制御してやろうと
基板を製作、プログラムを作っている。
マイコンは先日購入した
Seeeduino XIAOを使用しているのだが、
気が付いた点が幾つかあるので
紹介する。
- ユーザプログラムが暴走するとプログラムが書き込めなくなる。
- プログラムを書き込むとリセットされるので、PCにUSBが
外されましたとか接続されましたとか表示されうるさい。
-
CPUはMicrochip(Atmel)の
SAMD21G18。CPUはARM Cortex-M0+
だが、周辺I/Oの癖が強い。アドレス空間をケチっていて8bit CPUっぽい。
プログラムの書き込みはUSB経由で行うが、USBの機能は
CPUが提供、ArduinoのフレームワークからUSBの処理ルーチンが
呼び出されるので、ユーザプログラム中でプログラムが止まる
(無限ループに入るとか)するとUSBが止まり、プログラムが
書き込めなくなる。この対策としてXIAOには基板にリセット端子が
あり、
チョンチョンと2回ショートしてやると、ユーザプログラム
が呼び出されない書き込み専用モードでたちあがり
プログラムの書き込みが可能になる。
このモードの検出のためだと思われるが、
電源投入後、ユーザプログラムが起動するまで2秒程度待たされる。
組み込み機器を作る場合、この待ち時間はチョット嫌だ。
HDDモータの出力をPWMで制御するのだが、
analogWrite()だとPWMの周波数が
735Hzで DRV11873の仕様(7~100kHz)に合わないので
変更する必要があり、SAMD21の
Datasheetを調べた。
なんとか目的は達成することができたが、
SAMD21の制御レジスタが狭苦しい。
制御レジスタの値で内部レジスタを選択し
値を書き込む感じ?
内部レジスタに書き込めるけど読み出せないとか。
内部レジスタを表に出して、直接読み書きさせてくれよと思う。
ということで、
開発中のボードは仕方ないが
次からは別のCPUにしようかと思っている。
Seeeduino XIAOの良い点も上げる。
- 安い。 秋月で580円。
- 小さい。 20x17.5mm。
- 基板端面もメッキされているので、基板に直接はんだ付け可能。
- Arduinoで開発できる
Arduinoで開発できると、
開発環境がすぐに手に入るし、
ライブラリ、サンプルプログラムも大量に入手できる。
プログラムの公開もしやすい。
XIAOの良い点もカバーできる代わりのものが無いかと
AliExpressを物色したところ
STM32F103C8T6ボードを発見。
200円ぐらい。
STM32F103なので Cortex-M3でFlash32K/RAM10K。
Arduinoは
Arduino_STM32
が使えるようだ。
基板がXIAOより大きいという問題があるが、
基板に組み込みたければ直接チップを
乗せれば良い。LQFP48ピンなのでハンダ付けも楽。
チップもAliExpressなら
100円/個ぐらいで買える。
ちなみにdigikeyだと
500円/個ぐらいする。
STmicroのCPUは中国で安い。
あまり安いので中国製コンパチチップ
GD32F103のリマーク偽造品ではないかと疑うが、
GD32F103の方が
若干高い。
ということで、次はSTM32F103にしよう。
しかし、作った装置を手軽にPCにつないで遊びたい時には
WiFi/HTTPで通信できるESP32が便利。
ESP32 devkitと共に注文しておこう。