TL431で定電流ソース

TL431で低抵抗測定用10mA定電流源では、定電流シンク回路の検討をしました。今回は、この定電流シンク回路にカレントミラーを追加して定電流ソースとした回路のLTspiceシミュレーションをしました。

001_20090928223855.png 002_20090928223854.png


TL431で定電流シンク


TL431で低抵抗測定用10mA定電流源では、TL431を用いて定電流シンク回路が簡単に作れると書きました。


004_20090925235228.png


TL431で定電流ソース


TL431で作った引き込み電流をカレントミラーでコピーすれば、定電流ソースとすることができます。

カレントミラー回路はトランジスタを2石つかって、片方の経路の電流を他方の経路にコピーするような動作をします。エミッタフォロワのベース同士を接続したものと考えれば挙動を理解しやすいと思います。

TL431を用いた定電流ソース回路をLTspiceを用いてシミュレーションしました。TL431のSPICEモデルは、テキサスインスツルメンツのものを利用しました。
電源電圧5Vとし、負荷RLの大きさを変化させて定電流特性が維持されるかを確認しています。


001_20090928223855.png
fig.1: 定電流ソースのスケマティック

002_20090928223854.png
fig.2: 負荷(RL)電流(緑)、コピー元の電流(青)


負荷が大きくなるにつれて、定電流特性が維持できなくなっていることが読み取れます。特に500Ω前後から、大きく理想特性から離れています。

TL431で低抵抗測定用10mA定電流源にも同様のことが言えますが、電源電圧によって定電流を維持できる負荷の大きさが変わってくるので注意が必要です。

関連エントリ




参考URL




フィードバック



にほんブログ村 その他趣味ブログ 電子工作へ

 ↑ 電子工作ブログランキング参加中です。1クリックお願いします。


コメント・トラックバックも歓迎です。 ↓      


 ↓ この記事が面白かった方は「拍手」をお願いします。

tag: LTspice トランジスタ TL431 定電流 カレントミラー 

TL431で低抵抗測定用10mA定電流源

TL431の内部ブロック図を眺めていたら、低抵抗測定用10mA定電流源と構成が似ていることに気がつきました。
そこで、TL431をつかって低抵抗測定用10mA定電流回路を設計しました。(実際には極性が逆で、以前の定電流回路はシリーズレギュレータっぽい挙動、一方でTL431はシャントレギュレータっぽい挙動です。)

002_20090925235238.png 003_20090925235238.png


TL431と定電流回路


TL431の内部ブロック図をfig.1に示します。


001_20090925235228.png
fig.1: TL431の内部ブロック図


基準電圧源と誤差増幅器が接続されていて、NPNトランジスタを駆動している回路と考えれば、この回路は、100mA定電流源の回路図と似ています。


002_20090416005732.png


この定電流回路の構成は、居酒屋ガレージ日記さんの低抵抗測定用10mA定電流源です。負荷が低抵抗であるとき、すなわち電流を流したときの電圧降下が小さいときは、TL431と抵抗だけで定電流回路が作れることに気がつきました。

低抵抗測定用10mA定電流源


TL431と抵抗だけで構成した10mA定電流回路のLTspiceシミュレーションをfig.2-3に示します。


002_20090925235238.png
fig.2: TL431使用低抵抗測定用10mA定電流源のスケマティック

003_20090925235238.png
fig.3: R2の抵抗値(横軸)、R2の両端の電圧降下(緑)、R1の電流(青)


TL431のSPICEモデルはテキサスインスツルメンツのものを利用しました。

利点と欠点


定電流回路は多くの場合、基準電圧源とシャント抵抗の電圧降下を比較することによって成り立っています。TL431は、こういった基準電圧源として最もポピュラーなICのひとつですが、今回の回路では、TL431自身にエラーアンプの役割を担わせているため部品点数を削減することができます。

一方で、シャント抵抗の両端の電位差が必ず2.5Vとなってしまうと言う制約があります。こういった理由から、可変電流源のアプリケーションには適さないと思います。
電流値の微調整は、シャント抵抗の大きさを微調整することによって可能です。とはいえ、もともと基準電圧用ICなので、そこそこの精度のシャント抵抗を用意して、無調整で使うぐらいがよいのではないでしょうか。

定電流シンク


テキサスインスツルメンツのTL431のデータシートを最後の方まで見ていくと、NPNトランジスタを1石追加した定電流シンクが載っています。


004_20090925235228.png
fig.4: データシートの定電流シンク


この回路では、TL431でレギュレーションしなければならないのがNPNトランジスタのベース電流だけなので、R1を小さく大きくすることができます。

内部ブロック図レベルの理解でも、思わぬところでICが使えて、回路を簡略化することが出来ることがあります。よく使われるICはさすがによくできていると考えさせられました。

関連エントリ




参考URL




フィードバック



にほんブログ村 その他趣味ブログ 電子工作へ

 ↑ 電子工作ブログランキング参加中です。1クリックお願いします。


コメント・トラックバックも歓迎です。 ↓      


 ↓ この記事が面白かった方は「拍手」をお願いします。

tag: LTspice 定電流 TL431 

PSoCの正弦波出力をFFT

PSoCの正弦波出力波形に対してFFTをおこない、階段状のノイズの周波数スペクトルを求めました。

001_20090924234832.png 002_20090924234832.png


PSoCでLED正弦波駆動


PSoCは、デジタルブロックで生成した方形波をアナログブロックで構成されたスイッチトキャパシタバンドパスフィルタを通すことにより、外付け回路無しで正弦波を生成することができます。参考:PSoCでLED正弦波駆動

しかしながら、スイッチトキャパシタフィルタを通したフィルタは細かく見ると階段状になっているのが分かります。PSoC/GPIOのしきい値とヒステリシスPSoC/GPIOのしきい値と電源電圧では、この階段状のノイズを取るために、抵抗とコンデンサで構成したローパスフィルタを使いました。


001_20090924234832.png
fig.1: PSoC正弦波出力波形(赤)とRCローパスフィルタを通したもの(緑)


ExcelでFFT


PDS5022SとExcelで高速フーリエ変換では、方形波の測定波形の周波数スペクトルをExcelを用いた高速フーリエ変換(FFT)を用いて行いました。

今回は同様に、PSoCの正弦波出力に対してFFTを行い、周波数スペクトルを求めました。


002_20090924234832.png
fig.2: 出力波形のFFT(赤)とLPF後のFFT(緑)


関連エントリ




参考文献




フィードバック



にほんブログ村 その他趣味ブログ 電子工作へ

 ↑ 電子工作ブログランキング参加中です。1クリックお願いします。


コメント・トラックバックも歓迎です。 ↓      


 ↓ この記事が面白かった方は「拍手」をお願いします。

tag: PSoC PDS5022 FFT スイッチング回路 スイッチト・キャパシタ 

PDS5022SとExcelで高速フーリエ変換

オシロスコープPDS5022SとExcelを用いて、回路の測定結果に対してフーリエ変換を行い周波数スペクトルを求めることができます。
本エントリでは、単電源三角波/方形波発振回路で生成した方形波の周波数スペクトルをもとめました。

001_20090908015052.png 001_20090918013724.png 002_20090918013723.png


Excelの分析ツール


PDS5022SとExcelでヒステリシス曲線では、PDS5022Sで取得したデータをPC上のExcel編集してグラフを描画する方法を書きました。

今回は同様にして、取得データに対してFFTを行います。
Excelを用いた具体的なFFTの方法は、(有)ゴッドフット企画さんエクセルを用いたフーリエ変換(FFT)の記事で解説しています。窓関数のかかっていない(矩形窓の)フーリエ変換です。

オシロスコープPDS5022Sで取得したデータに対してFFTをする際には、データ点数を4096個とします。
タイムスパンをどのようにとっても、使えるサンプリング数は変わらないので、見たい周波数近辺の分解能を上げるためには少しコツが必要です。
オシロスコープでデータを取得する段階で、長時間データを取るほど低周波側の分解能があがり高周波側の分解能が下がります。

方形波のFFT


実際にPDS5022SとExcel(とgnuplot)で描いた周波数スペクトルをfig.1に示します。


001_20090918013724.png
fig.1: 実測データから作成した周波数スペクトル


測定した方形波は、単電源三角波/方形波発振回路で生成しました。
周波数スペクトルの比較用にLTspiceによるシミュレーション結果をfig.2に示します。


002_20090918013723.png
fig.2: LTspiceによる周波数スペクトルのシミュレーション


シミュレーションモデルは、LTspiceで三角波/方形波発振回路のタイムスパンを一部変更したものをつかいました。


001_20090908015052.png
fig.3: 実測した回路の回路図

003_20090907230309.png
fig.4: LTspiceシミュレーションのスケマティック


関連エントリ




参考URL




参考文献




フィードバック



にほんブログ村 その他趣味ブログ 電子工作へ

 ↑ 電子工作ブログランキング参加中です。1クリックお願いします。


コメント・トラックバックも歓迎です。 ↓      


 ↓ この記事が面白かった方は「拍手」をお願いします。

tag: LTspice PDS5022 FFT 

PDS5022SとExcelでヒステリシス曲線

以前LTspiceでシミュレーションを行ったシュミットトリガ回路のヒステリシス曲線を描くことを例に、秋月の激安オシロPDS5022とExcelでヒステリシス曲線を描く方法について書きます。

001_20090914003148.png 002_20090914003147.png 001_20090325074314.png 002_20090325074314.png


PSoC/GPIOのヒステリシス


PSoC/GPIOのしきい値とヒステリシスでは、PSoCの入力バッファのヒステリシス特性を測定しました。
このときにデジタルオシロPDS5022SとMicrosoft Excelとgnuplotを使ってヒステリシスのグラフを書きました。

今回は、LTspiceでシュミットトリガ回路のバイポーラトランジスタで組んだシュミットトリガ回路を例にヒステリシス曲線の書き方についてのエントリです。

発振回路と被測定回路の準備


まずは、発振回路と被測定回路の準備をします。被測定回路は前述のとおり今回はLTspiceでシュミットトリガ回路を使います。

発振回路としては、単電源三角波/方形波発振回路を使います。ただし、そのままでは発振周波数が高すぎるので定数を変更して、1Hz程度の周波数としました。
また、被測定回路の入力インピーダンスが低く、三角波発振回路のドライブの力も高くないので、出力にもう一段LMC6482でつくったボルテージフォロワを挿入しました。

最終的な回路はfig.1のとおりです。トランジスタは2SC1815GRで、電源電圧は5Vとしました。


001_20090914003148.png
fig.1: 測定回路の構成


測定時の注意点とデータ処理


測定は、CH1をTraiangleへCH2をOutputへ接続します。
注意点はトリガを「normal」または「single」とすることです。「auto」だと時間分解能が減ります。

通信は付属のPCソフトで行えます。「View」→「Data Table」→「Save as...」といけばデータをExcel形式のファイルとして保存することができます。
ここまでできれば、後はデータをいじり放題です。今回は単純にCH1を横軸に、CH2を縦軸に散布図を描けばよいです。

シミュレーションとの比較


結果とLTspiceのシミュレーションを比較します。


002_20090914003147.png
fig.2: 実測結果

002_20090325074314.png
fig.3: シミュレーション結果

001_20090325074314.png
fig.4: シミュレーションのスケマティック


この方法について


今回は、シュミットトリガバッファのヒステリシス特性を低周波発振器とオシロスコープで測定する方法を書きました。
ただし、きちんとやりたい場合は直流電圧源とデジタルマルチメータで測定しなければなりません。

関連エントリ




参考文献




フィードバック



にほんブログ村 その他趣味ブログ 電子工作へ

 ↑ 電子工作ブログランキング参加中です。1クリックお願いします。


コメント・トラックバックも歓迎です。 ↓      


 ↓ この記事が面白かった方は「拍手」をお願いします。

tag: PDS5022 シュミットトリガ LTspice 

単電源三角波/方形波発振回路

秋月でレールtoレールOPアンプLMC6482が安価に入手できるようになったので、ブレッドボード上に単電源三角波/方形波発振回路を作成しました。

001_20090908015052.png 002_20090908015051.jpg 003_20090908015051.png


三角波/方形波発振回路


単電源で動作する三角波/矩形波発振回路の回路図をfig.1に示します。


001_20090908015052.png
fig.1: 回路図


LTspiceで三角波/方形波発振回路では、この回路をLTspiceでシミュレーションしました。


002_20090908015051.jpg
fig.2: ブレッドボード上の回路


実測波形


PDS5022Sで実測した波形を示します。


003_20090908015051.png
fig.3: 実測波形


比較用に、LTspiceで三角波/方形波発振回路のシミュレーションを再掲します。


001_20090907230243.png
fig.4: スケマティック

002_20090907230242.png
fig.5: グラフ


関連エントリ




付録


このエントリで使用したBSch3V形式回路図ファイルと測定データファイルを添付します。ファイル名末尾の".txt"を削除して、"_"を"."に変更すれば使えるはずです。


参考文献/使用機器




フィードバック



にほんブログ村 その他趣味ブログ 電子工作へ

 ↑ 電子工作ブログランキング参加中です。1クリックお願いします。


コメント・トラックバックも歓迎です。 ↓      


 ↓ この記事が面白かった方は「拍手」をお願いします。

tag: OPアンプ LTspice 三角波 ブレッドボード 

LTspiceで三角波/方形波発振回路

三角波を作る回路として、ヒステリシスコンパレータと積分回路をリング状にしたものが有名です。単電源で実現することを目標にLTspiceでシミュレーションしました。

001_20090907230243.png 002_20090907230242.png


三角波発振回路とヒステリシス曲線


PSoC/GPIOのしきい値とヒステリシスPSoC/GPIOのしきい値と電源電圧では、オシロスコープと発振回路を用いて、ヒステリシス特性曲線を描きました。これらのエントリでは、PSoCでLED正弦波駆動の正弦波を流用できたので、信号源として正弦波を用いましたが、他の一般的なデジタルバッファのしきい値を調べるためには、信号源として三角波発振回路を用意する方が向いているでしょう。

三角波/方形波発振回路の構成


三角波を発生させる回路として、ヒステリシスコンパレータと積分回路をリング状にしたものが有名で、趣味の電子工作三角波発振器などいろいろなところで紹介されています。
この回路は、同一周波数の三角波と同位相の方形波を同時に取り出せるので便利です。
fig.1-2にLTspiceを用いたシミュレーションを示します。


001_20090907230243.png
fig.1: 三角波/方形波発振回路のスケマティック

002_20090907230242.png
fig.2: 三角波/方形波発振回路の出力波形


この回路の発振周波数は、以下の式で計算できます。

f = \frac{1}{4C_{1}R_{1}} \left( \frac{R_{2}}{R_{3}//R_{4}} \right)


発振周波数は電源電圧に依存しませんが、出力電圧振幅はV(ref)に対して対称である必要があります。多くの汎用OPアンプは出力電圧振幅が上下対称なので、V(ref)=0VとしVEE=-VCCと両電源で使うと上手くいくはずですが、LM358のように出力振幅が電源電圧に対して非対称な例外もあるので注意が必要です。

出力振幅がV(ref)に対して非対称の場合は、最悪発振しません。R3//R4を小さく採れば、発振させることができるかもしれませんが、三角波の傾きや矩形波のDuty比が非対称になります。


003_20090907230309.png
fig.3: LM358を用いた三角波/方形波発振回路のスケマティック

004_20090907230308.png
fig.4: LM358を用いた三角波/方形波発振回路の出力波形


fig.3-4では、LM358の出力振幅にあわせてV(ref)=2.0Vとしたシミュレーションを行いました。LM358のモデルはナショナルセミコンダクタのものを利用しました。

レールtoレールOPアンプ LMC6482


実際に単電源で三角波/方形波発振回路を作る場合は、入出力レールtoレールOPアンプを利用することになると思います。問題が出力電圧の対称性だけなら、LMC662等の出力のみがレールtoレールのOPアンプでもよいのですが、U1はコンパレータ動作のため、非反転入力端子にはfig.2のV(niv)のような電圧がかかります。

このように、三角波/方形波発振回路は、使用するOPアンプに対して出力振幅の対称性だけでなく、同相入力電圧範囲と出力電圧範囲が同じであることも、暗黙のうちに要求しています。
したがって、この回路を単電源で使用する場合は、出力振幅・同相入力電圧範囲がともに大きく取れる入出力レールtoレールOPアンプが必要になります。(まあ、現実的にはコンパレータとして動作させるだけなので、LMC662でもちゃんと発振するでしょうが。)

最近、秋月電子通商で2回路入りの単電源レールtoレールOPアンプLMC6482が売られるようになりました。次回のエントリでは、これで単電源三角波/方形波発振回路を作ります。

関連エントリ




参考URL




付録


このエントリで使用したLTspiceのシミュレーション用ファイルを添付します。ファイル名末尾の".txt"を削除して、"_"を"."に変更すれば使えるはずです。


参考文献/使用機器





フィードバック



にほんブログ村 その他趣味ブログ 電子工作へ

 ↑ 電子工作ブログランキング参加中です。1クリックお願いします。


コメント・トラックバックも歓迎です。 ↓      


 ↓ この記事が面白かった方は「拍手」をお願いします。

tag: OPアンプ LTspice 三角波 

PSoC/GPIOのしきい値と電源電圧

PSoC/GPIOのしきい値とヒステリシスではPSoCのGPIOのしきい値電圧をVdd=5.0Vの条件で測定しました。
今回は、電源電圧を可変することによりしきい値電圧に変化が見られるかの測定を行い、上下のしきい値ともに電源電圧に対する直線的な依存性があることが分かりました。

001_20090907021706.png 004_20090907021705.png


CMOSインバータのしきい値と電源電圧


PSoC/GPIOのしきい値とヒステリシスのエントリのコメント欄でのりたんさんに以下のような指摘をいただきました。

記事で提示されていたデータシートのVIL/VIH測定条件にこんな記述があります。

Vdd = 3.0 to 5.25

普通のCMOSインバータだと、Vddの値の影響を直接受けるので、いつでもTTLレベル入力というわけにはいかなくなります。そのため、74HCTシリーズの電源電圧は、TTLと同じ5V+/-10%と定められています。もし、Vddに依存しないようにVTL/VTHを定めようとすると、定電圧源とコンパレータで構成される、かなり重い回路が必要です。
もし、余力がありましたら、VddとVTL/VTHの関係も見てくださいませ。


前回のエントリでは、電源電圧Vdd=5Vさえ測定しておけば、他の電源電圧でも当てはめて考えることができると考えていましたが、電源電圧に依存してGPIOの入力しきい値が変化する可能性がでてきたため、追試を行いました。

測定回路の構成


PSoC/GPIOのしきい値とヒステリシスと同様、以下の回路構成で行いました。


001_20090907021706.png
fig.1: 測定回路構成


PSoCのGlobal Resourcesは、以下のように設定しました。

Power Setting [Vcc / SysClk freq] : 3.3V/24MHz
Trip Voltage [LVD (SMP)] : 2.92V (3.02V)

電源電圧は、3.0V,3.3V,3.6V,3.9V,4.2V,4.5V,5.0V,5.5Vとしました。
(5.5Vは動作定格外でした。やってから気づきました。)

電圧測定にはPDS5022Sを、電源はHP6632Aシステム電源を用いました。
データの解析には、Microsoft Excelとgnuplotを用いました。

ヒステリシス曲線


測定結果を以下に示します。


003_20090907021733.png
fig.2: ヒステリシス曲線


fig.2より、しきい値電圧が電源電圧に依存していることが分かります。


002_20090907021733.png
fig.3: ヒステリシス曲線(Vdd=3.0V)


fig.3は電源電圧が3.0Vの条件のヒステリシス曲線を抜き出したものです。スレッショルド電圧付近でもノイズが大きく、上下のしきい値がそれぞれ一意に読み取ることができません。
VTL/VTHの代表値として、それぞれ出力遷移前の最小値/最大値を選びました。

しきい値の電源電圧特性


fig.4にしきい値の電源電圧特性を示します。
しきい値と電源電圧の間に線形関係が見えました。


004_20090907021705.png
fig.4: しきい値-電源電圧特性


測定データに対して線型方程式の最小二乗法フィッティングを行ったところ、以下の係数が得られました。

VTL = 199.606 * Vdd + 511.626
VTH = 190.739 * Vdd + 713.202

ただし、VTL,VTHの単位は[mV]で、Vddの単位は[V]です。

ヒステリシスの電源電圧特性


VTHとVTLの差から求めたヒステリシス電圧VHの電源電圧特性をfig.5に示します。


005_20090907130344.png
fig.5: ヒステリシス電圧-電源電圧特性


ほぼすべての電源電圧範囲で、ヒステリシス電圧VHは160mV前後でした。
ただし、まともな議論をするには電圧分解能不足です。
誤差棒として±1LSBをつけました。これは、誤差が1LSB以内であると言うわけではなくあくまで比較用です。

いま、Vdd=3.0V時のヒステリシス電圧が200mV、Vdd=3.3V時のヒステリシス電圧が160mVとなっていますが、この差は1LSBしかなく、fig.2-3を見ても1LSB以上の測定誤差があることは明らかです。

今の測定精度ではヒステリシス電圧が電源電圧に比例して拡大しているのか縮小しているのか、あるいは変化していないのかの議論は残念ながら出来そうにありません。

最後に、しきい値電圧とヒステリシス電圧の表を示します。

Vdd[V]VTL[mV]VTH[mV]VH[mV]
3.010801280200
3.312001360160
3.612401400160
3.912801440160
4.213601520160
4.514001560160
5.015201680160
5.516001760160
table.1


関連エントリ




付録


このエントリで使用したBSch3V形式回路図ファイルを添付します。ファイル名末尾の".txt"を削除して、"_"を"."に変更すれば使えるはずです。


参考文献




フィードバック



にほんブログ村 その他趣味ブログ 電子工作へ

 ↑ 電子工作ブログランキング参加中です。1クリックお願いします。


コメント・トラックバックも歓迎です。 ↓      


 ↓ この記事が面白かった方は「拍手」をお願いします。

tag: PSoC インターフェース レベルシフト シュミットトリガ PDS5022 

PIC16FのためのリアルタイムOSという妄想

ミッドレンジマイコンでマルチタスクを書いていたら、黒歴史を思い出しました。私はPIC16FのためのマルチタスクOSをアセンブリ言語で開発してやろうと考えていた時期があるのです。

その目論見は、当然のことながらPIC16Fの絶対的なリソース不足の前にもろくも崩れ去りました。まあ、高性能CPUのためのオペレーティングシステムなら開発できるのかと言われれば、やはりそんな事はないのですが。


組み込みOSのリアルタイム性


パソコンの数値計算プログラムなどは、その処理速度が速ければ速いほど優れており、高速に計算を終えるため、かたやCPUの処理性能向上、かたやアルゴリズムの改良と地道な努力が続けられています。

一方で、組み込みマイコンプログラミングでは、処理速度が高速であること以上に、確実に所定の時間内に処理が完了することが重要視されます。
言い換えれば、一定時間以内に処理が完了することさえ確実ならば、早く終わらせてしまっても意味が無く、複数のタスクを処理している最中に高優先度のタスクの要求が発生したならば、「すぐに」処理が行われることに重点をおくことが多いと言うことになります。

この「すぐに」というのが「リアルタイム性」と言うことですが、当然ながら「本当に全く間をおかずに」処理を開始することなど不可能です。
そんなわけで、最高優先度のタスクが発生したら、最悪でもX秒以内にそのタスクを開始することを保証する、というのが現実的なリアルタイムOSの役割です。(このX秒の部分がオペレーティングシステムの処理による遅延です。当然短い方が優秀なOSと言うことになります。)

背景にある思想


他の処理をしている最中に、その処理を無理やり中断して別の処理を開始するためのメカニズムはPIC16Fに関しては割り込み以外ありえません。優先度の2段階以下であれば、メインルーチンと割り込みでうまく処理できること、3段階以上ならば多重割り込みが必要になることはミッドレンジマイコンでマルチタスクでも書きました。

PIC16Fは、多重割り込みをサポートする機能を有してはいませんが、割り込みルーチンの内部で、明示的に割り込みを許可することにより多重割り込みのようなことが出来ます。
この考え方を用いて、割り込みルーチンの中に優先度の順にフラグをポーリングするタスクスイッチャを実装すれば、多段階の優先度をサポートするオペレーティングシステムもどきが作れるはずです。

実装


未完成のコードを以下に示します。ファイルの更新日付を信じるならば、"main.asm"の最後の更新は2007年1月1日でした。2年半前の私は正月にもかかわらずご苦労なことです。

現状、人様に見せられる状態ではない上、たぶん、煮ても焼いても食べられません。しかし、これ以上、手をつけるつもりも全く無いので公開してしまいましょう。"macro.inc"のアスキーアートなど我ながら涙ぐましくもあります。



当然バグもたくさんあるでしょう。探す気も起きませんし、報告していただいてもなおす気も起きません。(それ以前に未完成ですが。)

動作に関して、タスクスイッチャの基本的な部分は、後閑哲也さんのPICROSをまねしようと思っていた記憶がかすかにあります。マクロとして定義してあるので、タスクの数だけ展開して使います。

クロック周波数や電源電圧等の回路定数を設定するためのインクルードファイル的なものもあったような気がするのですが、ハードディスクの中に見当たりませんでした。

何故かシリアル送受信は、内部モジュールを使わずにソフトウエアで実現しようとしていたようです。受信時に3入力の多数決をとるコードを書いたような気がするのですが、これも見つかりませんでした。

ひょっとしたら、発掘したソースコードは最新のものではないのかもしれません。

問題点


結論から書くと、PIC16Fは絶望的にRAMが足りません。

最初に限界を迎えるであろうことが予想されるリソースは、ハードウエアスタックでした。
なぜならば、システムの根幹を支えるのが擬似多重割り込みであり、割り込み1つに対してスタックを1つ消費するからです。
PIC16Fのハードウエアスタックは8段階までしかなく、PUSH/POPに類する命令が一切存在せず、プログラムからスタックに干渉する手段が無いため逃げ場もありません。

このハードウエアスタックをすべて割り込み(タスクスイッチャ)のために使うことを考えると、サブルーチンの戻り番地は他の汎用レジスタに保存する必要があります。そこで、汎用レジスタをソフトウエアスタックとして使うためのマクロをいくつか書き、CALL/RETURNの代用としてJUMP/BACKというマクロを書きました。

"charlcd.asm"や"7seg.asm"などはJUMP/BACKで書いたサブルーチンのサンプルです。

しかしながら、非割り込みサブルーチンの戻り番地をPICの汎用レジスタ(RAM)に保存するとしても、ハードウエアスタックが8段階しかないと言う事実は変わりません。また、スタック構造を実装したおかげで、汎用レジスタ(RAM)もどんどん使われてしまいます。
オペレーティングシステムの基礎の勉強などしたことが無い素人目にも、リソースの管理が必須であることは自明でした。

では、どうやってリソースを管理するか?セマフォ?メッセージ渡し?
リソースが足りないがために、リソース管理をしなければならないのに、そのリソース管理にリソースが必要なんて・・・と思ったあたりで、バカバカしさが限界を迎えました。

大切なのはバランス感覚


なんというか、「ぼくのかんがえたさいきょうのがんだむ」的な痛さ・恥ずかしさを感じます。肝心なのは目標を達成すること、そのために合理的な手法は何であるか考えること、そのことを見失ってはいけません。

ネット上の質問掲示板では、「出来る限り低ノイズの電源」だとか「限りなく低ひずみの発振器」だとか言う荒唐無稽な書き込みをよく見かけますが、これもその類です。頑張ったけど要求された性能を満たさなかったというのはあきらめるほかありませんが、要求された性能を過剰に超える性能のものを作っても疲れるだけです。

そう考えると、後閑哲也さんのPICROSはよく出来ています。本当に感心します。

さて、汎用的なオペレーティングシステムは誇大妄想でしたが、割り込みルーチン内でわざと割り込み許可を行う手法自体は有用です。電気自動車用データロガーもこの手法を用いればプログラムだけで3段階の優先度を処理できると思います。

最後に


最後になりましたがお礼を。ミッドレンジマイコンでマルチタスクで2009-09-01に非公開でコメントを下さった方、内容には触れませんが、ありがとうございます。

関連エントリ




参考URL




フィードバック



にほんブログ村 その他趣味ブログ 電子工作へ

 ↑ 電子工作ブログランキング参加中です。1クリックお願いします。


コメント・トラックバックも歓迎です。 ↓      


 ↓ この記事が面白かった方は「拍手」をお願いします。

tag: PIC 

PSoC/GPIOのしきい値とヒステリシス

デジタルオシロスコープPDS5022SをもちいてPSoCのGPIOの入力バッファの特性を測定しました。
その結果VTH=1.68V,VTL=1.52V,VH=160mVと言う値が得られました。

001_20090830113043.png 002_20090830113042.png


マイコンのデジタル入力端子


マイコンのデジタル入力端子は、CPUと外部回路をつなぐ最も基本的なインターフェースです。
レベルシフト 第二回:分圧型と入力レベルのエントリのとおり、そのしきい値電圧は、デジタル回路を設計する上で非常に重要なパラメータです。

シュミットトリガ入力


シュミットトリガ入力は、入力電圧がL→Hに変化するときと、H→Lに変化するときで、しきい値が異なる回路です。
デジタル回路と言えど、その信号電圧の変化は連続的なアナログ値ですが、シュミットトリガ回路を用いると、入力信号の変化速度が遅かったり、ノイズが重畳している場合などでも出力をばたつかせずに切り替えることができます。

これまでにシュミットトリガに関するエントリはたくさん書いたので、以下に示しておきます。



PSoC/GPIO入力特性


PSoCのGPIOは入力端子として使う場合は、すべてシュミットトリガ入力です。
その入力ロジックレベルは(ほぼ)5VTTL互換です。

以下にCY8C29466のデータシートの引用を示します。

SymbolDescriptionMinTypMaxUnitNotes
VILInput Low Level--0.8VVdd = 3.0 to 5.25.
VIHInput High Level2.1--VVdd = 3.0 to 5.25.
VHInput Hysterisis-60-mV
table.1: DC GPIO Specifications


ここで、L→Hへのしきい値をVTL、H→Lのしきい値をVTHとすると

VIL < VTL < VTH < VIH

となり、
VTH - VTL = VH

となります。

本エントリでは、VTHとVTLを実測し、VHを求めました。

測定回路と計測器の構成


1Hz正弦波発振回路からの出力をPSoCのGPIOに入力し、Interconnectで直接他のGPIOへ出力したものをデジタルオシロスコープPDS5022Sで測定し、取得したデータをgnuplotで横軸に入力電圧、縦軸に出力電圧としてヒステリシス曲線をプロットしました。

1Hz正弦波発振回路は、PSoCでLED正弦波駆動の正弦波出力に対して、簡単なRCローパスフィルタ(147kΩ,0.1uF)をかけたものとしました。定数はブレッドボードで差し替えながらおおよそ滑らかな波形になるように選びました。

結果


結果のヒステリシス曲線をfig.1に示します。


001_20090830113043.png
fig.1: ヒステリシス曲線


実測の結果を以下にまとめます。

SymbolDescriptionVoltageUnit
VTL下側しきい値1.52V
VTH上側しきい値1.68V
VHヒステリシス幅160mV
table.2: しきい値とヒステリシス実測値


誤差要因の考察


本来は直流電圧源とデジタルマルチメータで行うべき測定ですが、今回は手間が省けるので交流電圧源とオシロスコープでやってしまいました。
そのため、そのことに起因する誤差が考えられます。

ひとつめは、「PSoCのInterconnectの遅延」です。
入力正弦波が1Hzとかなり遅いため、影響は小さいと考えています。

ふたつめが、「オシロスコープの電圧分解能不足」です。
fig.2に、fig.1の上下のしきい値付近を拡大したものを示します。


002_20090830113042.png
fig.2: ヒステリシス曲線拡大図


十字型のマーカーで示したのがデータ点で、X軸方向のデータ間隔が入力信号の電圧分解能です。
ヒステリシス幅の測定値160mVや公称値60mVに対して、分解能不足の感は否めません。

とはいうものの、
  • ほぼTTL互換入力であること
  • シュミットトリガ入力であること
  • ヒステリシス幅が100mV程度であること

が確認できました。

関連エントリ




参考文献/使用機器




フィードバック



にほんブログ村 その他趣味ブログ 電子工作へ

 ↑ 電子工作ブログランキング参加中です。1クリックお願いします。


コメント・トラックバックも歓迎です。 ↓      


 ↓ この記事が面白かった方は「拍手」をお願いします。

tag: PSoC インターフェース シュミットトリガ ブレッドボード 

FC2カウンター
カテゴリ
ユーザータグ

LTspiceAkaiKKRScilabmachikaneyamaKKRPSoCOPアンプPICCPA強磁性モンテカルロ解析常微分方程式トランジスタode状態密度インターフェースDOSPDS5022ecaljスイッチング回路定電流半導体シェルスクリプトレベルシフト乱数HP6632A温度解析ブレッドボードI2CR6452A分散関係トランジスタ技術可変抵抗確率論数値積分反強磁性セミナー非線形方程式ソルバ絶縁バンドギャップ熱設計偏微分方程式バンド構造GW近似カオス三端子レギュレータLEDフォトカプラシュミットトリガISO-I2CA/DコンバータLM358USBカレントミラーTL431マフィンティン半径PC817C数値微分アナログスイッチ発振回路サーボ直流動作点解析74HC40532ちゃんねる標準ロジックチョッパアンプLDAアセンブラFFTbzqltyイジング模型ブラべ格子開発環境補間量子力学電子負荷BSchパラメトリック解析単振り子基本並進ベクトル熱伝導繰り返しGGAMaximaTLP621ewidthSMP相対論抵抗位相図ランダムウォークスピン軌道相互作用六方最密充填構造不規則合金FETコバルト失敗談QSGWcygwinスレーターポーリング曲線スイッチト・キャパシタラプラス方程式gfortranキュリー温度状態方程式条件分岐格子比熱TLP552LM555TLP521三角波NE555過渡解析FXA-7020ZRWriter509テスタ詰め回路MCUマントルダイヤモンドQNAPデータロガーガイガー管自動計測UPS井戸型ポテンシャルawk第一原理計算仮想結晶近似ブラウン運動差し込みグラフ平均場近似fsolve起電力熱力学OpenMPスーパーセル固有値問題最適化最小値VCAシュレディンガー方程式VESTAubuntu最大値面心立方構造PGAOPA2277L10構造非線型方程式ソルバ2SC1815fccフェルミ面等高線ジバニャン方程式ヒストグラム確率論マテリアルデザイン正規分布結晶磁気異方性interp1フィルタ初期値ウィグナーザイツ胞c/aルチル構造岩塩構造スワップ領域リジッドバンド模型edeltBaOウルツ鉱構造重積分SIC二相共存ZnOquantumESPRESSOCapSensegnuplotmultiplot全エネルギー固定スピンモーメントFSM合金ノコギリ波フォノンデバイ模型ハーフメタル半金属TeXifortTS-110不規則局所モーメントTS-112等価回路モデルパラメータ・モデルヒストグラムExcel円周率GimpトラックボールPC直流解析入出力文字列マンデルブロ集合キーボードフラクタル化学反応三次元Realforce縮退日本語最小二乗法関数フィッティング疎行列シンボル線種ナイキスト線図陰解法負帰還安定性熱拡散方程式EAGLECrank-Nicolson法連立一次方程式P-10クーロン散乱Ubuntu境界条件MBEHiLAPW軸ラベルトランスCK1026MAS830L凡例PIC16F785LMC662AACircuit両対数グラフ片対数グラフグラフの分割specx.f

最新コメント
リンク

にほんブログ村 その他趣味ブログ 電子工作へ