STM−1 実験用マイコン基板
おじさん工房 TOP へ サポート掲示板へ
■応用例
■最新の設計資料・ソフトなど
■ページ履歴
2016/07/10
もう1年以上たってしまいましたが、自分用のマイコン基板を作りました。
最近のICはちょっと使おうと思っても内部のレジスターにいろいろ設定しなくていけないのでマイコンが必要です。
とはいってもそんなに大きなマイコンは不要で、こういった用途に手軽に使える小さなマイコン基板がほしくなりました。
ちょっとした実験用のマイコン基板といえば Arduino が有名ですが、ほとんど I/O がついていない上、AVR マイコンなので非力です。
ディスプレイや入力 SW はどんな実験でも必須なので、ARM に OLED と SW をつけた私的実験用マイコン基板をつくることにし、まずはバラックで組んでみました。
■バラックで試作してみた
実験用マイコン基板相当の回路でアナログデバイセズからサンプルでもらった ADA2200 を使ったインピーダンス測定装置をつくり、あわせて評価しました(写真はデバッグ中のもの)。
ARM マイコンには必要最低限と思われる STマイクロの STM32F030F4P6 を使いました。 ARM Cortex-m0、48MHz、ROM16k、RAM4k、TSSOP20 で、Digikey で 150 円(10ヶ時)です。
これに、OLED モジュール(128x64)、タクトスイッチ4ヶをつけて実験用マイコン基板基本セット(黄色の枠内)になります。
ハードウェアを組み終わり、ソフトウェアを作ろうして壁にぶちあたりました。
STマイクロ提供の ARM マイコン用ライブラリーは、HAL という名前のものに全面変更になりました。
HAL は、「2001年宇宙の旅」にでてくる狂ったコンピュータ HAL9000 のことではなく、Hardware Abstract Layer ですが、使おうとする人を狂気の世界にいざなうすばらしいソフトでした。
まず、Hardware Abstract といいながら実はまったく抽象化されていないのです。 しかも HAL ではチップのヘッダーファイルで定義されたI/Oレジスタ名を別名で再定義しているので、チップの仕様書からチップのヘッダーファイル、HAL のヘッダーファイル、HAL のソースファイルと辿っていかないと使いかたがわからないというひどいしろものです。
そして一番大きな問題は、HAL を使うと使い物にならないたくさんのルーチンがリンクされ ROM 使用量が大幅に増えることです。 今回のマイコンは ROM16kB と小さいのでこれは特に深刻です。
OLED、SW入力、シリアル通信のために、GPIO、SPI、ADC、UART の HAL を使うとそれだけで 14kB 必要で、OS や、OLED のライブラリーを入れると 16kB オーバーし基本機能も実装できませんでした。
そこで、HAL の替わりに使うライブラリーをすべて自前でつくることにしました。 いままでも HAL はペリフェラルの初期化にしか使っていなかった(初期化以外のルーチンは使い物にならないので自作していた)ので、初期化部分を仕様書をみて新たにつくりました。
これで、基本機能( OS、OLED表示、SW入力、シリアル通信モニター )で約 8kB、ADA2200 の制御ルーチンやインピーダンス測定機能をいれて約12kB になりました。
HAL を使わないことでなんとか ROM 16kB に納めることができました。
しかし、今後 OLED のフォントを増やしたり、機能を追加したりしようとすると ROM が足りなくなりそうです。
また使えるポートも 13 本ではぎりぎりです。 というか実際には 1 本足りなくて、OLED の RESET は OLED_CS と ADA2200_CS をダイオード OR して作りました。
以上をふまえ、今回試作で使ったチップよりちょっと大きな STM32F030K6T6 に変更することにしました。 ROM32kB、RAM4kB、QFP32 でポートが 23 本あり、Digikey で 168 円(10ヶ時)と安価です。
QFP32 だとピンコンパチのマイコンが増え、たとえば STM32F334K8T6 という Cortex-m4(FPU付)、ROM64kB、RAM12kB といったチップも使うことができます。
■STM−1基板ができた
いつものように Eagle でサクッと設計してできたのがこれです。
50 x 50 の大きさの基板に STM32Fxxx の QFP32 のチップと OLED、SW x 4 が載っています。
シリアルポートを出してあり、ここに USB-serial をつないで
STM の Flashloader Demo でプログラムを書き込みます。
動作時は普通のシリアル通信ができますので、測定データやデバッグ用データを出力したり、モニタープログラムなどで使えます。
またマイコンの全ポートを周りのピンヘッダーに出してあり、OLED や SW が不要の時には全ポートを使えます。
■インベーダーゲーム
基板の動作確認用に L チカだけではつまらないので、昔懐かしいインベーダーゲームを作ってみました(L チカもしています)。
左端と右端の SW で移動、左から2番目の SW で弾を発射します。
動作確認用なので1画面しかありませんし、UFO も飛んで来ませんし、名古屋打ちもできませんが、それなりに面白く楽しめます。
ネットでインベーダーゲームの動画を見てキャラクタデータをちまちま作ったのですが、小さな画面でいかにそれらしく見せるか試行錯誤しました。
消費電流は 15mA 程度なので、エネループ 2 本で 120 時間ぐらい動作しそうです。
■シャノンの究極機械
シャノンの究極機械( The Ultimate Machine )は情報理論で有名な Claude Elwood Shannon (クロード・シャノン)が考案したもので、日本では「全自動自殺マシン」とか「全自動引きこもり機」とも呼ばれているようです。
ぱっと見ただけではただの箱ですが、電源スイッチがついています。
この電源スイッチを入れると、中から腕がでてきて自分で自分の電源をオフしてしまいます。
いってみればたったこれだけの機械です。
この程度の動作でしたらタイマーIC 555 あたりで簡単に作れそうなので、マイコンを使ったということで一工夫してみました。
@ ゆっくり動作
サーボモーターにPWMで回転角を与えるとかなり早く動作します。
ここで使ったサーボモーターでは60度/0.1s です。
このままだときびきび動いてしまいどうもイメージにあいません。
引きこもりマシンらしく4倍ぐらい時間をかけてゆっくり動かし、途中でちょっと躊躇する感じも出してみました。
A オルゴール
動作していることを知らせるのにLEDじゃ味気ないのでオルゴールを鳴らすことにしました。
オルゴールは
ELM さんのホームページで発表されている波形サンプリングをつかったオルゴール のデータに加え、波形データはネットの鉄琴の音から、曲データは楽譜から入力したものを追加しました。 音色3種類x8曲の24通りを順に繰り返します。
和音がきれいに鳴るように同時8音にし、余韻を Q=1000 相当と長くしています。
音は 10.5bit 相当 PWMで生成しています。
正と負の PWM 駆動(こういうのも BTL というのかな?)にしています。
腕は ABS を CNC で切り出しました。 腕の先についている白いものは USB メモリーのキャップです。
今回使ったサーボモーターは秋月で売っている一番安価なものです。
超小型で、トルクは1.8kgf・cmしかありません。
パワポで適当に図面を書いてみると腕は半径30mmぐらいは必要です。 とすると 600gf ぐらいの力しか出せないということになります。
一方、トグルスイッチの作動力は、よく見かけるようなトグルスイッチがウェブページで 600gf という記述を見つけましたが、仕様書がなくてよくわかりません。
結局、手持ちのトグルスイッチをパチパチしてみたなかで一番軽く動くものを使いました。
適当に PWM 波形を入力して動作確認したところ、なんとか動かせそうでした。
(実際には、サーボをゆっくり動かすとスイッチを押すときにギアが鳴ってつらそうです。 勢いをつけて回してやると余裕で動かせるみたいです。)
上蓋の開閉に専用のサーボを使っている作例もありましたが、面倒だし、サーボ2個の消費電力も乾電池駆動なので気になります。
そこで腕の動きで上蓋を開けるようにしました。 サーボにはさらに負荷が増えますががんばってもらいます。
使った白木の箱(上の完成写真はマホガニー色に塗装後)は100円ショップで見つけたもので、桐製で軽くてよかったです。
電源はエネループ4本で、マイコン基板の下に入っています。
マイコン基板の上にあるユニバーサル基板の右側が電源制御回路です。
スイッチをマイコンのポートにつなぎ、マイコンはスリープに入るようにすればこの回路は不要なのですが、究極機械ですからここはちょっとこだわってちゃんと電源を切るようにしました。
スピーカーは音色から小さいものにはしたくなく、写真のように斜めにしていれています。 デザイン的観点から電源スイッチの 位置を先に決めたのでかなり無理のある部品配置になってしまいました。
Ultimate Machine には中毒性があるのか、用もないのにスイッチをいれて楽しんでいます。
「だれだよースイッチ入れたの、うるせーなー」という感じで面白いです。
Gigazine の記事 によると Google のオフィスにある The Ultimate Machine は1日に200回スイッチをいれられているそうです。
■電源モニター
負荷の電圧、電流をモニターしてグラフ表示する電源モニターをつくりました。
電源と実験する回路の間に挟んでおけば回路の電流値の変化がすぐに分かります。
電圧、電流はシリアルポートから常にデータ出力していますので PC でロギングしておけばあとで EXCEL などで処理することもできます。
この電源モニターでは、電流検出抵抗をなるべく小さく0.1Ωとし、普通のオペアンプ(NJM4580)で、1mA精度で1A程度まで測定できる回路を作ることができるのか試してみました。
電流検出抵抗が 0.1Ωで1mAだと電圧降下は0.1mVしかありません。
測定電圧は5Vまでを想定していますので、
CMRR = 0.0001/5 = 94dB
以上が必要になります。
許される抵抗相対誤差は 0.004% 以下となり、精密複合抵抗を使ってもとうてい達成不可能な値です。
これをマイコンを使ってキャリブレーションをすることでどこまで追い込めるか試してみました。
以降、つづきは後日。