

CY8CKIT-059 Prototype Kitで正弦波を生成
プログラムはトランジスタ技術2013年11月号に掲載された
PSoC5LP_SINGENを使用
PSoC5ボード用だが、少しの変更でCY8CKIT-059でも動く
これはトランジスタ技術 2013年11号で取り上げられたCQ出版社のPSoC 5ボードによる「IIRフィルタで正弦波を発生させる」のトレースですが、ボードにCypressのプロトタイプ・キット CY8CKIT-059を使用した点が違います。
CY8CKIT-059は1500円と廉価なPSoC 5LPのプロトタイプ。ボードです。搭載されているPSoCはCY8C5888LTI-LP097です。
CQ出版のトランジスタ技術ダウンロード・サービス(2013年11号)でPSoC5LP_SINGENをダウンロードしておき、PSoC Creatorを起動してPSoC5LP_SINGENプロジェクトを開いておきます。
シールバッテリ簡易充電回路

DFBでIIRフィルタを構成し、
1MHzでツツいて(サンプリングして)演算結果をDAコンバータに渡す
USB-UARTでPCから発振周波数(100Hz - 50KHz)を
指定できるようになっている
LEDは1秒毎に点滅する
CY8CKIT-059ボードで実行する場合でも
コンポーネントとプログラムの変更は不要
(デバイスとクロック設定に変更が必要)
CY8CKIT-059で動かす場合、デバイスとクロック設定を変更する必要があります。
CQ出版のPSoC5ボードのデバイスは、CY8C5868AXI-LP035ですが、CY8CKIT-059ボードのデバイスはCY8C5888LTI-LP097です。Projectを右クリックし、Device Selectorで変更します。
またPSoC5ボードには24MHzのXTALを搭載していますが、CY8CKIT-059ボードには、XTALは搭載されていません。廉価なボードなので省略されています。このため、システム・クロックのIMO(Internal Main Oscillator)の設定をOSC(内部発信器)にする必要があります。

CY8CKIT-059ボードにはXTALが搭載されていないので
IMOはOSCに変更する必要がある
波形生成の心臓部IIRフィルタはDFB(Digital Filter Block)内のアセンブラのコードで実現されています。DFB自体は積和高速演算器ですが、このアセンブラのプログラムを書きかえればさまざまなフィルタリング処理が実現できるようです。
PSoC5LP_SINGEN(RTOSベースで作られている)は、USB-UARTでCOMポートとしてPCとつなぎ、PCのTera Term等のターミナル・エミュレータで発振周波数(100Hz から50KHz)を指定できるようになっています。
当局ではwindows7でうまくCOMポートが認識してくれないので、今回の実験ではUSB-UARTを殺し(実際にはタスクTask_USBUARTが生成されないようにmain.cで以下のようにコメントアウトしました。)、指定周波数を直接波形生成タスクに書き込むことにしました。周波数を変更するごとにコンパイルし直しですが、数種類の周波数を試すだけですのでまぁいいでしょう。
//xTaskCreate(Task_USBUART,(signed portCHAR *)"USBUART", TASK_STACK_USBUART, NULL, TASK_PRIORITY_USBUART, NULL);
タスクTask_USBUARTが生成されないとタスク間のデータ授受のキューに指定周波数データが入らないのでタスクTask_SINGENは永久に待ち状態になります。
そこでタスクTask_SINGEN内のキューから指定周波数(n)を取り出すための待ち部分(if文)を以下のようにコメントアウトし、nを強制的に入れてやります。
nが100の場合10KHzを発振します。これはサンプリング周波数1MHzを発振周波数で割った値(整数)です。
1000000 / 10000 = 100
50KHz : n = 20
10KHz : n = 100
1KHz : n = 1000
200Hz : n = 5000
Task_SINGENの中
while(1)
{
//
// Found data in Queue?
int32 n;
//if (xQueueReceive(xQueue_PARAM, &n, 0)) //<- コメント・アウト
//{
uint32 i;
double fn, fa1_half, fa2_half, fb;
int32 ia1_half, ia2_half, ib;
int32 ramA[16], ramB[16];
uint32 addr[16];
//
n = 100; //< - 追加 100にすると10KHzを発振
fn = (double)n;
fa1_half = cos(2 * M_PI / fn);
fa2_half = -0.5;
fb = sin(2 * M_PI / fn);
ia1_half = floor(fa1_half * pow(2, 23) + 0.5);
ia2_half = floor(fa2_half * pow(2, 23) + 0.5);
ib = floor(fb * pow(2, 23) + 0.5);
以下省略
//}

50KHz

10KHz

1KHz

200Hz
50KHzでは階段状がすこし目立ちます。
CY8CKIT-059ボードは先に書いたようにメインオシレータにXTALが選べません(搭載していない)ので内部発振器を24MHzで使用する必要があります。このためPSoC5ボードよりは周波数精度が悪いようです。
(JF1VRR)
-
こんばんわ。先日、CY8CKIT-059を購入して全く同じことをしようとしてこの記事を拝見しました。クロックの切換を忘れていました・・・。ありがとうございます。なお、USBですが、電圧がCQ出版のものと違うので、以下のように変えて認識してくれました。
//USBUART_1_Start(0, USBUART_1_3V_OPERATION);
USBUART_1_Start(0, USBUART_1_DWR_VDDD_OPERATION);[ lam*d*_55* ]
2016/5/31(火) 午前 0:08
-
> lam*d*_55*さん 情報ありがとうございました。助かります。(JF1VRR) 2016/6/7(火) 午前 10:15