PIC三昧(11) DSM(データ信号変調器)を使ってみる、PIC16F18855

Joseph Halfmoon

別件でFM変調をやったので、今回はPIC16F搭載のペリフェラルDSMをつかってFSK変調をやってみます。DSMはパルス信号対象ですが、FSK、PSK、OOKで変調することができるモジュールです。変調波をキャリアに同期する機能などのオプションもあり優れものじゃないかと。変調してくれとクリクリするだけで変調OK、お楽。

※『PIC三昧』PIC関係の記事総目次はこちら

DSM(Data Signal Modulator)

PIC16F搭載のDSMは、デジタルなパルス信号をデータ信号によって変調してくれるモジュールです。ターゲット機のPIC16F18855には1チャネル搭載。変調方式は以下の3種類に対応です。

    • FSK(Frequency-Shift Keying)
    • PSK(Phase-Shift Keying)
    • OOK(On-Off Keying)

といいつつ、ハードウエア的には、信号入力によって2つの搬送波入力ソースのドッチを通すか決めているだけなので、片方をベタロー(OFF)にして片方にパルス波を載せればOOK、周波数の異なるパルス波形を2つの入力に入れればFSK、位相が異なるパルス波形を入れればPSKってな塩梅であります。

信号源、搬送波入力は外部端子以外に搭載の各種ペリフェラルの出力など多数種類から選択することができるので、使い途はいろいろ考えられるじゃないかと。また、信号をソフトウエア制御とすることもできるようです。

搬送波信号への同期など、ハードでないとやりにくい部分はハードウエア制御のオプションがあるので楽です(同期しておいたら「細いヒゲ」みたいな信号は出力されません。ただしタイミングは一拍遅れるかもだけど。)

MCC Classicを使ってコンフィギュレーション

いつものとおりMicroChip社MPLAB X IDEの自動コンフィギュレーションツールMCCのClassic版を使ってソースコードを自動生成します。

DSMを使うためにはDevice ResourcesウインドウでDSMの緑の+印をクリックしてProject ResourcesにDSMを加えます。こんな感じ。DSM_DeviceResources

するとDSMのセッティングが表示されるので、今回は以下のように設定してみました。信号源、High側搬送波、Low側搬送波とも全て外部入力です。また、搬送波に同期オプションにチェックしてみました。DSM0_setting

ピンマネージャを使って端子を設定してみます。例によってターゲットボードのPortAの0から3番端子にはLEDが接続されているので、PortAの0番のみソフトウエアのLチカ用にGPIOのoutputに確保しています。DSMのHigh側キャリアはPortAの4番、Low側キャリアはPortAの5番、そして信号ソースはPortAの6番です。そしてDSMの出力はPortAの7番とな。DSM_setting

上記設定したら「Generate」ボタンを押してソースコードを自動生成してもらいます。

自動生成されたソースに書き込むのはLチカ部分のみ

MCCにより自動生成されるソースにより必要なハードウエア設定が成されてます。main()関数側で最初に初期化のトップを呼び出す(その部分は自動生成されている)くらいでとりたててやることはありません。よって、ソフトでは例のごとくPort Aの0番端子にLチカするのみ。

実験結果

実験にはDigilent製AnalogDiscovery2のロジックパターンジェネレータとロジアナ機能を使ってみました。

まず入力パターンが以下に。Low側搬送波には1.2kHzの方形波。High側搬送波は2.4kHzの方形波としました。それに対して信号波形は200Hzのやはり方形波としています。DSMIN_wave

さて、上記3つの入力パルス波形をDSMに割り当てた端子に入力し、その出力PortAの7番(DSMOUT)を観察したものが以下に。

DSMOUT_wave

みたところFSK変調されているみたい。ちょっと信号加工したら、昔、カセットテープにデータを「録音」していた波形くらい直ぐに作れてしまいそうだな。やらんけど。

PIC三昧(10) NCO(数値制御発振器)を使ってみる、PIC16F18855 へ戻る

PIC三昧(12) FSM(信号測定タイマ)を使ってみる、PIC16F18855 へ進む