公開日 2008/04/18(Fri)
最終更新日 2008/05/03(Sat)

CQ-STARM基板をいじる

目次
 動作テスト
 開発ツールインストール Keil開発環境 only  + Hex2DFU.EXE について
 LED点滅サンプルビルド と 簡易改造実験
 元に戻す
 他のサンプルを試す AudioSpeaker、JoyStickMouse 、「傾きマウス」への改造
 簡易加速度ロガー   メモリーカード不要   2008/05/03(Sat) 追加

■はじめに
 CQ出版社の発行誌「Design Wave Magazine」略して DWM の2008年5月号(2008/04/10発売) の付録基板(正式には 何故か「付属基板」)CQ-STARM を触ってみました。
基板に載っている主要ICは
・STMicroelectronics社の マイクロコントローラ STM32F103VBT6
 (CPUコアは ARM、ポケットステーションや任天堂DSに入っているのと同じ。
  但し ST32〜 そのものではないので注意!)
・STMicroelectronics社の 3軸加速度センサ LIS344ALH

 実体験の上で、後の人の参考になりそうな項目は Tip としています。

また、特記事項として 開発環境が作成した HEXファイルを DFUファイルに変換するコマンドラインツール、 Hex2DFU.EXE を用意しました。これでちょっとだけ開発(実験)が楽になります。

本ページの内容は正確さを心がけてはいますが、完全かどうかは保証しません。そこの所を ご了解の上、参考にしてください。


■動作テスト
 まず、本誌の第2章(p.57)に従って PCに仮想COMポートデバイスドライバをインストールします。 CQ-STARM基板の USBコネクタが miniBタイプなので miniUSB-USBケーブルが必要です。 うちの PC環境の場合、ドライバをインストールすると COM4 に割り当てられました。

続いて PC(OSは windowsXP Home)に最初からインストール済の 通信ソフト 「ハイパーターミナル」で加速度センサのデータが受信できることを確認します。
本誌 p.58の図5、「接続方法」を COM6 から自分の PC環境に合わせて COM4 にして '*' を送ると 無事3つの数値が表示されました。 1行だけの表示がどんどん更新されていて下位の数字は読み取りにくいですが、表示画面でマウスを クリックすると停止します。
このような表示になるのは CQ-STARM基板から送られてくるデータの末尾が 0D(CR)+0A(LF) でなく  CR(=キャリッジ・リターン 行頭に戻る)だけで LF(=ライン・フィード 行送り)がないことに よる仕様です。

尚、「かえるがぴょん」という加速度センサの機能を用いたゲームサンプル もありますが、 Javaや Flash Playerのインストール、セキュリティ設定の 変更などが必要であると記事に書いてあったので、面倒を避けてテストしていません。

Tip - 1
 加速度センサの数値を表示している状態で
    ハイパーターミナルのメニューの 転送 → テキストの キャプチャ → ファイル名入力して[開始] 〜 適当な時間が経ったら もう一度同様の操作で  テキストのキャプチャ停止
とすれば、受信した加速度センサのADC(ADコンバータ)値群が、丁度 CSV形式 のテキスト ファイルで得られます。これを エクセルなどの表計算ソフトで読めばセンサ出力の時間変化を グラフ化して確かめることができます(拡張子を CSV にしておくとよい)。

データ出力周期は約120Hzなので 10秒間で だいたい1200データが得られる計算です。
やってみれば分かりますが、CQ-STARM基板を机の上に静止させた状態でも結構数値がふらつくので、 マイコン側の ADCが 12bit精度に対し、およそ 8bit程度の有効桁しかありません。  精度を上げるなら
  1. PC側で 複数回測定データの平均を取る

  2. マイコン内のプログラムを書き換えて上記の様に平均化処理をつける

  3. 加速度センサの出力にローパスフィルタ用コンデンサをつける

などの工夫が必要です。上記の 3. については加速度センサの使い方を説明する Appendix2(本誌 p.97〜) にあるとおり、コンデンサをつけるのが本来の使い方の様ですが CQ-STARM基板では省略されています。
これについては 本誌 p.96の 7節「SDメモリーカード・インターフェース回路」の手前に書いて ありますが J3に各センサの信号が引き出されているのでここに 「用途に応じた」適切な容量の コンデンサを接続させる仕様だということです…

Tip - 2
 何も手を加えていない状態の CQ-STARM基板を PCに接続すると基板上の LED1がオレンジ色に 点灯します(点滅はしません)。 これは最初から マイコン内の FLASHメモリ内に記録されたプログラムの実行によるものです。 具体的には LEDが接続された GPIO PC6を操作するコードが実行されています。
ですから、LEDが点灯しない場合、何らかの不具合があると思われます。 もちろん、自分で別のプログラムをダウンロード(要するに書き換え)した場合 LEDを 点灯するコードを書いていなければ光らなくなります。


■開発ツールのインストール
●コンパイル環境
 付録 CD-ROMには2種類の開発ツールが収録されています。
  1. Keil社 の RealView Microcontroller Deelopment Kit

  2. IAR社 の IAR Embedded WorkBench

使用期限の制限はないそうですが開発できるコードサイズに制限があります。 Keilの 16KBに対し IARが 32KBと後者の方が優位なのですが、IARはバージョンアップの為に 使い方の説明が来月号に回されていると書いてあったので、まずは Keilの開発環境を 選びました。

本誌第6章 に従って(但し名前やメールアドレスはデタラメを入力)特に問題なく インストール完了しましたが、自分の場合、既に EZ-USB 用の Keil開発環境を インストールしていた(Versionも 2と古い)ので、 インストール先を変更しました。 これで一応両方使えますが、プロジェクトファイル(拡張子 Uv2)をダブルクリックして 起動するのが ARM用の環境になってしまうので注意が必要です。  間違いに気づいてすぐ終了しても、プロジェクトファイルが若干書き換えられてしまうのでなにか 影響があるかもしれません。

Tip - 3 私の様に別のCPU用の Keil開発環境もインストールしている人専用
 「ファイルの関連付け」を変更することでダブルクリックでの起動プログラムを変更できます。
また、プロジェクトファイル(拡張子 Uv2)に対し 右クリック→プログラムで開く を使うと 開発環境を選択できます。

●DFU
 次に、本誌第8章に従って DFU(Downlod Download Firmware Upgrade) で使うソフトを PCに インストールします。これも記事のとおりで特に問題ありませんでした。 実際には
CQ-STARM基板側
メモリーカードコネクタが入手できていないので、JP6だけ 実装しました。
JP6をショートさせた状態にしないと DFUのドライバがインストールできません。
JP6は何度もショート・オープンを繰り返すので記事の通りジャンパピンにしたほうがいいです。

ダウンロード(CQ-STARMへのプログラム書き込み)
上記理由により 7.節のメモリーカードアプリは試せないので、 Keil用の LED点滅アプリで 実験しました(後述)。
 Keil開発環境で作成した HEXファイルを DFU File ManagerDFUファイルに変換して、さらに DFU Demonstration で CQ-STARM基板にダウンロードします。
どちらも GUIアプリ なので、プログラムの修正→ダウンロードを繰り返す場合はちょっと 操作が煩雑で面倒です。DFUファイルへの変換くらいは バッチ処理(操作レスで自動的) にしたいものです。

Tip - 4
 という訳で、即席で HEXファイル → DFUファイル 変換の CUI版(コンソールアプリ)を でっち上げました。
名前は Hex2DFU.EXE コマンドライン用プログラムです。 STDFUFiles.DLL を呼び出しているので、 DFU File Manager と同じ場所に Hex2DFU.EXE を コピーして使います。
このプログラムは一から作った訳でなく、 DFUのソースや pdf資料も一緒にインストール されているのでそれを見て作りました。 力があれば、ダウンロードの方もコマンドライン版が作成可能な筈です。

自動変換のやりかたですが、Keil開発環境ではビルド(コンパイルのこと)した後に任意のプログラムを実行させる ことができます。 Projectメニュー内の Options for Target "プロジェクト名" → Userタブを開いて 下写真のように

 "C:\Program Files\STMicroelectronics\DfuSe\BIN\Hex2DFU.exe" -w <HEXfile名> <DFUfile名>
と設定しておきます。 ファイルPATHはインストール先を変えた場合は変更します
注意としてはカレントディレクトリは Uv2ファイルの存在位置(多分)なのに対し、HEXファイルは 下位の OBJディレクトリに作成する設定になっているので "obj\" をつけないとダメです。

Keil設定画面
Keil開発環境 の設定画面

以上の変更で、正常ならビルドしなおすと自動で DFUファイルへの変換までやってくれるようになります。

ファイル変換の実作業は STDFUFiles.DLL のサービス関数に任せているため、  IAR開発環境で試してはいませんが、S19ファイルも DFUファイルに変換できるよう です。但し Hex2DFU.EXE につけた変換機能は DFUへ変換する一方行だけです。

File Manager
DFU FileManager の設定の内、1〜5までは
Hex2DFU.EXEでも変更可能(にしたつもり)

1.VID -vスイッチ 2.PID -pスイッチ 3.BCD -bスイッチ
4.TargetID -aスイッチ 5.ImageName -nスイッチ


注意
 Hex2DFU.EXE はまだ作ったばかりで、自分でもあまりテストできていません。 プログラム(Hexファイル)の作り方によっては問題が出る可能性も否定できないので、 新規プロジェクトで開発する時は最初だけでも念のため、 本家の DFU File Manager と Hex2DFU.EXE の変換結果を比べて相違ないことを確認してから本番のダウンロードに 進んでください。
    但し、メーカー製の DFU File Manager 及び 拙作である Hex2DFU.EXE が使っている DLL内APIの不具合? で "Target(Image)Name" 文字列(変更しなければ "ST..." の5文字)の 格納バッファ255バイトにおいて、有効な文字列(00で文字列終了)の後にゴミデータが 入り込むようです。このため、FC /B でバイナリファイル比較すると 001C 〜 0114 の範囲で 食い違いが発生することがあります。 また、このゴミのせいでファイル最後の 4バイト(= CRC32 チェックサム)も変化 してしまいます。
    これ以外が一致していれば同じ DFUファイルができたと見ていいようです。

    ゴミが入る理由は ImageNameバッファへのコピーにサイズチェックもせず lstrcpy()関数 使っているからです。 事前に 0クリアするか lstrncpy()を使うべきだと思います (DLLのソースもついている)。

    それと、「マイコンへのロードアドレスを間違えると マイコン内にある DFU本体が 消えて JTAGを使わないと復活できなくなる」と本誌記事に何度も書いてあります。 Hex2DFU.EXE は DFUファイルをひとつ指定して -l オプションをつけて実行すると DFUファイルの ロードアドレスの確認ができるようになっています。慣れない内は記事の注意書き(お約束)どおり、 08003000h になっているかも確かめましょう。

    尚、Hex2DFU.EXE を使用しておきた如何なる事態にも私、シバ某は責任を取れません。 自己責任 をご理解・覚悟の上でご使用ください。
    Hex2DFU.EXE のソース付きで公開するので問題があれば自分で修正してください。

以上の注意が理解できる人は…  バイナリ・ソースダウンロードへ 約39KB


■LED点滅サンプルのビルド
 本誌第7章に従ってプログラムのコンパイル(「開発環境」で実行する場合には コンパイルと言わずに ビルド と呼ぶらしい)を試します。 Keil開発環境の LED点滅サンプルプログラムは Keil開発環境をインストールするときに 一緒に PCの HDDに展開されています。本誌 p.108 図1-(2) で示される Blinky ディレクトリの 下に必要なファイルが揃っています。
私はオリジナルはそのまま残すことにして、作業ディレクトリに Blinkyディレクトリごと コピーしてから そちらで作業しました。

p.107 2.節の様に、 Keil uVision3 を起動してからプロジェクトを開く代わりに、 プロジェクト(設定)ファイルである Blinky.Uv2 をダブルクリックして立ち上げる こともできます。プロジェクトのオプション ( Options for Target 'プロジェクト名' ) が、必要な設定になっているか確認します(p.108〜の 図1も参照)。うちの環境では最初から記事の 内容に沿った設定になっていました。

Tip - 5
 メニューから Buildを選択するなどのマウス操作以外にも、F7 を押すだけでビルドを 実行してくれます。
EZ-USB用の Keil開発環境(uVision2)だと操作法を表示してたのが消えています。

Tip - 6
 EZ-USB用の Keil開発環境では Cのソースコードがどんなアセンブリ言語にコンパイル されるか LSTファイル に出力させることができたのですが ARM版開発環境には その設定はないようです。デバッグモードでソースコードデバッグ用の Disassembly 画面を出せるので それを見てマシン語のお勉強・コンパイルコード品質の評価ができます。

Tip - 7
 プロジェクトファイル Blinky.Uv2 は何故か 最適化がされない設定 になっていました。 Options for Target '〜' で C/C++タブ に切り替えると Optimization 項目が Level0 になっているので適当に設定します。 私は Level2 (-O2) にしました。
他にもこのタブ内の設定でコードサイズが結構増減します。

無事 LEDが点滅してから
 ビルドで HEXファイル作成 → DFUファイルに変換 → CQ-STARM基板にダウンロード → CQ-STARM基板再接続(JP6も変更) の一連の操作で、LEDが点滅するようになれば成功です。

ところで、この LED点滅プログラムは CQ-STARM基板が USBデバイス(ターゲット)として振舞うためのコードを 含んでいません。つまり USBケーブルからは電源供給だけ受けている状態です。 しかし USBケーブルの D+信号線が R5で +3.3Vにプルアップされているので PCはフルスピード デバイス(CQ-STARM基板は フルスピードデバイス)が接続されたと判断します(そういう取り決めになっています)。
が、それに続く VIDやPIDを調べる通信が失敗するので 下のような警告が表示されてしまいます。

ばるーん
警告バルーン
それで正常(なって当然)なので あわてる必要はありません。
ちょっと気持ち悪いですが無視して大丈夫です

しばらくするとあきらめて消えてくれます。

しかし、この警告文章自体がおかしいのですが…
”機能してないことが認識されない” ってどんな状態じゃ!!


 望ましくは STMicroelectronics社の評価ボードの様に、USBデバイスとして動く場合 のみ D+信号線のプルアップ抵抗が効くようにマイコンから操作可能な設計にすべきでしょう。 しかし、残念ながら省略されてしまったようです。 CQ-STARM基板の回路図にも PD9ピン が PD9/USB_DC (DCは DisConnect?) となっていて、この機能をつけようとした痕跡だけは 残っています。

●簡易改造 〜 自分でプログラム開発 の前の 「手始め」に
 Blinkyディレクトリに入っていた Abstract.txt を読むと、実はこの プログラムには、ADC(ADコンバータ)の値によって点滅周期が変わる仕掛けがあることが分かります ( p.113 リスト1 に示されている LED点滅のテストサンプルよりは力が入っている)。 しかし、CQ-STARM基板の加速度センサの出力ではなく、何も接続されていない  ADC_IN1 を見ています。これは Blinky.c の adc_Init() 関数手前のコメントに 記述されています。
J3の 33番に ADC_IN1(GPIOの PA1)が引き出されているので、ここと JP6(開放状態)の 両端子の間を片方ずつリード線でショートさせる(+3.3V or 0V を入力)と、確かに点滅周期が 変化することが確認できました。

 折角なので、この Blinkyプログラムに手を加えて LEDの点滅周期が加速度センサの 出力で変化するように改造してみます。

    改造箇所
  1. Blinky.c の 53行目 〜 void adc_Init(void) 関数内
      ADC1->SQR3 |= 0x00000001; // set rank

    データシートpdf(ハードウエアマニュアル)を読むと、これが ADCのチャンネル番号に 相当することが分かりました。 ...010F にすれば加速度センサ Z軸の値(ADC15)になります。

    但し、ADCの変化率が ±1Gの範囲では小さい(計算では 2048±819 程度)なので、

  2. Blinky.c の 76行目 〜 SysTick_Handler() 関数内
      if (timetick++ >= (ADC_ConvertedValue>>8)) {     を
      if (timetick++ >= (ADC_ConvertedValue-1229)>>4) {
    にします(ちょっといいかげんです)。

以上2点の修正でビルドしなおした新しい DFUファイルを所定の手順でダウンロードすると、 CQ-STARM基板を表にするとゆっくり、 裏返すと早めに点滅する様になりました。



■CQ-STARM基板を購入時のプログラムに戻す
 つまり、加速度センサの表示 + 「かえるがぴょん」で使うプログラムに戻す方法です。 本誌記事のどこに書いてあるのか発見できなかったのですが、CD-ROMに DFUファイルが 収録されていました。

CD-ROMのドライブ名:\articles\0805_a02\Acc3_V5_gainer\project\EWARM\Debug\Exe ディレクトリ に沢山の DFUファイルがありますが、
一番日付の新しい 080308.DFU を CQ-STARM基板にダウンロード するといいようです(VID/PID/BCDが オール1111 となにか変だが無視して可)。 これで、ハイパーターミナルで '*' を入力すると以前の様に加速度センサの XYZ3つの 値が表示される所までは確認しました。



■他のサンプルを試す
 STMicroelectronics社が USBデバイスとしての動作デモプログラムをいくつか用意していて、 CD-ROMにも収録されています。元々は 同社が出している評価用ボードのためのサンプルですが、 そのうち幾つかを CQ-STARM基板で実験してみます。
    ”[CD-ROMドライブ名]:\soft\ST\USB関連のサンプル・プログラムおよびマニュアル\STM32F10xUSBLib\USBLib\demos”  ディレクトリ にサンプルプログラムがあります。
Audio Speaker
「USBスピーカー」です。
追加部品が必要ですが CQ-STARM基板からPCの出す音声を出力できるようになります。
CD-ROMに収録された DFUファイルでの実験と、ソースコートを元に自分の PC環境でのビルド 練習をしました。
CQ-STARM基板で動かせるようビルドするには修正が必要です。

JoyStickMouse
「USBマウス」です。
これもスイッチや配線材が必要ですが、CQ-STARM基板がマウス(もどき)になります。
今度は、自分の PC環境でビルドした DFUファイルで実験し、さらに CQ-STARM基板の加速度センサを用いた 「傾きマウス」に改造してみました。
この他にも 「仮想COMポート」 や 「マスストレージ」デモもありますが、テストに必要な機材を 用意するのが面倒なので試していません。後者については本誌の方で記事になっています。
前者は、これを改造して 最初から書き込み済のテストプログラム が作られているようです。

●Audio Speaker
 前記CD-ROM収録ディレクリからさらにその下 "Device_Firmware_Upgrade\images" にビルド済の DFUファイルが収録されています。この中の "Audio speaker.dfu" を試してみます。 念のため Hex2DFU.EXE の -l オプションを使って 08003000hから 始まるように作られていることを 確認し、所定の手順(JP6と基板の接続し直し)で ダウンロードします。 JP6をオープンに戻して CQ-STARM基板を PCに接続すると今度は USBスピーカー として 動くプログラムが走り出し VID/PIDも今までとは別の数値として振舞います。
PCがドライバをインストールするのでしばらく待ちます(ドライバは PCが元々持っている 中から自動選択するので infファイルの指定などの操作はしなくていい)。

準備が出来たら音楽プレイヤーでなにか再生しながら音が出ているかテストします。
このサンプルでは 22kHz 8bitモノラル音声が、PWM機能を使って GPIO PB8に出力 されています。PB8は J2の 10番ピン に配線されているので そこと GNDの 間に、100円ショップで購入したイヤホン・マイクを ICクリップ付きケーブルで接続しました。 ただそれでは音が大きすぎたので GNDの代わりに JP6の GND側ピン(1kΩが入っている)を 使うと音量が下がって適当なレベルになりました。
ローパスフィルタをつけずに使ってもちゃんと聞けます。

真似する場合、ショートに注意してください。真のGND間と接続して 過電圧で壊すといけないので、高価なスピーカーやヘッドホンでは試さないように!

USBスピーカー実験
USBスピーカーの実験風景

音質は PCのヘッドホン端子からちゃんとしたヘッドホンで聴くよりは劣りますが 実験に使ったのが安物のイヤホンですし、あたりまえでしょう。 あくまで サンプルなので、ミュート機能は使えますが PCから音量調節できなく なっています。このことは CD-ROMに入っている UM0424 13465.pdf を読めば書いてあります。  より多くを求めるのならば、これを叩き台に自分で改良すべきです。

・サンプルをソースからビルド
 CD-ROMに収録の "Audio Speaker.dfu" ファイルは CQ-STARM基板でもそのまま使えたのですが、 ソースファイルを Keil開発環境でビルドした場合はダメでした(完全に素のままビルド すると 08000000hから始まるものになるので、絶対ダウンロードしてはいけない)。
CQ-STARM基板で使えるようにするには以下の修正が必要です。
ポイントをまとめると、結局は DWMに書いてあるとおり、
「CQ-STARM基板にあわせて 08003000h から始まるプログラムにする。」ということの様です。
下記 2. については、正確には 「割り込みベクタテーブルを 08003000h 開始にずらす。」です。
  1. Options for Target '〜' の設定
    本誌記事 p.108の文章及び 図1の (8)までに沿った変更をします。アドレス変更2箇所 + Hex出力

  2. hw_config.c の修正
    これは同図の (9)に相当するようです。このサンプルの方には STM32_Init.c(Configuration Wizard)が ないので、代わりにプログラムで記述されているところを書き直します。
    サンプルによって行位置が変化するのですが、USB_Interrupts_Config(void)関数の中です。 下に示すのは 修正後のもの です。
    #ifdef  VECT_TAB_RAM  
      /* Set the Vector Table base location at 0x20000000 */ 
      NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
    #else  /* VECT_TAB_FLASH */
      /* Set the Vector Table base location at 0x08000000 */
    //  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);   
      NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x3000);   
    #endif 
    

以上の修正をしてからビルドすると、CD-ROM収録のものと同じように動作する(ようにみえる) ものが作れました。”ようにみえる” と書いたのは、DFUファイルを比べると 例のゴミ 以外にも プログラム実体で異なる部分があって完全に同じ とは断言できなかったためです (CD-ROMの方は IARでビルドしてるのかな?)。

Tip - 8
 CD-ROM収録の DFUファイルは ファイル名にスペースが入っている不適切なファイルです。
Hex2DFU.EXE では使うには ””(半角ダブルクォート)で囲む必要があります。

●JoyStickMouse
 ビルド方法が分かったので今度は最初から自分でビルドした DFUファイルを使いました。
ダウンロードして PCに再接続するとHIDマウス用ドライバが自動インストールされます。

プログラムを読んで 入力方法を確かめておきます(本来なら、CQ-STARM基板の回路図とつき 合わせて致命的な使用方法になっていないか確認が必要)。
外付けのプッシュスイッチをつけたほうがいいのですが、今回は簡易実験なので リード線を 使って下記表の信号を GNDに接続するとマウスカーソルが ツツツ と動くのを確認しました。
    JoyStickMouse 操作スイッチの場所
    コネクタ番号マイコン信号名操作方向
    J3-7PD8
    J2-32PD14
    J2-7PE1
    J2-8PE0

変なところを触ると (例えば 電源とGNDをショート)CQ-STARM基板や PC本体まで壊すはめに なるので センス・自信 のない人はやらない方が無難です。万が一壊しても一切責任は負えません。

・「傾きマウス」に改造
 最初から CQ-STARM基板に入っていたサンプルプログラムは加速度センサを読み取る機能 が備わっているので、そのソースを参考に JoyStickMouse用のソースを改造して、基板の 傾け具合でマウスカーソルが動くように、また元々の JoyStickMouseには付いていなかった  クリック機能 を追加しました。

操作方法
水平(XY方向共 移動量ゼロ)のときに LEDが点灯します。
敏感だと使いにくいので、ソフトで ”不感帯”をつけています。

この「傾きマウス」で狙ったアイコンをダブルクリックするのはなかなか難しいです。 私だけかもしれないけれど、ナナメに動かすのも難しいです。

参考用に、ビルド済の DFUファイルと ソースファイル一式(大半は STMicroelectronicsの サンプルそのまま)をダウンロードできます。
    実用目的ではないので、動かしにくくても苦情は受けつけません
    元のプログラムソースもまだ流し読みしてるだけなので、改造方法は いいかげん です。
 バイナリ(DFU)・ソースダウンロードへ 約83KB

 以下続く、かは微妙。


2008/05/03(Sat)
■簡易加速度ロガー
 メモリーカードコネクタを入手するかどうか迷っていたのですが、 とりあえず 内蔵FLASHが DFU12KB + Keil開発制限16KB を使ってもまだ 100KBも 余ってることに気がついて、DWM6月号を待たずに加速度ロガーを自作してみることに しました。

●機能
 CQ-STARM基板(と電源)だけで、加速度データ記録を行います。
但し、購入してからの電子工作(はんだづけ)は、
  1. JP6(プログラムのダウンロードに必須)
  2. 電源端子J4(外部電源で PCから離れて動作させたいから)

が必要です。

メモリーカードや LCDモジュール、スイッチなどを追加せずに済ませたので、 設定記録の読み出し は、ホストPCに USB接続して ハイパーターミナル上で 行います。

記録データ
加速度センサの X Y Z 軸、及び、各軸に対してタイプを Max Min Ave(平均) から
任意に選択可能。  センサ感度は ±2G と ±6G を切り替えできます。

記録間隔
1s 〜 3600s まで秒単位で可変。また Max/Min/Ave を求めるため、
内部で細かく(10ms 〜 10000ms まで 10ms単位で可変)計測します。
    この仕様は、どんな計測をすればいいかの調査実験でもあるので、 ベストではないです。 測定対象によってはプログラムの大幅修正が必要です。
記録時間
マイコン内蔵FLASHメモリの内 100KBが記録領域なのでそれなりの時間しか記録できません。
それでも XYZ3軸 × Max/Min/Ave 3タイプを 1秒毎に記録した場合、7400s = 2時間 ちょっと記録できます。
記録時間を延ばす目的で、ADC12bitを 8bitに丸めるモードがあるので、 データ数を一つに絞った場合、最大で10万サンプル記録できます。
記録実行中は 基板上の LEDが点滅するので動作中かどうかが分かります。

「ある閾値以上の衝撃を受けた時、その値と時刻を記録する」という機能はありません。

メモリマップ
0800_0000 - [FLASH] DFU
0800_3000 - [FLASH] Tinyロガー プログラム本体
0800_6C00 - [FLASH] 設定記録 実体は 高々 20byte
0800_7000 - [FLASH] 記録バッファ 0801_FFFF までの 100KB

2000_4000 - [SRAM] 仮記録バッファ 1KB分

尚、本マイコンの FLASH書き換え回数は 最小1万回 とデータシートにあるので、 そうそうダメになることはないと思います。

●注意

●使い方
CQ-STARM基板を PCに接続(USBケーブル経由)する場合、必ず外部電源は外すこと。

準備
・DWM本誌記事をよく読んで、各種操作がスムーズに行えるようになっていること。
・Tinyロガー(TinyLOG.DFU)を CQ-STARM基板にダウンロードする。
 基板に最初から入っているプログラムと同じ 仮想COMポート相当 として振舞うので ドライバはインストール済のはずです。

設定
 CQ-STARM基板を PCに繋いで「ハイパーターミナル」を起動し、なにかキーを押す(1文字送信)と --- Welcome to Tiny Logger --- と表示されb黷ホ動いています。 下記写真参照

押す前から数列がどんどん表示されるかもしれませんが、今は無視して、キーを押してください。

h または ? (+ Enter )コマンドでヘルプを表示します。
各コマンドは Enterを押すと処理されます。 各コマンドは小文字(or 小文字+続けて数値)のみです。

設定を変更すると、残りの空き記録領域でどれくらいの時間記録できるか表示します。
望む設定が決まったら wコマンドで設定をマイコンFLASHに記憶(「確定」)させます。

ハイパーターミナル例
設定途中の1例

画面の「仮設定」では、Y/Z軸の Max/Min/Ave(平均)を記録します。つまり1サンプリングで6値。 また、10ms毎にデータを読み取って Max/Minを更新し、1s(1000ms)たった時点で の値(+100回の平均)を 1回のサンプリングとして FLASHに残します。
内部の読み取り間隔と実記録間隔は個別に変更できます。
設定によっては Max/Min/Aveが全部同一になることがあります(3種記録しても無意味)。

記録
    記録を開始するのは 電源投入時のみです。
    ハイパーターミナルからの開始・再開コマンドはありません。

CQ-STARM基板から USBケーブルを外して、再度電源投入で記録開始します。 電源が入れば記録開始なので、外部電源以外にも、ホストPCに繋げた場合にも開始します。 だから、記録が目的でない場合はなるべく早くハイパーターミナルから何か送信して記録を 停止させる必要があります(初めて接続したときも記録しようとするので注意)。
1000バイト分データが溜まるごとに FLASHメモリ1ページ(1KB)に書き込むので、 その分だけの時間的余裕はあります。
正確には、CQ-STARM基板に電源を投入すると 5秒間 LEDが点灯し、その間に USB経由で通信が来ないか待ちます(来ても必ず 5秒待ちます)。その後記録を開始します。  記録実行中は CQ-STARM基板の LED が2秒に1回の周期で点滅します。


記録停止方法
FLASHに記録する空き領域がなくなるか JP6をショートさせると記録を終了します。  停止すると LEDが消えたままになるのでそれから電源を切ります。

 次に電源投入するときは JP6をオープンに戻さないと、DFUが起動するので注意。

JP6で停止させた場合は1000バイト未満でも、そこまでの分は FLASHに記録します。 一方、ハイパーターミナルから何か送信して停止させた場合は最後の 1000バイト未満分は FLASHに記録されません。 あと、動作チェック用として、設定に関係なく XYZ3軸全ての 平均/最小/最大データが表示されます。

1KB分(1ページ)の書き込み時間はデータシートから計算すると 20ms前後掛かるようです。 一応その間も割り込みを使って記録は継続しています。

データ領域に既に記録したデータは消去コマンド( eコマンド )を使わない限り消去・上書きは されません。 既に測定データがあっても、空き領域があれば電源投入するとそこから記録開始します。 故に空きがなくなったなら、次の記録の為には消去が必要です。

記録の取り出し
USBケーブルでホストPCにつなぎ、ハイパーターミナルを立ち上げます。 oコマンドで FLASHに記憶されたデータを表示するのでキャプチャ機能を使ってテキスト ファイルにします。 複数データがある場合、全部出力するのでテキストエディタで編集・分割してください。


記録データは CSV形式 です。 ADCの生データなのでその後のデータ処理については自分で行ってください。


測定例
測定 - グラフ化例
基板を手で持って振ったもの(6Gスケール)
隠し機能を使って 20ms毎記録(平均なし) 横軸単位は 秒

 隠し機能といってもソースを読めば丸分かりです。

●ダウンロード
 バイナリ・ソースダウンロードへ 約94KB

●感想
その1
 この加速度ロガーをスクーターに設置した実験もやってみましたが (→ここ)、 設置場所や測定周期、あとローパスフィルタ用の Cload(コンデンサ) 付加、 プログラム内容も含めていろいろ検討・調整・改良しないと、有意義なデータは得られないようです。
ディジタル・オーディオでよく出てくる「標本化定理」の考え方も重要になると思います。
このあたりは測定対象によってケース・バイ・ケースみたいなので各自で研究してください。

その2
 プログラムを記述していって、どんどんサイズが大きくなる内に、
    〜〜 error: L6047U: The code in this image is 12442 bytes - this version of the linker will not create images that large Target not created
と、怒られました。数字を見たらまだ大丈夫じゃないかと思ったのですが、Keil開発環境のコードサイズ制限の 16KBというのは、少なくとも CQ-STARMについては「bss領域やスタック領域のサイズも含めて」の様です。  "STM32F10x.s" の Stack_Size を 400h から 200hに戻したらビルドに成功して、 「00なのにそりゃないよ〜」と思った経験が。
リンクに失敗しても mapファイルは作られてるので、それを見て計算すればどれくらいオーバーしたか 確認できます。

以上。


 このページの先頭に戻る