編集履歴一覧に戻る
yusufuのアイコン画像

yusufu が 2020年04月29日18時31分38秒 に編集

コメント無し

タイトルの変更

-

PSoC4で電圧計を作る話

+

PSoC4で抵抗計を作る話

タグの変更

-

ADコンバータ

-

付録

-

バッファ回路

本文の変更

-

# 経緯 電子工作をおも手軽と思いトラジス技術2019年5月号TSoChttps://toragi.cqpub.co.jp/tabid/902/Default.aspx) を購入しました。現在手元にはオシロスコープもファンクションジェネレータもないので、TSoCが代わりになればと思い、とりあえず電圧計を作ってみました。

+

# PSoCとは 一言でいと「パソコン内リアルはんだ付けできるIC」です。パソコンの画面上で設計した回路がそのままICの中に作りこまれて動作します。 IC内にはオペアンプやコンパレータADコバーなどアナログコンポーネントが内蔵されており、回路を設計するだけで、内部で結線されIC内で動き出します。まさに自分だけのアナログICです。 - [PSoCについて](https://elchika.com/article/ba2c51ef-4a54-4fa9-bb44-53a42ac316c2/)

# 回路構成 12bitのADコンバータの入力の前段にバッファ回路を挟み、電圧を読み取ります。このようにすることで入力ピンのインピーダンスが大きくなり、測定対象の回路に影響なく電圧を図ることができます。またPSoCのADコンバータの入力インピーダンスが小さいので、正確にデジタル変換するためにはこのようにする必要があります。

-

この回路のDAコンバータは電圧を正確に読み取りきているか確認するため信号源です。IDAC7で電流を発生させ外付けの抵抗で電圧降下作っています。なの電圧計にはI×Rの電圧現れます。 AD変換からのカウント数UARTのTXを用いてPCに送信しています。

+

DAコンバータ既知電流を出力し抵抗で生じた電圧読み取ること抵抗値を読み取ることできます。 AD変換からのカウント数UARTのTXを用いてPCに送信しています。

![キャプションを入力できます](https://camo.elchika.com/8b5841c90fe50d2e61bd48cae54dd0b4f5a19e72/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65313235393434392d666531612d343733632d626362372d6263663830656337626139622f34376335373939352d626666352d346463332d386265322d346133633031323265366431/) # 使用するコンポーネント - オペアンプ オペアンプはModeでフォロワーを選択するとボルテージフォロワ(バッファ回路)の配線に自動で変化します。もちろんオペアンプモードのまま自分でボルテージフォロワを組んでも大丈夫です。今回はバッファ回路として利用するのでフォロワを選択します。 またOutputではオペアンプ出力をピンに出力する場合はOutput to pinを選択し、ピンに出力しない場合はInternal onlyを選択します。今回はピンに出力しないのでInternal onlyを選択します。

-

そのほか位相補償用のコンデンサの容量等を選択できます。

+

![キャプションを入力できます](https://camo.elchika.com/e2a8ff22f2299be31321b97c3c19bf66ad0a220f/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65313235393434392d666531612d343733632d626362372d6263663830656337626139622f35393065303762392d383562342d343764312d383265312d316361656461366236363038/) - ADコンバータ

-

--Timing サンプリングレートを設定できます。今回は直流を試験的に計測するので最遅の1Mサンプリングに設定しています。 --Clock source ADコンバータのクロックの信号源を内部のものを利用するか外部から与えるか選択できます。外部から与える利点がくわからないのでInternal(内部)を選択します。 --Sample mode ADコンバータのサンプリングが常動き続ける(Free running)かトリガで作動する(Hardware trigger)かを選択できます。今回はトリガをかけて使用しないのでFreerunningを選択します。 --Input range 参照電圧やシングルエンドモードで使用するときの基準電圧を選択できます。 Vrefは外付けのコンデンサを実装しないと選べないものがあるため、今回コンデンサなしで使用できるVDDAかVDDA/2を選択しま。VDDAはPSoCの電源電圧です。 ADコンバータを差動で使用す場合は端子間の電圧がVDDA(またはVDDA/2)なり、シングルエンドで使用する場合は入力電圧範囲が0-VDDA(または0-VDDA/2)となります。 入力電圧範囲を小さくとると12bit(2048等分)の1目盛りが小さくなるので分解能が向上します。 ※供給電圧が5Vでもconfigureでは3.3Vと表示されます。しかし内部ではちゃんと5Vと認識してるようです。 --Result data format ADコンバータの出力結果の様式を設定することができます。差動モードの場合は出力をunsignedかsignedを選ぶことができますが、シングルエンドモードの場合はsignedで固定です。 Sample avaragedはサンプルの平均をくつのデータで行うかを設定できます。ConfigureのChannelsでAVGにチェックを入れる使用できます。 Alternate resolutionは初期の12bitで使用しな場合のbit数を設定できます。ConfigureのChannelsでResolutionをALTに設定すると使用できます。

+

り正確するため平均化ます。

![キャプションを入力できます](https://camo.elchika.com/a02aff6d3c8ff26304079f215e8f88ef46e5c57b/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65313235393434392d666531612d343733632d626362372d6263663830656337626139622f38623562346363362d343534372d343536332d626638362d313431616530326630656161/) ![キャプションを入力できます](https://camo.elchika.com/24788157c6513451c329838a796ae28e63c63b11/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65313235393434392d666531612d343733632d626362372d6263663830656337626139622f35313337643465612d326662652d346538642d393738372d343162303732643061373434/) - DAコンバータ

-

ADコンバータが正確に動作しているかを確認するためにDAコンバータから電流を流します。ValueとRangeで電流量を決めることができます。今回は153.6μAの定電流源としています。

+

今回は153.6μAの定電流源としています。

![キャプションを入力できます](https://camo.elchika.com/dbf76035bac6adf639473ad44baea0993dadaa6d/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65313235393434392d666531612d343733632d626362372d6263663830656337626139622f65396531656262312d643639642d346230622d613565642d323739343965623965393964/) - UART

-

PCのUSBを通して信号を送信するにはUARTを使用します。送信する際はTXを使用するのでDirectionをTXonlyとしてそのほかのパラメータは画像のように設定します。Baud rateはいくつでもオッケーです。

+

PCのUSBを通して信号を送信するにはUARTを使用します。送信する際はTXを使用するのでDirectionをTXonlyとしてそのほかのパラメータは画像のように設定します。

![キャプションを入力できます](https://camo.elchika.com/89d04c7c9353daea72369681bfbd77ddadb9d2db/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65313235393434392d666531612d343733632d626362372d6263663830656337626139622f32323131616534342d363730662d343731392d383434332d396662386163333361313363/) # プログラム ```:main.c /* ======================================== * * Copyright YOUR COMPANY, THE YEAR * All Rights Reserved * UNPUBLISHED, LICENSED SOFTWARE. * * CONFIDENTIAL AND PROPRIETARY INFORMATION * WHICH IS THE PROPERTY OF your company. * * ======================================== */ #include "project.h" #include <stdlib.h> int main(void) { CyGlobalIntEnable; /* Enable global interrupts. */ /* Place your initialization/startup code here (e.g. MyInst_Start()) */ uint32 adc = 100000; int16 ai0 = 0; char aistr[] = " "; char *aiout; aiout = aistr;

-

+

//各コンポーネントをスタートさせる

ADC_SAR_Seq_1_Start(); UART_1_Start(); ADC_SAR_Seq_1_IRQ_Enable(); ADC_SAR_Seq_1_StartConvert(); IDAC7_1_Start(); Opamp_1_Start(); for(;;) {

-

+

//adcが0になるたびにPCに結果を出力

adc--; if (adc == 0){

-

ai0=ADC_SAR_Seq_1_GetResult16(0); utoa(ai0,aiout,10);

+

ai0=ADC_SAR_Seq_1_GetResult16(0);//ADCのカウント数をsignedで取得 utoa(ai0,aiout,10);//カウント数を文字列に変換 //文字列をPCに送信

UART_1_UartPutString("Count::"); UART_1_UartPutString(aiout); UART_1_UartPutCRLF(1);

-

//UART_1_UartPutString("\r\n");

+

adc = 100000; } /* Place your application code here. */ } } /* [] END OF FILE */ ``` ## PC側の設定 TXからくる信号はTeraTermを使用しました。TeraTermでPSoCのCOMを選択し、設定→シリアルポートの設定をUARTと同じにすると文字化けせず表示することができます。 ![キャプションを入力できます](https://camo.elchika.com/aa607d9557137da133c8bfd74dbf0e718f771383/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65313235393434392d666531612d343733632d626362372d6263663830656337626139622f62376266313036362d386333662d346335332d613639622d626634313632643739376337/)