PSoC 4200 Prototyping Kit (1)

以前から Cypress の PSoC (Programmable System-on-Chip) シリーズには興味があったのですが、PSoC1 の出始めの頃の、プログラマ約 1 万円、別売 C コンパイラ約 3 万円という「割高」なイメージがあって、手を出せずにいました。
最近では「廉価版」の PSoC4 を使った「PSoC 4200 Prototyping Kit」 (CY8CKIT-049-42xx) が秋月価格 600 円で販売されているので手を出してみました。
PSoC4 には 48 MHz で動く Cortex-M0 コアが内蔵されているのですが、「廉価版」だけあって、クロック関係も簡素なもので、内部クロックとしては 48 MHz まで発振可能な高速オシレータと 32 kHz 発振の低速オシレータしかありません。
水晶発振回路も PLL も内蔵されておらず、水晶精度の 48 MHz で動作させたかったら外部に 48 MHz のクリスタル・オシレータを用意しなければなりません。
Prototyping Kit の回路自体も、IC としては PSoC4 の CY8C4245 と USB-シリアル変換チップの CY7C65211 の 2 チップだけで、3 端子レギュレータすら使われておらず、USB VBUS の 5 V をそのまま PSoC4 の電源として供給しています。 (PSoC4 は 1.8 〜 5.5 V の電源で動作可能)
PSoC4 のフラッシュ書き込みは USB-シリアル変換を介して UART ブートローダにより行う方式です。
Prototyping Kit の USB-シリアル変換部の基板と PSoc4 本体部分の基板とは切り離しできる構造になっており、別チップの USB-シリアル変換部と組み合わせて使うことも可能です。
ブレッドボードで実験する場合に USB-シリアル変換部は無駄な面積を取って邪魔なので、さっそく切り離し (写真なし) aitendo の「びんぼうでいいの」に自作ブレッドボード・シールドを組み合わせ、びんぼうでいいのの USB-シリアル変換部だけを利用することにしました。 下に写真を示します。

さっそく、いつもの、DDA (Digital Differential Analyzer) により発生させたサイン波を PWM DA により出力するプログラムを作ってみました。
PWM 部分の「回路」を下に示します。

PSoC4 で PWM を実現するには 2 通りあって、ひとつは「ハード・マクロ」の TCPWM (Timer/Counter/PWM) コンポーネント (PSoc4 には 4 インスタンス内蔵) を利用する方法 (最大クロック周波数 48 MHz)、もうひとつはプログラマブル・ディジタル・ブロックである UDB (Universal Digital Block) 使用の PWM コンポーネントを使う方法です。 (最大クロック周波数 24 MHz)
上の回路では TCPWM コンポーネントを PWM モードで使っています。
インスタンス名」として命名した「PWM0」は、API 関数名のプリフィックスとしても使われ、どのインスタンスに属する関数なのかを示すことになります。
図の下側の「bootloadable」モジュールは、ブートローダを格納するコンテナで、プロジェクトにこれを含ませておかないと以降の UART ブートローダによるフラッシュ書き込みができなくなります。
TCPWM コンポーネントの設定は次のようになっています。


重要な設定は、

  • プリスケーラなし (1x)
  • センターアライン・モードの PWM
  • TC (Terminal Count) 割り込み
  • PWM 周期は 511

で、他の設定は重要ではありません。
PSoC4 は廉価版のため、アナログ・ブロックも縮小されており、汎用性のあるブロックは「CTBm」(Continuous Time Block mini) と呼ばれていて、OP アンプ 2 個 (だけ) から構成されています。
OP アンプは消費電力を 4 段階にプログラム可能で、消費電流を多くすればするほど帯域も延びます。
OP アンプの入出力は特定のピンに直接出すことが可能です。
コンパレータとしての動作モードもあり、コンパレータ出力は内部のディジタル・バスへの出力や、CPU への割り込み信号として使うことも可能です。
OP アンプとは別に、専用のローパワー・コンパレータも 2 個内蔵されていますが、こちらはハードウェアでの「レベル出力」はなく、エッジ検出のパルス出力のみです。
ここでは、OP アンプをボルテージ・フォロア・モードに設定し、Sallen-Key 構成の 2 次バタワース LPF を実現して、PWM DA のポスト・フィルタに使用しています。 下に回路を示します。

青色の線で表されている CR は「外部回路」であり、単なる「回路図」を表現しているだけで、PSoC 内部回路の設定には影響を及ぼしません。
PWM の繰り返し周波数は
48 [MHz] / (512 * 2) = 46.875 [kHz]
フィルタのカットオフ周波数は fc = 4.8 kHz (カットオフ角周波数 ωc = 30 [krad/s]) です。
以上のような設定で発生させたサイン波の波形写真を下に示します。 サイン波の周波数は約 230 Hz です。

サイン波の 1 周期あたり 2 箇所、波形が落ち込んでいる部分が見られます。
その部分を拡大し、PWM 出力と同時に観測した波形を下に示します。

明らかに PWM 波形が乱れている部分が見られます。
これは PWM のコンペア・レジスタが「ダブル・バッファ」構成になっていないことを示しています。
UDB による PWM コンポーネントでは、このような現象は起こらず正常な波形が出ることを確認してあります。
次回は、TCPWM コンポーネントで「ダブル・バッファ」構成を実現して正常な波形を得る「解決編」です。