2018年3月21日水曜日

STM32CubeMXの導入とSTM32プログラミング開始

STM32はCortex-MなどARMベースのマイコンで、高性能で安価なmbed対応のNucleoの出現に加え、mcHFやCentSDRなどスタンドアロンなSDRに採用されており、開発上非常に魅力あるデバイスですが、開発環境を整えるのにやや敷居が高く、PICやAVRと違い例えばGPIOの設定一つでもより細かい設定が必要でなかなか取っつきにくいものがありました。

そうはいってもいつまでも躊躇している場合ではないのですが、ちょうど関ハムシンポでSTM32F1の格安小型マイコンボード、通称BlackPillをJF1DIR広瀬OMから譲っていただいたことをきっかけに開発環境構築について改めて調べてみました。その結果Arduinoやmbedに依存しないオフラインな開発環境としては、現時点ではSTM32CubeMXとSW4STM32がよさそうです。

STM32CubeMXは最初登録が必要ですがソフトウエアのダウンロードと使用は個人的使用の範囲では基本的に自由です。(商用目的の場合は確認していません)このソフトは便利でかつ強力なSTmicro純正開発支援ツールです。要は主プログラムで使用する機能とピンを設定に基づき、各IDEなどに合わせたプロジェクトファイル群を自動生成してくれるソフトウエアです。本体ソフトウエアをインストールし、各STM32シリーズごとのライブラリファイルをSTM32CubeMX内でダウンロード、インストールしておきます。(Helpメニューの"Manage embedded software packages"から)


なぜ"Cube"なのかよくわかりませんが、とにかくウインドウ内左中央の"New Project"を左クリックして開始します。そうするとソフトウエアのアップデート確認、インストール後に目的のマイコン選択ウインドウが出てきます。


 該当する項目のチェックボックスにクリックして目的のモデルまで絞り込んでいきます。


 この例では秋月で単体販売されているF303K8T(6)を選択しました。右端中央にあるStart Projectボタンをクリックすると、各種設定用のウインドウに切り替わります。


 ウインドウ右には実際のチップを模したグラフィック表示になっています。ここでピンに割り当てられた機能を直感的に確認したり変更したりすることが可能です。機能が固定されたVDDとVSSなどは当たり前ですがすでに割り当てられています。左はチップに内蔵されている各種機能をツリー表示したものです。ある機能を有効にしたときに、機能で割り当てられるピンが自動的に選択されます。

実際には各機能相互で使用するピンのコンフリクトを避けるために、右のツリーからプログラムで必要な機能を選択してからそれ以外のGPIOを指定する流れがスムーズかと思われます。


 例として内蔵基準発振器、SPI接続のTFT LCD、I2C接続のペリフェラル、AD変換ポート、デバッグ用ポートを使いたいとします。

左のツリーから必要な機能をすべて選択すると、各機能にあたるピンを自動的に設定されています。あとはSPI接続で他に必要なCSとD/Cポートを空いている適当なピンに合わせて左クリックしGPIO_Outputにチェックします。チェックしたピンは緑色に変わります。

次に上の"Clock_configuration"タブをクリックします。


 すると各モジュールの動作クロックを設定するウインドウにかわります。

 中央にあるシステムクロックSYSCLKを基準にしてラジオボタンとプリスケーラのプルダウンリストを適切に選択します。ここでは8MHzのRC内蔵発振器を使用するため、4MHz入力PLLでの最高倍率16倍である64MHzをSYSCLKとしてあります。その際にモジュールの中でオーバークロックになるところが赤色に変化して注意を促されるため該当モジュール前のプリスケーラの倍率を設定して最高周波数以内にします。エラーがなくなったのを確認して次に上の"Configuration"タブをクリックして各機能の設定を確認調整します。


 ここでは各モジュールやミドルウエア個々の設定を行います。

気を付けておきたいのは、デフォルトの設定をそのまま使うと一部を除きたいていは動きません。(苦笑)

よく使うモジュールとしていくつか例に挙げると、まずはI2C。スピードはデフォルトで100kHzに設定されていますが、LCD表示器など含めて400kHzのFast modeに対応しているので変更しておいたほうが良いです。1MHzのFast mode plusは外付けEEPROMの多くが対応しているものの、LCD関連は非対応のことが多くFast modeの400kHzに設定するのが無難です。それからSPIですがデータ転送幅がデフォルトで4bitになっていて、最初気が付かずこのままにしていたためTFT LCDがまったく動かなくてしばらく悩みました。ここは8bitへ変更することが必要です。最後にGPIOです。動作速度はFastに変更、input設定の場合プルアップ、プルダウン、両方なしいずれかの設定、outputの場合正論理か負論理か、プッシュプル出力かオープンドレイン出力かの設定を必ず確認し正しい設定にします。

設定が済んだら、 "generate code"コマンドボタンもしくはメニューを選択します。


ここでプロジェクト名を入力し、必要があればプロジェクトファイル群を置く場所を指定(デフォルトの作業ディレクトリ以外)、Toolchain / IDEプルダウンメニューでSW4STM32に指定しOKすると作業場所にHALライブラリを含んだプロジェクトファイル群を生成されるので、それらをeclipseでインポートします。インポートしたプロジェクトでコードを書いてビルドすれば実行ファイルが生成されます。

ちなみにIDEのSW4STM32はフリーのeclipseベースですが、供給元からダウンロードの際細かい個人情報の入力を要求されるので注意が必要です。私の場合は日本語化プラグインとJDE関連などが含まれたeclipseベースのPleiadesをインストールして、eclipseからSW4STM32をインストールしました。さらにSTmicroからSTM32CubeMXプラグインも導入し、eclipseからSTM32CubeMXを呼び出して、生成されたプロジェクトファイル群を自動インポートできるようにしました。

作業スペースもdropboxのクラウド環境において簡単にバージョン統一を行っています。

まぁ言ってしまえばaruduinoIDEもmbedもSTM32CubeMXも設定を効率化してその分コード書きに集中できるようにする便利なツールです。何より標準でHALドライバがつかえるのと設定がうまく体系化されている印象で取っつきにくさを解消してくれています。こういったツールについていろいろと意見があるようですが、私のようななんちゃってプログラマには本当にありがたいツールですね。

最後にテスト動画を。


 秋月で1個250円のSTM32F042K6T6単体で160x128のSPI接続カラーTFT LCDをつなぎ、ADC入力電圧を表示させています。

2018年2月21日水曜日

mcHF V0.7 component kit 製作しました(訂正事項あり)

中華製のコンパチ完成品が出回るほどの人気のあるM0NKA Chris氏のmcHFが昨年後半V0.7を頒布開始したという情報をいただきました。早速暮れにcomponent kit(MCUとその周辺以外表面実装部品含めたユーザー装着のキット)をオーダし入手しました。その後専用ケースキットも頒布開始されましたがIn Stockになるや否やすぐに売り切れてしまい、再開するまで何度かサイトをチェックしてようやく入手することができました。

現在は表面実装部品装着済みのケース付きキット(Full kit & case) として頒布されていますが、今のところout of stockになっています。(オーダーページはここ。)

入手したは良いものの年末のインフルエンザから関ハムシンポジウムとなかなか製作に入れませんでしたが、ようやく一息ついたところで一気に製作しました。


キット自体はオーダーから約1,2週間Royalmailで発送されます。今回はV0.6よりも二回り大きなパッケージで送られてきました。


component kitの中身です。V0.6よりもふた回りも大きな基板で、UIパート、Logicパート、RFパートの3パートに分かれています。それぞれのパートごとに対応する表面実装部品、とそれ以外の部品が袋に詰められていて、さらに袋の中にはBOMが納まっています。

組み立てには袋ごとに取り出してその中のBOM表の順番に部品をシルク印刷の部品番号と極性を合わせて一つ一つ装着していきますが、唯一2ピンのダイオードについてはシルク印刷では極性がわからなかったため、回路図との照らし合わせが必要です。またGalleryページをよく見ながらヘッダピン、ソケットを間違いないように取り付けます。とくに、ヘッダピンソケットのひとつはオプティカルエンコーダ端子のハンダ付け部分のうえに閲覧者かぶせるように装着するので、エンコーダの端子ははんだ付け後短くカットしないとソケットがうまく装着出来ないので要注意です。

追記: オプティカルエンコーダはハンダ付けせずに、リードをそのまま挿入してピンソケットの下側からソケットに挿入するようになっていました。もちろんハンダ付けしても差し支えはありませんが。インストラクションはよく読まないとだめですね・・・





こんな感じにすべてのパーツを装着します。V0.6のときは1週間程度かかりましたが、今回は延べ3日で装着完了しました。今回のパッケージでは、ヘッダピン2つ、0.1uFのチップコンデンサが不足していました。いずれも手持ちのもので補填してます。


次にいよいよケースに収める作業です。ケース本体は黒く塗装されたアルミシャーシと3Dプリンタで成形したフロントパネル、つまみも3Dプリンタで作成されています。


まず、一番下になるRFパートの基板を下のシャーシの溝に入れてスライドさせます。レギュレータとファイナルの石のフランジが丁度下のシャーシにあたるので特にねじ止めしなくても放熱は問題なさそうです。グリスを薄く塗っておくとよいかもしれません。

上の画像はRFパートの上にLogicパート、UIパートを重ねてパート間のピンの接続を確認しています。このキットではピンとそれに対応するソケットの位置が縦方向に微妙にずれていて正しく組み合わせるのが少々難しかったです。

確認が済んだら次はいよいよ前のシャーシを組み合わせます。


一番上になるUIパート基板をフロントシャーシの溝にはめ込みますが、その前にスピーカーを上の画像のようにシャーシの据付位置に置いてからUI基板をはめ込みます。この状態で各タクトスイッチの押し具合を確認します。自分のキットでは、POWER SWの高さが微妙に合わずスイッチの頭を1ミリほど削って収まりました。


というわけでRF基板が納まった下のシャーシにLogic基板を重ね、さらにUI基板を装着したフロントシャーシを重ねます。ピンとソケットの組み合わせに問題なければスピーカ端子の配線を繋げ、両サイドのパネルを装着してねじ止めしダイヤルノブをはめて完成です。

多少追加加工は必要でしたが、V0.6中華ケースほどではなく比較的すんなりケースに収まりました。

一応MCUにブートローダとファームウエアがインストールしてあるので配線に誤りがなければ電源を入れて起動します。起動自体は問題なく動作しましたが、ブートローダが古いためか電源をオフにしても再起動してしまうという不具合がありました。YahooのmcHFフォーラムを検索した結果、ブートローダのアップデートで解決する情報をみつけたのでDFUモードにして最新のブートローダ(4.0.0.0)をDfuSeDemo経由でインストールし、再起動問題は解消されました。ついでにファームウエアも最新版に入れ替えました。

そのほか送信出力が出なくてしばらく悩みましたが、ファイナル部の電源供給用のRFCの配線間違いを見つけ改修し、無事送信出力も出るようになりました。

早速送信波をAPB-3スペアナで観察しました。

80m
40m
30m
20m
17m
15m
12m(参考)
10m(参考)
ざっと観察したところ、V0.6のオリジナルに比べて全体的に高調波が抑制されていましたが、30mと17mは2次高調波レベルが-20dBc程度と十分抑制されていません。やはり160mを除いたすべてのアマチュアバンドで内蔵LPFの高調波を抑制するにはLPFの改造は必要です。

さらに、近傍の不要輻射を見てみます。


CWモードで送信波を観察しましたが、基本波から750Hz離れて局発リークが比較的高レベルで観察されます。帯域外不要輻射許容レベルを超えているのでIQミクサーのバランス取りも必要です。逆サイドバンドはメニューのIQバランス調整で十分抑制されますが、局発リークは抑えられないのでハード的にバイアス調整用のポテンショメータの追加が必要のようです。

それからハイバンドになるとLogicパートへ送信波の回り込みもみられており、V0.6のケースのようにRFパートとLogicパート間に遮蔽板を挿入する必要がありそうです。

というわけで、JAでこのV0.7の免許を下ろそうとするとV0.6と同様少々の改修が必要になります。

筐体は大きく改修自体はしやすそうなので、少しずつ進めていこうと思います。

2018年2月5日月曜日

関西ハムシンポジウム2018に参加しました

去る2月4日尼崎市で開催されました関西ハムシンポジウム2018に参加いたしました。

例年前日車で現地まで向かいましたが、今回は当日電車で行くことにしました。

丁度開場の9:30に到着しましたが、すでにたくさんの方が入場されていました。


人ごみをすり抜けて『リトルガンくらぶ』ブースに向かいそそくさと展示頒布物を広げ準備。


 今回初めてVNシリーズ全モデルを頒布しましたが、各2セットずつ捌けました。やはり表面実装部品を全て取り付けるというキットはなかなか手が出しにくいようでしたね。完成品やVHF、SSB版のリクエストもいただきました。

また先日組立てたCentSDRの完成実働機を展示したところ皆さん大変興味お持ちのようでした。ほかにもまあべるさん作のμBitXやmcHFV0.6コンパチ機の痛いバージョンの展示、ジャンク販売などにぎやかなブースとなりました。

 それからVN-4002の様々な改善やテストなどでお世話になりましたJE3QDZ 吉村さんと、JI3IVL 森さんがブースにおいでただきアイボールと相成りました。


VN-4002が乗っかっていますが、吉村さんご持参の小型アンテナチューナーです。コンパクトにきれいにまとまっています。80m~20m対応だそうでこれでアンテナ、バッテリー、イヤホン、パドルを用意して手軽に移動運用できそうです。


こちらは森さん作の小型アンテナチューナーです。迷彩柄の缶にポリバリコンと手巻きの空芯コイルで構成されていますが、注目はダイヤルです。正面から撮っていなかったので若干わかりにくいですが、味気のない皿ねじ頭がかわいい猫さん顔になっています。ダイヤル全面でなく中央にポチッと小さくさりげない感じがまた良いですね。

良いものを見せていただきましてありがとうございました。

ほかにもVNシリーズを作っていただいた方などなど、ブースにお寄りいただきお話することができました。あっという間に充実した時間を過ごさせていただきました。

午後になって終わりも近づき人も少なくなったころに北神電子サービスさんのブースにCentSDRを持って出向き、PUPさんと橋本さんにお会いしてCentSDRなどで情報交換いたしました(橋本さんには午前中にもブースにいらしていただきました)。


上がPUPさん作、下が私作のCentSDRです。目についたのはLCDの輝度の違いでした。PUPさんはバックライト用のLEDの電流制限抵抗をオリジナルより大きくしたそうですが、それでも私のLCDよりも明るくて画像もくっきりしています。同系統のLCDではありますが、私がaitendoから調達したLCDとPUPさんがeBayから調達したものとは表示具合がだいぶ違うようです。LCD自体の消費電流は測定していませんが、eBayのLCDは若干ノイジーだそうで似ているようでいろいろと違うのかもしれません。

というわけで本当にあっという間に時間が過ぎてしまいました。お会いできました皆様ありがとうございました。また夏の関ハムにも時間が合えば参加したいと思います。

で、最後にゲットしたものを披露。


PUPさんから、CentSDRのパネル(レーザー刻印された本格的なパネルです)、ノイズキャンセラー基板、橋本さんからはHDS-SDR-1生基板(RTL-SDRを組み込んだコンバーター、BPF基板)BCL-LOOP13基板を、JF1DIR広瀬さんからSTM32F103激安ボードを分けていただきました。ありがとうございました。

VNシリーズはぼちぼち捌けましたが、各バンドいくつか残っていますので頒布ご希望の方はメールをお送りくださいませ。

2018年2月3日土曜日

関西ハムシンポジウム2018に参加します

直前告知ですが、明日2月4日に尼崎市で行われる関西ハムシンポジウム2018に参加します。

今回は事情により当日参加になりますので、時間的に到着が開場ギリギリになりそうです。いつもの『リトルガンくらぶ』ブースにお邪魔します。(今回はポスターの描きおろしはありませんので開場案内図を参考にお立ち寄りください・・・すみません)

出し物はVNシリーズ(VN-4002, VN-3002, VN-2002)フルキット各5セットと、Keyer mini-V2 Revision2SMD装着済みキット3セット持参します。

それから各VNシリーズと、TT@北海道さん頒布のCentSDRの実働機をデモンストレーションとして展示いたします。

ほかにも有志の皆様のジャンクなどの販売もあると思うので、会場にお越しの折にはぜひお立ち寄りください。

一応お品書きを。
では明日よろしくお願いいたします。

2018年2月2日金曜日

CentSDRにバッテリーを内蔵させる

CentCDRキットのPCBには充電回路とUSBーバッテリー電源切り替え回路のパターンがありますが、デフォルトではバイパスするように組み立てます。

しかしせっかくなのでバッテリーを内蔵させようと、まず薄型のLiPoバッテリーを購入しました。


本体後ろにセットできる程度の大きさでなるべく大容量のものを選びましたが、充電用IC MCP73831の充電電流設定抵抗が15kΩで、この時の充電電流は80mAと小さめなので2000mAhではちょっと大きかったかな^^;

PchMOSFETとTRは手持ちのDMG3415と2SC3325を使い、MCP73831はaitendoから取り寄せ回路図を参照してパーツを実装しました。


バッテリー用のコネクタはPCBの裏に取り付けます。

この状態でバッテリーをつなぐとUSB接続なしで問題なく立ち上がります。

ただし組み立て説明書によると、電源切り替え回路に問題があってバッテリーを繋げた状態でUSBに接続してからUSBを切り離すとバッテリー側のPchMOSFETスイッチがONにならず、電圧降下が生じてしまうということでした。

実際テストすると、バッテリーのみの場合LDO前との電圧差は数十ミリV程度でしたが、USBを接続してから外した時には0.4~0.5V程度の電圧降下が見られました。

USB側のPchMOSFETをダイオードに置き換えるなどの対策法も記載されていました。自分もUSBの電源ラインにダイオードを挿入して、USB側のFETを駆動させるTRのベースからダイオード前に抵抗を挿入してみました。


というわけで、裏のアクリルパネルにLiPoバッテリーを張り付けてすっきりと収まりました。

あとはスピーカーや、バーアンテナ内蔵などまた少しずつ進めていきたいと思います。