ラベル STM32 の投稿を表示しています。 すべての投稿を表示
ラベル STM32 の投稿を表示しています。 すべての投稿を表示

2018年10月31日水曜日

今更ながらのSDR-3製作記(とりあえずできたー編)

CQ出版社のトランジスタ技術誌9月号のSDR特集にあったSDR-3という7MHz帯SSBトランシーバーのキットを販売するという情報を聞きつけ、早速Faxで注文しキットが届きましたが、3Dプリンターとの格闘中で組み立てが先延ばしになっていました。

ひと段落したところで届いたSDR-3キットをとりあえず組み立ててみました。


届いたキットにはトランジスタ技術9月号も同梱されていました。

コントロール部 SDR-3D(ディジタル部)の内容
RF部 SDR-3A(アナログ部)の内容

キットは、STM32F4とオーディオコーデック、LCD、コントロールスイッチロータリーエンコーダを含むSDR-3Dと、ベースバンド信号をRF信号に変換するSDR-3Aに分かれて梱包されています。

説明書に従い、まずはSDR-3Dから組み立てていきます・


SDR-3Dの内容ですが、表面実装部品はすでに装着済みです。まずDCコネクタをハンダ付けしてDC5Vを供給し、システムのVDDの電圧が規定値に収まるか確認し、プログラミング用のシリアル通信ヘッダピンを装着します。

事前に確認しなかったのですが、STMマイコンにプログラムを入れる作業が必要です。そのために別途USB-シリアル(3.3V)変換モジュールが必要となるのですが、以前秋月で購入していた超小型USB-シリアル変換モジュールを思い出しパーツ箱をひっくり返して探し当てました。個人的には本誌を同梱するのならモジュールも用意してくれるとありがたかったのですが、偶々手持ちのものがあったので先に進める事が出来ました。

ちなみにUSB-RS-232C変換モジュールは使えません。高くて12V程度の電圧がマイコンポートにかかってしまうのでマイコン側が壊れてしまいます。

秋月で購入しておいたUSB-シリアル変換モジュール
モジュールの用意が出来たらPCとSDR-3Dのシリアルポートをモジュールを介して接続し、STmicroのサイトからプログラミング用のソフトをダウンロードします。(STmicroへのsign upが必要)


おじさん工房のサイトから実行ファイルをDLしマイコンにプログラム中
プログラムの書き込みが終了し、ボード上のLEDが正しく点灯、点滅しているのを確認して、残りのヘッダピンやスイッチ、ロータリーエンコーダなどをハンダ付けしていきます。LCDは基板の裏についているSDカードソケットを外す作業が必要です。
部品装着が終わったら改めて5VDCを供給し起動させます。

再起動しLCDが表示されています スイッチ類の動作も確認
LCDに一連の表示が出て、ロータリーエンコーダなどの動作が確認できればSDR-3Dはひとまず完成です。

引き続きSDR-3Aを組み立てます。こちらも表面実装部品は装着済みなので、ヘッダピンやリードインダクタ、リレー、RFトランス(手巻きが必要)を説明書に沿って装着していきます。

最後にSDR-3DとSDR-3Aをつなぐコード処理をし、相互に接続して完成です。完成までゆっくり行っておよそ3時間程度です。


アンテナとスピーカーをつないで起動させるとバンドスコープに信号が表示され、受信を開始します。


とりあえず受信は問題なく動作しています。送信部のテストと各測定についてはまた次の機会に纏めようと思います。

このキットは完成度は高いですが、実験や教材としてとても有用です。ただ使うだけではもったいないですね。時々記事のネタにしていこうと思っています。

今回はとりあえず完成したよ!ということで(笑)

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年1月24日水曜日

CentSDRキット製作しました(その3、番外編^^;)

というわけで無事に動作したCentSDRですが、組み立て最初のほうでやらかしてしまったマイクロUSBコネクタの本格的補修を行いました。

ファームウエアインストールを含め完成するまでは暫定的にコネクタの上をスズメッキ線を這わして基板に縛り付け、各端子を極細UEWや配線リードの切れ端でつないでいました。


これで剥がれるリスクはかなり減りますが、線1本で固定しているためコネクタの着脱などでコネクタがずれて端子の接触不良が生じてしまいやはりよろしくありません。もう一本縛り付けるとより安定すると思いますが、それでも完全には安定せず細いパターンがこれ以上剥がれてしまう恐れから根本的に実装しなおすことにしました。

コネクタにスルーホール用の足がついているものを探してみると、aitendoに目的のものが見つかったので充電用のICなどのパーツを合わせて取り寄せてみました。


ピント合っていませんが^^;手前にあるコネクタが足付きのマイクロUSBコネクタです。ひっくり返すと前後2本ずつ計4本の足が見えます。これでしっかり安定して取り付けられそうです。

そこで、オリジナルのコネクタを除去してPCBのコネクタ部分をフラックス洗浄液できれいにして状況を確認します。


USBの5本のピンのパッドはすべて剥がれていて、1から3ピンから延びるパターンも剥がれ、特に3ピンのパターンが短くなってしまっているという結構悲惨な状況でした。

まず1~3ピンから延びるパターンの端を一番短い3ピンに合わせてカッターの刃先を使って切り揃えます。


大体揃ったところでレジストを刃先で削り銅箔をあらわにします。元のコネクタの位置に新しいコネクタを装着するとコネクタのピンとパターンが離れてしまい細いUEWでピンと対応するパターンを繋げなくてはならなくなり、不安定要素が残ってしまいます。そのためコネクタのピンとパターンがしっかり重なるような位置までコネクタの装着位置をずらします。

その位置にコネクタを合わせて、4つの足をはめ込む1mm径の穴をピンバイスで開けます。


幸いコネクタ周辺は裏面もベタアースだったので他のパターンに干渉しませんでした。


コネクタのピンとパターンが合うことを確認します。ほぼほぼぴったりでしょ?

穴をあけてコネクタを装着しずれがないことを確認したら、穴の周りのレジスタをはがしてハンダ揚げをし、内側にコネクタが移動した分鑢で大胆にPCBを削ります。


下準備が整ったところで、新しいコネクタを差し込みまずは外側からハンダ付けして固定してからピンとパターンをはんだ付けします。先にピンとパターンをハンダ付けしてしまうともしもの拍子でコネクタが外れてパターンがまた剥がれてしまっては目も当てられないので^^;


はい。これでばっちりコネクタが装着できました!
あとはコネクタにケーブルを差し込んでみて左右のPCBをもう少し削って形を整えます。


数ミリ内側にオフセットしてしまいましたが、先の暫定的な処置に比べれば安心感が格段に違います。

でも、コネクタの抜き差しの際はほんと気を付けましょう。

というわけで、たぶんまだ続く。

2018年1月23日火曜日

CentSDRキット製作しました(その2)

CentSDR製作の続きです。

前回3.3V電源部とVCTCXO装着を行いました。VCTCXOはメーカーがわからずデータシートを探せませんでしたが、4つのランドの中心からなるべくずれないようにしてランドの縁から少しずつハンダを流し込み、裏のパッドにハンダ付けします。一気に流し込むとランドからハンダがあふれて上蓋にショートしてしまいます。

ルーペでよく観察して問題なければ電源を入れて右上の出力端子にオシロスコープのプローブをあてて波形を観察します。


 26MHz,1Vp-p前後の矩形波が観察されればOKです。

次にSi5351AとSTM32F303CBT、CodecチップのTLV320AIC3204を装着します。


 パッケージの外にピンが出ているSi5351AとSTM32F303CBTについては、ピンピッチは狭いですがヘッドルーペをうまく使うとそれほど苦も無く装着することができます。装着方法はネット上でもしばしば見かけますが、私のやり方はランドがハンダレベラー処理されていればフラックスを多めにランドとデバイスのピンに塗り付け、デバイスのピンとランドの位置を合わせデバイスの上から片方の手の指で押さえて固定し、コテ先をピンの上にあてレベラーのハンダで装着していきます。レベラーのハンダが不足気味の場合は一旦すべてのピンを装着してから、追加のハンダをピンの一列ごとに盛りハンダ吸い取り線で余分なハンダを除去すると確実にきれいに装着することができます。最後にフラックス洗浄剤で余分なフラックスを除去してきれいにします。

 次はTI製のオーディオCodecチップTLV320AIC3204の装着です。このチップはVQFNというパッケージで表面実装XTALなどと同じようにピンは外に出ておらず、すべてデバイス底面のパッドになっていて側面にわずかに顔を出しているというものです。

VQFNパッケージの装着は初めてなのでCentSDRの組み立て資料に記された手順で装着しました。下準備としてチップのパッドすべてにハンダ揚げを行い一旦ハンダ吸い取り線できれいに拭き取ります。フラックス除去剤できれいにしてからボードの装着部位とデバイスのパッドにフラックスを塗りデバイスを装着部位に正確に合わせます。この時シルク印刷の白丸とマーカーをわせるわけですが、パッケージのマーカーがフラックスや除去剤の影響でわかりにくくなります。そこでまずデバイスをひっくり返して下の画像のようにデバイス底面中央の大きな四角いパッドの1角が欠けているのを確認します。


データシートを見ると、これがマーカーと一致するので欠けた角をPCBの白丸マーカーに合わせます。

四辺ずれがないように確認してデバイスを上から指などで押さえて固定し、わずかに見えるランドにコテ先をあててパッドと対応するランドをハンダ付けします。

ここでもレベラーのハンダ量が少なめの場合、ルーペでパッドとランドのずれがないことを確認してから1辺ずつ追加ハンダを盛ってハンダ吸い取り線で拭き取るという作戦を行います。再度ルーペでショートなどないかどうか確認します。


 基板の裏の穴からもハンダを流し込み装着完了です。

ここで、いよいよファームウエアをインストールする作業に入ります。

ファームウエアのソースコードはGitHubで公開されています。ただ自分の環境ではまだうまくビルドできないため、追加公開されたバイナリをダウンロードしNucleoに付属するST-LINK V2機能を利用してインストールしました。


 インストールした後は、確認のためまずSi5351Aの出力をオシロスコープで確認します。


 上に局発出力、下にシステムクロック8MHzが見えます。

そのほかCentSDRに接続したUSBケーブルを稼働中のPCにつなげるとシリアル通信ポートとして認識されます。

これで山を越えたので、あとは残りのパーツを一気に装着し改めて電源を入れます。


 というわけで無事完成です。

ヘッドホン出力にスピーカをつないでも音量は十分で、SSBも手持ちのTECSUNのラジオよりずっと安定して受信できます。

ついでに、VNシリーズのように透明アクリル板を上下に挟んでみました。


 これでひとまず完成ですが、USBコネクタ部分の改修とLiPoバッテリー充電回路の実装も必要なパーツが揃い次第予定しています。

 ファームウエアのビルドができるようになったらソフトウエアもいじってみたいと思います。

 というわけでまだ続く。

2018年1月22日月曜日

CentSDRキット製作しました(その1)

Elecraft社のKX3,KX2をはじめ、最近ではCortex-M4搭載のSTM32マイコンを搭載したSTM32-SDRやmcHFなどが手が出せる値段で手に入るようになり注目されています。

少し前では信号処理をPCに任せたタイプのSDRが主流でしたが、バンドスコープやウオーターフォール機能は大変魅力的であってもハイエンドタイプ以外ではレイテンシや安定性に少々問題があって実用性がいまひとつでした。

このリアルタイムな信号処理をCortex-M4搭載マイコンとオーディオCodecチップ、I/Qミクサ、もしくはFPGAを使ったDDCの組み合わせで済ませられるようになり、さらに小さく実用的で魅力的になっています。

いままでPICマイコンを使ってきましたが、そろそろSTM32マイコンも使えるようになりたいと思い立っていろいろと本やらネットを徘徊していたときにみつけたのが、タイトルにあるCenSDRキットでした。

前置きはこのくらいにして、CentSDRはTT@北海道さんが開発されたスタンドアロンSDRレシーバキットです。TT@北海道さんのサイトはこちら

回路構成はTT@北海道さんのサイトに詳しく解説されていますが、アナログI/Qミクサによるダイレクトコンバージョンで、オーディオCodecチップTLV320AIC3204によるADC/DACとSTM32F303CBT6によるディジタルフィルタ、復調、FFT、コントロールが行われています。ユニークなのは、局部発振とシステムクロックをSi5351Aの1チップでまかなっているところです。しかも基準発振にはVCTCXOを使用していて、STM32のDACで周波数の微調整が行われており、どのように調整が行われているのか非常に興味深いです。

というわけで、キット頒布開始のうわさを聞きつけて早速頒布をお願いしました。
冬の北海道からクリックポストで到着しました。クリックポストは安くて追跡付きで便利ですね。 VNシリーズでは箱の厚さがある程度ありポストに入らないケースがあるため、今のところ対面渡しの形式が安心かなと思いますが検討してみたいところですね。


キット内容です。表面実装部品がほぼすべてで台紙に丁寧に貼り付けてありました。回路図を見なくてもシルク印刷された部品番号にあわせて装着すればOKです。(2箇所番号の入れ違いあるので注意)キットに付属していないSi5351Aとロータリーエンコーダ、カラーTFT液晶モジュールを別途入手しておきます。

キットに同梱されている部品のパッケージはいずれもかなり小さく実装にはルーペ必須です(ROGANなので)。私はヘッドルーペを駆使して実装しました。

部品お確認後組み立て資料に書いてある組み立て手順に沿って部品を実装していきます。


実装で難しいだろうと思っていたのはVQFNパッケージのオーディオCodecチップです。しかし、実際に手間取ったのはマイクロUSBコネクタとVCTCXOの実装でした。

最初に電源周り(USBコネクタ、電源スイッチ、電圧レギュレータ)を行いましたが、装着後電圧確認のためテスタ棒をあてようとしてUSBコネクタを引っ掛けた拍子に基板のランドとともにコネクタがはがれてしまいました。端子を半田付けしたランドとパターンの一部まで・・・

コネクタを接続した状態では差し込んだプラグの柄を上下に動かしてしまうとてこの原理で 簡単にはがれてしまいます。コネクタの着脱も慎重に行うようにしなくてはいけません。

当座こんな感じでリペアしました。


これだけだとまた簡単に剥がれてしまうので、コネクタの両側にピンバイスで小さな穴を開けてスズメッキ線でコネクタを覆うようにしました。それでも微妙に動いてしまって接触不良となるので後ほどしっかり取り付けるような方法を考えます。

コネクタには余計な力を加えないようにすることと、装着するときには裏のホールにもしっかりハンダを流し込んでコネクタを固定することが肝要です。

電源関係が問題なければ、次はVCTCXOの装着です。


U3(本来はU7)とシルク印刷されたところにVCTCXOを装着しますが、4つの四角いランドのちょうど中央になるように装着することが必要です。ややずれて装着してしまってためか、最初なかなか26MHzの信号が現れず焦りましたが、一度VCTCXOを外しランドをハンダ吸い取り線を使って切りに余分なハンダを拭き取り、フラックスを塗布してVCTCXOを再装着します。フラックスが乾かないうちにちょっとずつランドにハンダを送り確実にVCTCXOの端子を半田付けします。これで26MHzの信号を確認できて次の工程に進みます。

以後その2へ続く。