- SPWM(正弦波パルス幅変調)とは何ですか?
- SPWMインバーターのしくみ
- SPWMインバーターの構築に必要なコンポーネント
- SPWMインバータ回路の構築
- SPWMインバーター用のArduinoプログラム
- TL494PWMインバータ回路のテスト
グリッドからAC電源を得ることができない場合、インバータ回路が必要になることがよくあります。インバータ回路は、DC電力をAC電力に変換するために使用され、純粋な正弦波インバーターと修正方形波インバーターの2つのタイプに分けることができます。これらの純粋な正弦波インバーターは非常に高価であり、修正された方形波インバーターは安価です。さまざまなタイプのインバーターについて詳しくは、こちらをご覧ください。
前回の記事では、それに関連する問題に対処することによって、修正された方形波インバーターを作成しない方法を示しました。そこで、この記事では、Arduinoを使用して単純な純粋な正弦波インバーターを作成し、回路の動作原理を説明します。
この回路を作成する場合、この回路にはフィードバック、過電流保護、短絡保護、温度保護がないことに注意してください。したがって、この回路は教育目的でのみ構築およびデモンストレーションされており、このタイプの回路を商用機器に構築して使用することは絶対にお勧めしません。ただし、必要に応じて回路に追加できます。
過電圧保護、過電流保護、逆極性保護、短絡保護、ホットスワップコントローラなどについてはすでに説明しました。
注意:このタイプの回路を作成する場合は、入力へのスイッチング信号によって生成される高電圧および電圧スパイクに特に注意してください。
SPWM(正弦波パルス幅変調)とは何ですか?
名前が示すように、SPWMは、の略S inusoidal P ulse W IDTH Mのodulation。ご存知かもしれませんが、PWM信号は、パルスの周波数だけでなく、オン時間とオフ時間も変更できる信号であり、デューティサイクルとも呼ばれます。 PWMについて詳しく知りたい場合は、ここで読むことができます。したがって、デューティサイクルを変更することにより、パルスの平均電圧を変更します。下の画像はそれを示しています-
デューティサイクルが100%の0〜5Vの間で切り替わるPWM信号を考慮すると、平均出力電圧は5Vになります。また、デューティサイクルが50%の同じ信号を考慮すると、次のようになります。2.5Vの出力電圧を取得し、25%のデューティサイクルの場合、それはその半分です。これでPWM信号の基本原理を要約し、SPWM信号の基本原理の理解に移ることができます。
正弦波電圧は主に変化させる類似の電圧である時間をかけて大きさを、我々はによって正弦波のこの現象を再現することができ、継続的に、PWM波のデューティサイクルを変えることイメージショーの下、。
以下の回路図を見ると、トランスの出力にコンデンサが接続されていることがわかります。このコンデンサは、搬送周波数からのAC信号を平滑化する役割を果たします。
利用される入力信号は、入力信号 と負荷に応じてコンデンサを充電および放電します。非常に高周波のSPWM信号を使用したため、デューティサイクルは1%のように非常に小さくなり、この1%のデューティサイクルでコンデンサが少し充電され、次のデューティサイクルで5%になり、再び充電されます。コンデンサをもう少し、次のパルスのデューティサイクルは10%になり、コンデンサはもう少し充電されます。デューティサイクルが100%に達するまで信号を適用し、そこから下に戻ります。 1%まで。これにより、出力で正弦波のような非常に滑らかな曲線が作成されます。したがって、入力でデューティサイクルの適切な値を提供することにより、出力で非常に正弦波になります。
SPWMインバーターのしくみ
上の画像はSPWMインバーターの主な駆動セクションを示しています。ご覧のとおり、ハーフブリッジ構成の2つのNチャネルMOSFETを使用して、この回路のトランスを駆動し、不要なスイッチングノイズを低減し、MOSFETを保護しています。 、MOSFETと並列に1N5819ダイオードを使用しました。ゲートセクションで発生する有害なスパイクを減らすために、1N4148ダイオードと並列に4.7オームの抵抗を使用しました。最後に、BD139およびBD140トランジスタはプッシュプル 構成で構成されます。このMOSFETは非常に高いゲート容量を持ち、適切にオンにするためにベースで最低10Vを必要とするため、MOSFETのゲートを駆動します。プッシュプルアンプの動作について詳しくは、こちらをご覧ください。
回路の動作原理をよりよく理解するために、MOSFETのこのセクションがオンになるポイントまで回路を縮小しました。MOSFETが電流を流しているとき、最初にトランスを流れ、次にMOSFETによって接地されるため、電流が流れる方向にも磁束が誘導され、トランスのコアが磁束を通過します。二次巻線では、出力で正弦波信号の正の半サイクルが得られます。
次のサイクルでは、回路の下部が回路の上部にあり、回路の上部がオフになっているため、上部を取り外しました。電流は反対方向に流れ、その方向に磁束を生成し、逆になります。コア内の磁束の方向。MOSFETの動作について詳しくは、こちらをご覧ください。
今、私たちは皆、変圧器が磁束の変化によって機能することを知っています。したがって、両方のMOSFETをオンとオフに切り替え、一方を他方に反転させ、それを1秒間に50回行うと、変圧器のコア内に優れた振動磁束が生成され、磁束の変化によって2次コイルに電圧が誘導されます。私たちはファラデーの法則によって知っています。これが基本的なインバーターの仕組みです。
このプロジェクトで使用される完全なSPWMインバータ回路を以下に示します。
SPWMインバーターの構築に必要なコンポーネント
Sl.No |
部品 |
タイプ |
量 |
1 |
Atmega328P |
IC |
1 |
2 |
IRFZ44N |
MOSFET |
2 |
3 |
BD139 |
トランジスタ |
2 |
4 |
BD140 |
トランジスタ |
2 |
5 |
22pF |
コンデンサ |
2 |
6 |
10K、1% |
抵抗器 |
1 |
7 |
16MHz |
結晶 |
1 |
8 |
0.1uF |
コンデンサ |
3 |
9 |
4.7R |
抵抗器 |
2 |
10 |
1N4148 |
ダイオード |
2 |
11 |
LM7805 |
電圧レギュレータ |
1 |
12 |
200uF、16V |
コンデンサ |
1 |
13 |
47uF、16V |
コンデンサ |
1 |
14 |
2.2uF、400V |
コンデンサ |
1 |
SPWMインバータ回路の構築
このデモのために、回路はVeroboard上に構築されているの助けを借りて、模式的な接続ジャンパができるだけ厚いようにする必要がので、変圧器の出力において、現在の膨大な量は、接続を介して流れることになります。
SPWMインバーター用のArduinoプログラム
先に進んでコードを理解し始める前に、基本を明確にしましょう。上記の動作原理から、PWM信号が出力でどのように見えるかを学びましたが、Arduinoの出力ピンでこのような変化する波をどのように作成できるかという疑問が残ります。
様々なPWM信号を作るために、我々は、使用しようとしている16ビットタイマ1をと1のプリスケーラ設定私たちに与えるだろう、各カウントのために16000000分の1600 = 0.1msの時間を私たちは、正弦波の単一半サイクルを考慮すれば、 、それは波の半サイクル内に正確に100回適合します。簡単に言えば、正弦波を200回サンプリングすることができます。
次に、正弦波を200個に分割し、振幅の相関関係を使用してそれらの値を計算する必要があります。次に、これらの値にカウンター制限を掛けて、タイマーカウンター値に変換する必要があります。最後に、これらの値をルックアップテーブルに入れてカウンターにフィードする必要があります。そうすると、正弦波が得られます。
物事を少し簡単にするために、私はKurtHuttenによって作成されたGitHubからの非常によく書かれたSPWMコードを使用しています。
コードは非常に単純です。必要なヘッダーファイルを追加することからプログラムを開始します
#include #include
次に、タイマーカウンター値を取得する2つのルックアップテーブルがあります。
int lookUp1 = {50、100、151、201、250、300、349、398、446、494、542、589、635、681、726、771、814、857、899、940、981、1020、1058、 1095、1131、1166、1200、1233、1264、1294、1323、1351、1377、1402、1426、1448、1468、1488、1505、1522、1536、1550、1561、1572、1580、1587、1593、1 1599、1600、1599、1597、1593、1587、1580、1572、1561、1550、1536、1522、1505、1488、1468、1448、1426、1402、1377、1351、1323、1294、1264、1233、1200 1166、1131、1095、1058、1020、981、940、899、857、814、771、726、681、635、589、542、494、446、398、349、300、250、201、151、100、 50、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、 0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、 0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、 0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0}; int lookUp2 = {0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、 0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、 0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、 0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、 0、0、50、100、151、201、250、300、349、398、446、494、542、589、635、681、726、771、814、857、899、940、981、1020、1058、 1095、1131、1166、1200、1233、1264、1294、1323、1351、1377、1402、1426、1448、1468、1488、1505、1522、1536、1550、1561、1572、1580、1587、1593、1 1599、1600、1599、1597、1593、1587、1580、1572、1561、1550、1536、1522、1505、1488、1468、1448、1426、1402、1377、1351、1323、1294、1264、1233、1200 1166、1131、1095、1058、1020、981、940、899、857、814、771、726、681、635、589、542、494、446、398、349、300、250、201、151、100、50、0};
次に、 セットアップ セクションで、タイマーカウンター制御レジスタを初期化して、それぞれをクリアします。詳細については、atmega328ICのデータシートを確認する必要があります。
TCCR1A = 0b10100010; / * 10マッチ時にクリア、compAの場合はBOTTOMに設定。試合時に10クリア、compBのBOTTOMに設定。00 10 WGM1 1:0(波形15の場合)* / TCCR1B = 0b00011001; / * 000 11 WGM1 3:2(波形15の場合)。001カウンターにプリスケールがありません。* / TIMSK1 = 0b00000001; / * 0000000 1TOV1フラグ割り込みイネーブル。* /
その後、入力キャプチャレジスタを事前定義された値16000で初期化します。これにより、正確に200個のサンプルを生成できます。
ICR1 = 1600; // 16MHz水晶の周期、50Hz正弦波サイクルあたり200細分割の100KHzのスイッチング周波数。
次に、関数を呼び出してグローバル割り込みを有効にします。
sei();
最後に、Arduinoのピン9と10を出力として設定します
DDRB = 0b00000110; // PB1とPB2を出力として設定します。
これでセットアップ機能は終了です。
コードのループセクションは、タイマーカウンターの割り込み駆動型プログラムであるため、空のままです。
void loop(){; /*何もしない 。。。。永遠に!* /}
次に、timer1オーバーフローベクトルを定義しました。この割り込み関数は、timer1がオーバーフローすると呼び出しを受け取り、割り込みを生成します。
ISR(TIMER1_OVF_vect){
次に、いくつかのローカル変数を静的変数として宣言し、値をキャプチャおよび比較抵抗に供給し始めました。
static int num; 静的文字トリガー; //期間ごとにデューティサイクルを変更します。OCR1A = lookUp1; OCR1B = lookUp2;
最後に、カウンタを事前にインクリメントして、次の値をキャプチャおよび比較抵抗にフィードします。これにより、このコードの終わりが示されます。
if(++ num> = 200){// numをプリインクリメントしてから、200未満であることを確認します。num= 0; // numをリセットします。trig = trig ^ 0b00000001; digitalWrite(13、trig); }
TL494PWMインバータ回路のテスト
回路をテストするために、次のセットアップが使用されます。
- 12V鉛蓄電池。
- 6-0-6タップと12-0-12タップの変圧器
- 負荷としての100W白熱電球
- Meco 108B + TRMSマルチメータ
- Meco 450B + TRMSマルチメータ
Arduinoからの出力信号:
コードをアップロードしたら。下の画像のように見えるArduinoの2つのピンからの出力SPWM信号を測定しました。
少しズームインすると、PWM波のデューティサイクルが絶えず変化していることがわかります。
次に、下の画像はトランスからの出力信号を示しています。
理想的な状態のSPWMインバータ回路:
上の画像からわかるように、この回路は理想的な動作中に約13Wを消費します
無負荷時の出力電圧:
インバータ回路の出力電圧を上に示します。これは、負荷が接続されていない状態で出力に出力される電圧です。
入力消費電力:
上の画像は、40Wの負荷が接続されている場合にicが消費する入力電力を示しています。
出力消費電力:
上の画像は、この回路で消費される出力電力を示しています(負荷は40Wの白熱電球です)
以上で、回路のテスト部分は終了です。デモについては、以下のビデオをご覧ください。この記事が気に入って、SPWMとその実装手法について少し学んだことを願っています。読み続け、学び続け、構築し続けてください。次のプロジェクトでお会いしましょう。