学生向けPSoCワークショップ

2012/02/25

PSoC3 PSoC5

2月14日に行われた学生向けPSoC3ワークショップに参加してきました。
無料配布の開発キットCY8CKIT-030も目的のひとつです。

ワークショップの内容は、PSoC3の基礎的な使い方で、
  • Lab1-1 PSoC Creatorの使い方
  • Lab1-2 PWM
  • Lab1-3 GPIO操作
  • Lab1-4 割り込み
  • Lab2    AD変換
という感じです。

開始時間が遅れたにもかかわらず、参加者の飲み込みが早いのか、1時間ほどメニューを早く消化してしまい、もともとあった自由時間は2時間になりました。

自由時間にはCapSenseの使い方の話と、(ET2011で話したらしい?)PSoC3/5の高精度アナログに関するクイズがありました。
アナログの話は、時間不足で最後まで説明が聞けなかった部分があるので、補足を兼ねてここに書いておこうと思います。

問題は以下のようなものです。
  • 「1KΩの負荷をつないだポートに1024mVを正確に出力せよ」
単純に考えれば、以下のようにPSoCのモジュールを配置すればよいはずです。
単純な回答例
うまくいかない例
実はこのときに出力される電圧は、使用するポートによって変わります。
特殊なポートを使わない限り、オペアンプの出力とVoutの間には、いくつかのアナログスイッチが入っていて、その抵抗は数100Ωになります。
そのため、Voutの電圧は1kΩとアナログスイッチの抵抗で分圧されたものになってしまい、500mV程度など、1024mVにはほど遠い値が出力されます。

解その1
こちらは単純です。
出力に使うオペアンプモジュールがアナログスイッチを介さず直接つながっているピンをデータシート、Technical Reference Manual等を参考に探し出し、そこにつないでしまえばおしまいです。
具体的にはP0.0, P0.1, P3.6, P3.7を使えばよいです。
これらの出力ピンを指定すると、4つあるオペアンプモジュールのうち適当なものをアナログルータは自動で選択してくれるようです。

解その2
こちらはPSoC3/5の内部をよく知らないとできない方法で、任意のピンに対して有効です。
最適なアナログ配線を手で行うのが肝になります。

PSoC CreatorにはManual Routingというモジュール群があります。
Manual Routingモジュール
今まで使う場面もなく、機能も把握していなかったのですが、機能は以下のようになっているようです。
  • Net Join: 2つの配線の相互接続
  • Resource Constraint: 使う内部配線の指定
  • Resource Reserve: 内部配線の予約(自動配線から除外)
  • Stay Awake: スリープ時にも生かしておく配線の指定
  • Terminal Reserve: モジュールの端子を予約(自動配線から除外)
上の2つは、アナログルータに望んだ配線をさせる、下の3つはアナログルータによる配線を禁止するなどして、レジスタから直接アナログ部にアクセスする場合に有用な機能です。

また、Design Wide ResourceのDirectivesを使うと、内部にいくつかある同じモジュールのうちどのモジュールを使うかを制限することができます。
PSoC Creatorのヘルプに詳しい使い方が書いてあります。

これらを使って、Voutになる端子とオペアンプの反転入力を直接つなぎ、きちんとフィードバックがかかるようにしたのが以下の図になります。

内部の配線を手動で指定
使うオペアンプモジュールを指定
手動で内部配線を指定することで、きちんとフィードバックがかかるようになり、1024mVが出力されるようになりました。

PSoC1と3/5とを比べると、アナログのパズル的な要素はだいぶ減った印象はありますが、内部にある大量のアナログスイッチとアナログルータのおかげで直接は目につかないだけで、性能を引き出そうとすると内部構造がどうなっているかをきちんと考えなくてはならないようです。

今回のセミナでは、長い自由時間に気になっていたことを質問できたり、何回か参加したPSoCセミナの中ではかなり満足できるものでした。
PSoC5で似たようなセミナが行われれば、ぜひ参加したいところです。