このプロジェクトでは、PCB上にPICベースのカーバッテリー監視システムを作成します。ここでは、EASYEDAオンラインPCBシミュレーターとデザイナーを使用してPCBを設計しました。このカーバッテリー監視回路は、車のダッシュボードの電源コンセントに差し込むだけで、カーバッテリーの電力を監視するために使用されます。PCBはまた、としてそれを使用するためのオプションがある電圧測定ツールまたは電圧計USB車の充電器を使用せずに。ここに端子台を取り付け、電源から2本の線を接続するだけで他の電源の電圧を測定します。
必要なコンポーネント:
- PICマイクロコントローラーPIC18F2520-1
- 製造されたPCBボード-1
- USBコネクタ-1
- 2ピン端子コネクタ(オプション)-1
- コモンアノード7セグメントディスプレイ(4 in 1)-1
- BC557トランジスタ-4
- 1k抵抗-6
- 2k抵抗-1
- 100R抵抗-8
- 1000uFコンデンサ-1
- 10uFコンデンサ-1
- 28ピンICベース-1
- 女性のburgsticks-1
- 7805電圧レギュレータ-1
- 車のUSB充電器-1
- LED -1
- ツェナーダイオード5.1v-2
- USBケーブル(BタイプまたはArduino UNO互換)-1
- 20MHzクリスタル-1
- 33pFコンデンサ-2
説明:
通常、車のバッテリー電力を毎回測定することは重要ではありませんが、充電中のバッテリー電圧を知って、充電されているかどうかを確認する必要があることがよくあります。これにより、充電システムの故障によるバッテリーの故障を防ぐことができます。充電中の12vカーバッテリーの電圧は約13.7vです。そのため、バッテリーが十分に充電されているかどうかを識別し、バッテリー障害の原因を調査できます。このプロジェクトでは、PICマイクロコントローラーを使用してカーバッテリー用の電圧計を実装します。車用電源ソケットまたは車用USB充電器は、分圧回路を使用してマイクロコントローラーのADCピンにバッテリー電圧を供給するために使用されます。次に、4桁の7セグメントディスプレイバッテリーの電圧値を表示するために使用されます。この回路は最大15vの電圧を測定できます。
車のバッテリーが充電されているとき、バッテリー端子間の電圧は実際にはオルタネーター/整流器から来ています。そのため、システムは13.7ボルトを読み取ります。しかし、バッテリーが充電されていないか、車のエンジンがオンになっていない場合、バッテリー端子間の電圧は実際のバッテリー電圧は約12vです。
同じ回路を使用して、最大15vの他の電源の電圧を測定することもできます。この目的のために、PCBに端子台(緑色のプラスチックブロック)をはんだ付けしました。ここでは、電源から2本のワイヤを接続し、電圧を監視できます。最後に、可変電源、USB電源バンク、12vAC-DCアダプターの電圧を測定してデモを行ったビデオを確認してください。シンプルバッテリーモニター回路と12vバッテリー充電器回路もチェックしてください。
回路図と動作説明:
このバッテリー電圧監視回路では、PICマイクロコントローラーの内蔵アナログピンを使用してカーバッテリー電圧を読み取り、ここでは分圧回路を介してマイクロコントローラーのピンAN0(28)ピンを選択しました。5.1vのツェナーダイオードも保護に使用されます。
4 in 1 7セグメントディスプレイは、マイクロコントローラのPORTBとPORTCに接続されているカーバッテリー電圧の瞬時値を表示するために使用されます。5V電圧レギュレータ、つまりLM7805は、7セグメントディスプレイを含む回路全体に電力を供給するために使用されます。マイクロコントローラのクロックには、20MHzの水晶発振器が使用されます。回路は、LM7805を使用してUSBカーチャージャー自体から電力を供給されます。PCBにUSBポートを追加したので、車のUSB充電器を回路に直接接続できます。
車のUSB充電器またはシガレットライターは、車の12v電源コンセントから5vの調整された電源を提供しますが、車のバッテリーの実際の電圧を測定する必要があるため、車の充電器を微調整しました。車のUSB充電器を開いて、5v(出力)端子と12v(入力)端子を見つけ、サンドペーパーまたは硬いものでこすって5v接続を外し、USB出力端子を直接12vに短絡する必要があります。まず、車のUSB充電器のUSBポートから5v接続を開き、次に5vが接続されていたUSBポートに12vを接続します。下の図に示すように、赤い丸で囲まれた接続を切断しました。車の充電器によって異なる場合があります。
ここでADCを構成するために、ADC変換用に5vの内部基準電圧とf / 32クロックのアナログピンAN0を選択しました。
ADC値からカーバッテリー電圧を計算するために、次の式を使用しました。
電圧=(ADC値/抵抗係数)*基準電圧ここで、ADC値=分圧器の出力(マイクロ波によってデジタルに変換)抵抗係数= 1023.0 /(R2 / R1 + R2)// 1023は最大ADC値(10-ビット)基準電圧= 5ボルト//内部5V基準が選択されています
抵抗係数の計算:
このプロジェクトでは、(一般的に)約12v-14vの車のバッテリー電圧を読み取っています。したがって、最大15vは、このシステムが最大15vまで読み取ることができることを意味すると想定して、このプロジェクトを実行しました。
したがって、回路では分圧器部分にR1およびR2抵抗を使用し、値は次のとおりです。
R1 = 2K
R2 = 1K
抵抗係数= 1023.0 *(1000/2000 + 1000)
抵抗係数= 1023.0 *(1/3)
15ボルトまでの抵抗係数= 341.0
したがって、電圧計算の最終式は次のようになります。これは、この記事の最後に記載されているコードを使用しています。
電圧=(ADC値/ 341.0)* 5.0
EasyEDAを使用した回路およびPCB設計:
カーバッテリー電圧モニター用の回路を設計するために、回路とPCBをシームレスに作成するための無料のオンラインEDAツールであるEasyEDAを使用しました。以前、EasyEDAにいくつかのPCBを注文しましたが、回路の描画からPCBの注文までのプロセス全体が、他のPCB製造業者と比較してより便利で効率的であることがわかったため、引き続きサービスを使用しています。 EasyEDAは、回路図、シミュレーション、PCB設計を無料で提供し、高品質でありながら低価格のカスタマイズされたPCBサービスも提供します。 Easy EDAを使用して回路図、PCBレイアウト、回路のシミュレーションなどを作成する方法に関する完全なチュートリアルをここで確認してください。
EasyEDAは日々改善されています。彼らは多くの新機能を追加し、全体的なユーザーエクスペリエンスを改善しました。これにより、EasyEDAは回路の設計に簡単に使用できるようになります。彼らはまもなくデスクトップバージョンをリリースする予定です。デスクトップバージョンはダウンロードしてコンピュータにインストールし、オフラインで使用できます。
EasyEDAでは、回路とPCBの設計を公開して、他のユーザーがそれらをコピーまたは編集して利用できるようにすることができます。また、このカーバッテリー電圧モニターの回路とPCBのレイアウト全体を公開しました。以下のリンクを確認してください。 :
easyeda.com/circuitdigest/PIC_based_Car_Battery_Monitoring_System-63c2d5948eaa48c5bcbbd8db49a6c776
以下は、EasyEDAからのPCBレイアウトのトップレイヤーのスナップショットです。「レイヤー」ウィンドウからレイヤーを選択することにより、PCBの任意のレイヤー(トップ、ボトム、トップシルク、ボトムシルクなど)を表示できます。
オンラインでのPCBサンプルの計算と注文:
PCBの設計が完了したら、 製造出力 のアイコンをクリック すると、PCB注文ページが表示されます。ここでは、Gerber ViewerでPCBを表示したり、PCBのGerberファイルをダウンロードして任意のメーカーに送信したりできます。また、EasyEDAで直接注文する方がはるかに簡単(かつ安価)です。ここでは、注文するPCBの数、必要な銅層の数、PCBの厚さ、銅の重量、さらにはPCBの色を選択できます。すべてのオプションを選択したら、「カートに保存」をクリックして注文を完了します。数日後にPCBを入手できます。
このPCBを直接注文するか、このリンクを使用してガーバーファイルをダウンロードできます。
PCBを注文して数日後、PCBサンプルを入手しました
PCBを入手したら、必要なすべてのコンポーネントをPCBに取り付け、最終的に カーバッテリー監視システムの準備が整いました。最後に示すビデオでこの回路を確認してください。
プログラミングの説明:
このプロジェクトのプログラムは初心者にとって少し難しいです。このコードを書くには、いくつかのヘッダーファイルが必要です。ここでは、コーディングにMPLAB X IDEを使用し、コードをビルドおよびコンパイルするためにXCコンパイラを使用しています。コードはC言語で書かれています。
このコードでは、アナログピンを使用してバッテリ電圧を読み取り、4桁の7セグメントディスプレイにデータを制御または送信するために、PICマイクロコントローラのタイマー割り込みサーバールーチンを使用しました。電圧測定のすべての計算は、メインプログラムルーチンで実行されます。
まず、コードにヘッダーを含め、次に構成ビットを使用してPICマイクロコントローラーを構成しました。
#include
そして、7セグメントディスプレイの宣言された変数と定義されたピン
unsigned int counter2; unsigned char position = 0; unsigned char k = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; int Digit1 = 0、digit2 = 0、digit3 = 0、digit4 = 0; #define TRIS_seg1 TRISCbits.TRISC0 #define TRIS_seg2 TRISCbits.TRISC1 #define TRIS_seg3 TRISCbits.TRISC2 #define TRIS_seg4 TRISCbits.TRISC3 #define TRIS_led1 TRISAbits.TRISA2 #define TRIS_led1 TRISAbits.TRISA2 #define TRIS_led2 TRIS_led5 TRISAbits.TRISA………………..。
これで、7セグメントディスプレイを駆動するためのタイマー割り込みルーチンが作成されました。
ボイド割り込みlow_priorityLowIsr(void){if(TMR0IF == 1){counter2 ++; if(counter2> = 1){if(position == 0){seg1 = 0; seg2 = 1; seg3 = 1; seg4 = 1;…………….。
今では 無効メイン() 関数で、私たちは、タイマー割り込みを初期化してきました。
GIE = 1; // GLOBLE INTRRUPT ENABLE PEIE = 1; //ペリフェラル割り込みフラグT0CON = 0b000000000; //プリスケーラ値putTMR0IE = 1; //割り込みイネーブルTMR0IP = 0; //割り込み優先度TMR0 = 55536; //この値の後にカウンターを開始しますTMR0ON = 1;
次に、 while ループで、アナログピンでアナログ入力を読み取り、計算のために関数を呼び出します。
while(1){adc_init(); for(i = 0; i <40; i ++){Value = adc_value(); adcValue + =値; } adcValue =(float)adcValue / 40.0; convert(adcValue); delay(100); }
与えられた adc_init() 関数はADCの初期化に使用されます
void adc_init(){ADCON0 = 0b00000011; // ADCチャネルを選択ADCON1 = 0b00001110; //アナログおよびデジタルi / pを選択ADCON2 = 0b10001010; //キャップタイムを保持する等化時間ADON = 1; }
与えられた adc_value 関数は、アナログピンからの入力を読み取り、電圧を計算するために使用されます。
float adc_value(void){float adc_data = 0; while(GO / DONE == 1); //上位ビットのデータが変換を開始adc値adc_data =(ADRESL)+(ADRESH << 8); // 10ビット出力を保存adc_data =((adc_data / 342.0)* 5.0); adc_dataを返します。}
また、特定の 変換 機能を使用して、電圧値をセグメントでサポートされている値に変換します。
void convert(float f){int d =(f * 100); Digit1 = d%10; d = d / 10; Digit2 = d%10; d = d / 10; Digit3 = d%10; Digit4 = d / 10; }
以下のデモビデオで、このプロジェクトの完全なコードを確認してください。