バッテリー、SMPS回路、またはその他の電源回路を使用したことがある場合は、さまざまな負荷条件でのパフォーマンスを確認するために、電源を負荷してテストする必要があることがよくあります。このタイプのテストを実行するために一般的に使用されるデバイスは、定電流DC負荷と呼ばれます。これにより、電源の出力電流を調整し、再度調整されるまで一定に保つことができます。このチュートリアルでは、Arduinoを使用して独自の調整可能な電子負荷を構築する方法を学習します。Arduinoは、最大入力電圧24V、最大5Aのドレイン電流を使用できます。このプロジェクトでは、中国を拠点とするプロのPCB製造および組み立てサービスプロバイダーであるAllPCBによって製造されたPCBボードを使用しました。
以前の電圧制御電流源チュートリアルでは、MOSFETでオペアンプを使用する方法と、電圧制御電流源回路を使用する方法について説明しました。しかし、このチュートリアルでは、その回路を適用して、デジタル制御の電流源を作成します。明らかに、デジタル制御の電流源にはデジタル回路が必要であり、その目的を果たすために、ArduinoNANOが使用されます。 Arduino NANOは、DC負荷に必要な制御を提供します。
回路は3つの部分で構成されています。最初の部分はArduinoNanoセクション、2番目の部分はデジタル-アナログコンバーター、3番目の部分は純粋なアナログ回路で、負荷セクションを制御する単一パッケージのデュアルオペアンプが使用されています。このプロジェクトはArduinoへの投稿に触発されていますが、回路は複雑さを軽減するために変更されており、誰もが構築できる基本的な機能を備えています。
当社の電子負荷は、以下の入力セクションと出力セクションを持つように設計されています。
- 負荷を増減するための2つの入力スイッチ。
- 設定負荷、実負荷、負荷電圧を表示するLCD。
- 最大負荷電流は5Aに制限されています。
- 負荷の最大入力電圧は24Vです。
必要な材料
DC電子負荷を構築するために必要なコンポーネントを以下に示します。
- Arduino nano
- 16x2文字のLCD
- 2バレルソケット
- MOSFET irf540n
- Mcp4921
- Lm358
- 5ワットのシャント抵抗.1オーム
- 1k
- 10k-6個
- ヒートシンク
- .1uF 50v
- 2k-2個
ArduinoDC電子負荷回路図
以下の回路図では、オペアンプには2つのセクションがあります。1つはMOSFETを制御することであり、もう1つは検出された電流を増幅することです。このページの下部にある、回路の完全な動作を説明するビデオを確認することもできます。最初のセクションには、R12、R13、およびMOSFETがあります。R12はフィードバックセクションへの負荷の影響を減らすために使用され、R13はMOSFETゲート抵抗として使用されます。
追加の2つの抵抗R8とR9は、このダミー負荷によってストレスがかかる電源の供給電圧を検出するために使用されます。分圧器の規則に従って、これら2つの抵抗は最大24Vをサポートします。24Vを超えると、Arduinoピンに適さない電圧が生成されます。そのため、出力電圧が24Vを超える電源を接続しないように注意してください。
ここでは、抵抗R7が実際の負荷抵抗です。これは5ワット、0.1オームの抵抗器です。べき法則に従って、最大7A(P = I 2 R)をサポートしますが、安全のために、最大5Aの負荷電流を制限することをお勧めします。したがって、現在最大24V、このダミー負荷で5A負荷を設定できます。
アンプの別のセクションは、ゲインアンプとして構成されています。6倍のゲインを提供します。電流が流れる間、電圧降下が発生します。たとえば、5Aの電流が抵抗に流れている場合、オームの法則に従って、電圧降下は.1オームのシャント抵抗(V = I x R)の両端で.5Vになります。非反転アンプはそれをx6に増幅するため、アンプの2番目の部分からの出力は3Vになります。この出力はArduinoナノアナログ入力ピンによって検出され、電流が計算されます。
アンプの最初の部分は、入力電圧に従ってMOSFETを制御し、シャント抵抗を流れる負荷電流によって目的のフィードバック電圧を取得する電圧フォロワ回路として構成されています。
MCP4921はデジタル-アナログコンバーターです。 DACは、SPI通信プロトコルを使用して任意のマイクロコントローラーユニットからデジタルデータを取得し、それに応じてアナログ電圧出力を提供します。この電圧はオペアンプの入力です。このMCP4921DACをPICで使用する方法も以前に学びました。
反対側には、SPIプロトコルを介してDACにデジタルデータを提供し、負荷を制御するArduino Nanoがあり、16x2の文字ディスプレイにもデータを表示します。さらに2つのもの、つまり減少ボタンと増加ボタンが使用されます。デジタルピンに接続する代わりに、アナログピンに接続します。したがって、スライダーやアナログエンコーダーなどの別のタイプのスイッチに変更できます。また、コードを変更することにより、負荷を制御するための生のアナログデータを提供できます。これにより、スイッチのデバウンスの問題も回避されます。
最後に、負荷を増やすことにより、Arduino nanoは負荷データをデジタル形式でDACに提供し、DACはオペアンプにアナログデータを提供し、オペアンプはオペアンプの入力電圧に従ってMOSFETを制御します。 。最後に、シャント抵抗を流れる負荷電流に応じて、電圧降下が発生します。これは、LM358の2番目のチャネルによってさらに増幅され、Arduinonanoによって取得されます。キャラクターディスプレイに表示されます。ユーザーが減少ボタンを押したときにも同じことが起こります。
PCB設計とガーバーファイル
この回路は大電流経路を持っているので、不要な故障ケースを取り除くために適切なPCB設計戦術を使用するのが賢明な選択です。したがって、PCBはこのDC負荷用に設計されています。私はEaglePCB DesignSoftwareを使用してPCBを設計しました。PCBCADソフトウェアを選択できます。CADソフトウェアで最終的に設計されたPCBは、次の画像に示されています。
このPCBの設計中に注意すべき重要な要素の1つは、回路全体に適切な電流が流れるように厚い電源プレーンを使用することです。また、あるステッチ粉砕するために使用されるVIAS(接地面におけるランダムビア)適切な接地流頂部および底部の層の両方には。
このPCBのガーバーファイルを以下のリンクからダウンロードして、製造に使用することもできます。
- 調整可能な電子DCロードガーバーファイルをダウンロードする
AllPCBからPCBを注文する
ガーバーファイルの準備ができたら、それを使用してPCBを製造できます。そういえば、この記事のスポンサーであるALLPCBは、高品質のPCBと超高速輸送で知られています。PCB製造とは別に、AllPCBはPCBアセンブリとコンポーネントの調達。
それらからPCB注文を取得するには、次のWebサイトにアクセスしてください。 allpcb.comとサインアップ。次に、ホームページで、以下に示すように、PCBの寸法と必要な数量を入力します。次に、[今すぐ見積もり]をクリックします。
これで、レイヤー数、マスクの色、厚さなど、PCBの他のパラメーターを変更できます。右側で、国と希望する配送オプションを選択できます。これにより、リードタイムと支払われる合計金額が表示されます。私はDHLを選択し、合計金額は$ 26ですが、初めてのお客様の場合、チェックアウト時に価格が下がります。次に、[カートに追加]をクリックしてから、[今すぐチェックアウト]をクリックします。
これで、「ガーバーのアップロード」をクリックしてガーバーファイルをアップロードし、「購入」をクリックできます。
次のページで、配送先住所を入力し、PCBに支払う必要のある最終価格を確認できます。次に、注文を確認し、[送信]をクリックして支払いを行うことができます。
注文が確認されたら、PCBが玄関先に到着するまで座って中継することができます。数日後に注文を受け取りましたが、以下のようにパッケージがきれいになりました。
下の写真であなた自身が見ることができるように、PCBの品質はいつものように良かった。ボードの上面と下面を以下に示します。
ボードを入手したら、すべてのコンポーネントの組み立てに進むことができます。完成したボードは次のようになります。
次に、コードをアップロードし、モジュールの電源を入れて、モジュールがどのように機能しているかを確認できます。このプロジェクトの完全なコードは、このページの下部にあります。コードの説明は次のとおりです。
調整可能なDC負荷用のArduinoコード
コードは非常に単純です。最初に、SPIおよびLCDヘッダーファイルをインクルードし、最大ロジック電圧、チップセレクトピンなどを設定しました。
#include
このセクションは、整数と変数の必須のプログラムフロー関連の宣言で構成されています。また、関連する周辺機器のピンをArduinoNanoに設定します。
const int slaveSelectPin = 10; //チップセレクトピン int番号= 0; intの増加= A2; //ピンを増やす int減少= A3; //ピンを減らす intcurrent_sense = A0; //電流 センスピンint 電圧センス = A1; //電圧検出ピン intstate1 = 0; int state2 = 0; int Set = 0; フロートボルト= 0; float load_current = 0.0; float load_voltage = 0.0; フロート電流= 0.0; フロート電圧= 0.0; LiquidCrystal lcd(7、6、5、4、3、2); // LCDピン
LCDとSPIのセットアップに使用されます。また、ピンの方向はここに設定されています。
void setup(){ pinMode(slaveSelectPin、OUTPUT); pinMode(increase、INPUT); pinMode(decrease、INPUT); pinMode(current_sense、INPUT); pinMode(電圧センス、入力); // SPIを初期化します: SPI.begin(); // LCDの列と行の数を設定します: lcd.begin(16、2); //メッセージをLCDに出力します。 lcd.print( "デジタルロード"); lcd.setCursor(0、1); lcd.print( "Circuit Digest"); 遅延(2000); }
DAC値の変換に使用されます。
void convert_DAC(unsigned int value) { / *ステップサイズ= 2 ^ n、したがって12ビット2 ^ 12 = 4096 5Vリファレンスの場合、ステップは5/4095 = 0.0012210012210012Vまたは1mV(約)* / unsignedintコンテナ; unsigned int MSB; unsigned int LSB; / *ステップ: 1、12 ビットデータをコンテナ に格納データが4095、バイナリ1111 1111 1111 * / container = value;であるとします。 / *ステップ:2ダミー8ビットを作成します。したがって、256を除算することにより、上位4ビットがLSB LSB = 0000 1111 * / LSB = container / 256で キャプチャされ ます。 / *ステップ:34ビットデータをパンチして構成を送信します。 LSB = 00110000または00001111。結果は00111111 * / LSB =(0x30)-LSB; / * Step:4コンテナにはまだ21ビットの値があります。下位8ビットを抽出します。 11111111および11111111111。結果は11111111であり、これはMSB * / MSB = 0xFF&container;です。 / *ステップ:42バイトに分割して16ビットデータを送信します。* / digitalWrite(slaveSelectPin、LOW); delay(100); SPI.transfer(LSB); SPI.transfer(MSB); delay(100); // SSピンをHighにして、チップの選択を 解除し ます 。digitalWrite(slaveSelectPin、HIGH); }
このセクションは、電流検出関連の操作に使用されます。
float read_current(void){ load_current = 0; for(int a = 0; a <average; a ++){ load_current = load_current + analogRead(current_sense); } load_current = load_current /平均; load_current =(load_current * MAX_VOLT)/ 1024; load_current =(load_current / opamp_gain)/ load_resistor; load_currentを返します。 }
これは、負荷電圧を読み取るために使用されます。
float read_volatile(void){ load_voltage = 0; for(int a = 0; a <average; a ++){ load_voltage = load_volatile + analogRead(volatile_sense); } load_voltage = load_voltage / average; load_volatile =((load_voltage * MAX_VOLT)/1024.0)* 6; load_voltageを返します。 }
これが実際のループです。ここでは、スイッチのステップが測定され、データがDACに送信されます。データを送信した後、実際の電流と負荷電圧を測定しています。両方の値も最終的にLCDに印刷されます。
void loop(){ state1 = analogRead(increase); if(state1> 500){ delay(50); state1 = analogRead(increase); if(state1> 500){ volt = volt + 0.02; } } state2 = analogRead(decrease); if(state2> 500){ delay(50); state2 = analogRead(decrease); if(state2> 500){ if(volt == 0){ volt = 0; } else { ボルト=ボルト-0.02; } } } 数値=ボルト/0.0012210012210012; convert_DAC(数値); 電圧= read_voltage(); current = read_current(); lcd.setCursor(0、0); lcd.print( "値の設定"); lcd.print( "="); セット=(ボルト/ 2)* 10000; lcd.print(Set); lcd.print( "mA"); lcd.setCursor(0、1); lcd.print( "I"); lcd.print( "="); lcd.print(current); lcd.print( "A"); lcd.print( "V"); lcd.print( "="); lcd.print(電圧); lcd.print( "V"); // lcd.print(load_voltage); //lcd.print("mA "); // delay(1000); //lcd.clear(); }
調整可能なDC負荷のテスト
デジタル負荷回路ははんだ付けされ、12V電源を使用して電源が投入されます。電源側に7.4Vのリチウム電池を使用し、クランプメーターを接続して動作を確認しました。設定電流が300mAの場合にわかるように、回路はバッテリーから300mAを引き出します。これは、クランプメーターによって310mAとして測定されます。
回路の完全な動作は、以下にリンクされているビデオで見つけることができます。あなたがプロジェクトを理解し、何か役に立つものを作るのを楽しんだことを願っています。質問がある場合は、コメントセクションに残すか、フォーラムを使用してください。