PSoC遊び(IQ信号発生器)

この記事は2007/10/30のものです。
PSoC3,4,5が存在しない頃の記事なのでPSoC1をPSoCと記述しています。時の流れを感じますね。

---------------------------------------------------------------------------

◆IQ信号と計測器

 趣味で電子工作を行う者にはとても手が出ない高級なLC(やLCR)メータのほとんどは位相差を持った信号を利用しています。安価な計測器はフランクリン回路の実験ページでもご紹介したLCメータのキットのように共振を利用したものが殆どです。今は販売しておりませんが、秋月で以前販売していたLメータキットは位相信号を利用した回路で貴重な存在だったと思います。自力で復刻された方がおります。(リンク切れで見えなくなりました。。)回路を見ると作りたくなる気持ち分かりますねぇ。

PSoCと出会う

 高精度な部品を使わなくてもお手軽に計測できないものかと考えていたところPSoCと出会いました。手始めにIQ信号を作ってみようと自力で作業し始めたのですがなかなかスマートに作ることができません。そんなある日、こんなアプリケーションノート(Simple Method to Generate Digital Signals with Variable Phase Shift Between AN2345)を発見したので動作確認してみることにしました。

◆裏技じゃないの

 このアプリケーションノートでは2つの8ビットカウンターを使って任意の位相差を作っています。

f:id:jun930:20190614121324j:plain

 たったコレだけの定義で任意の位相差ができるってどういうことでしょうか?そのカラクリは8ビットカウンター特有の動作を利用した裏技のようなものでした。両カウンターのEnable端子がRI0[3]に接続されており、GIE3経由でGOE3に接続されています。更に、何もつながっていないRO0[3]がGOE3に接続され、LogicTableSelectorがFALSEに設定されています。この奇妙な接続が位相差を出す工夫です。

 この接続で普通に8ビットカウンターをスタートしても何も出力されません。プログラムを使ってLogicTableSelectorをTRUEにする必要があります。肝心の位相差を生み出す仕掛けは8ビットカウンターの初期化手順にあります。

void Gen_start(BYTE Phase_shift)
{
   
    Counter8_1_Stop(); //Stop counters
    Counter8_2_Stop();   
	
    RDI0LT1&=0x0F; //LUT false, enable to low, counters ctopped
 	
    Counter8_1_WritePeriod(199); //start first counter with Dyty cycle 50%
    Counter8_1_WriteCompareValue(100); 
    
    Counter8_2_WritePeriod(Phase_shift); //start second counter with phase shift value
    
    Counter8_1_Start(); //Enable counters
    Counter8_2_Start();          
             
    Counter8_2_WritePeriod(199); //start second counter with Dyty cycle 50%
    Counter8_2_WriteCompareValue(100); 
    
    RDI0LT1|=0xF0; //LUT true, enable to high, counters start
}

 この関数は8ビットカウンターに位相差を与える初期化関数です。両カウンターをスタートする手前でカウンター2にシフトするカウント値を設定し、スタート後にカウンター1と同じ周期と比較値を設定します。設定後にLogicTableSelectorをTRUEにします。この操作で2つのカウンターに位相差が発生するんです。なんと!

普通じゃ思いつかないよなぁ・・・  ボソッ

◆やってみる

 手持ちのCY8C27443を使ってやってみました。

f:id:jun930:20190614121402j:plain

ちゃんとずれています。すごい!

◆日本のPSoC自作人口

 PICと比較すると日本におけるPSoCの情報は少ないと感じられます。唯一の教本だった「はじめてのPSoCマイコン」は2007/2/8に絶版になってしまいました。作者のHPにCY8C27443の日本語データシートが公開されています。これはありがたい。