動かん動かんと困っていたのが、ピンヘッダの接触不良が原因だと分かり、情けなくなったあと、しっかりコンタクトのとれる別のブレッドボードを使って作業を再開いたしました。なんのことはない、ADコンバータ使って電圧を測るサンプル・プログラムの一つと言ってよいでしょう、
サーミスタで温度を測ろう
というのです。困っていたときに回路要素の設定やらAPIの使い方やらは、かなり「エクササイズ」してしまったので、もはや何も見ずに(実際には、エディタの入力補完があるのでAPIを覚えていなくても大丈夫)プログラムを書いてしまいます。とは言え「教科書」はあります。Cypress社の以下のアプリケーションノート
AN66477- PSoC® 3, PSoC 4, and PSoC 5LP – Temperature Measurement with a Thermistor
です。サンプルプログラムもダウンロードできるのですが、ただ、それを動かしても勉強にならないので、アプリケーションノートとAPIのドキュメントを読みながら自分で書いてみようという感じです。
※「IoT何をいまさら」投稿順Indexはこちら
まずは、アプリケーションノートのパクリで書いた回路図を。とは言え、中身で設定している値は、適当に自分勝手に決めたもの。
まず電圧を与える8ビットVDACは「ひと目盛り」4mVがデフォルト設定だったので、
250目盛り
つまり
1000mV
にいたしました。ぶっちゃけ、外で電圧測るときにキリが良くて分かり易い、というだけの理由。その出力にボルテージフォロワが接続されていますが、これを接続していて気付いたことが一つ。ADなどどこの端子から入力するかは結構自由度があるのですが、こと
オペアンプの出力を出す端子は既定
です。幾つか搭載されているどのオペアンプを使うかで端子決まってしまうので、最初に
Design Wide Resourcesの中のAnalog
の接続図をよく確認しておくべきだと思いました。オペアンプ出力のVhi端子の位置がキメウチで決まってしまうので、それ以外の端子2つは、近い並びの端子に適当に割り振りました、後で外でつなげやすいように。アナログマルチプレクサに繋ぐ場合は、かなり自由度がとれるようです。そしてアナログマルチプレクタは差動モードに設定。その先に、デルタシグマ型のADCを接続しました。アプリケーションノートでは、フル20ビット設定でしたが、「適当に」16ビットに設定。とりあえず電圧で動作確認しておこうと思うので、16ビットあれば十分でしょう、というお手軽さ。
ADCの動作モードは「マルチサンプル」にしました。マルチプレクサで測定する組み合わせを切り替えながら、3点間の電圧を順次測るから。
-
- サーミスタの両端の電圧
- 参照抵抗の両端の電圧
- サーミスタと参照抵抗の間の点の同じポイント
1と2は分かりますが、3番目のやつは、同じ点なので電位差は無い筈。しかし、ADCのオフセット電圧やノイズなどを評価するのに使えるのでした。その辺のやり方はCypressのまた別なアプリケーションノートに書いてあるようですが、今回は、素の電圧測るところまでのつもりなので、そこはまた今度。
割り振った端子(勿論、ちゃんとブレッドボードにコンタクトとれている)に接続したサーミスタの写真がこちら。
一番上に見えているのが、PSoC 5LP Prototyping Kit, CY8CKIT-059です。邪魔な赤の配線(電圧を外部で測るため)で見難いですが、KITからの白い線が3端子から引き出してきたもの。電圧高い方から左から順番に。
一番手前、ちょっとピンボケ気味な青の小さな頭がサーミスタの本体です。細いエナメル線の先についているので、そのままではブレッドボードに繋ぎにくい。そこでネジ止め式の端子台にエナメル線の先を噛ませてコンタクトをとりました。こういう時にねじ止め式は便利。
前回、トラブったせいで、今回の起動は簡単。
まずはデバッグ用のUARTの先に毎秒、ADCの素のカウント値を出力させてみました。Ch0が、サーミスタ両端、Ch1が参照抵抗の両端、どちらもほぼ10KΩなので、似たような数字。Ch2は本来0になる筈の同じ電位を差動対に突っ込んでいるところ。やはり微妙なエラーが乗っていることが分かります。
せっかくのサーミスタなので、ちょっと抵抗を変えてみます。といって指でサーミスタを「温めて」みただけです。Ch0のカウント値が2000以上も少なくなりました。ちゃんと動作しているようです。
APIを調べると、カウンタ値を電圧に変換する関数が用意されていたので、それを使って変換してみます。するとこんな感じで電圧が分かる。
本当に電圧正しいのだよね、ということで念押しで、外で測ってみたものを並べてみました。左側の数値が仮想端末上の出力Ch0は501mVとか出力されています。右側の画面はCh0の電圧をひろった「オシロ」画面。カーソル合わせたところが503mVくらい。ま、こんなもんでしょうか。次回は、これを温度に換算したりしないと。