3相インバータで3相PWMを生成するためのライブラリです。ブラシレスDCモータの制御に利用できます。

Revision:
1:209637768493
Parent:
0:e82b1532eec5
--- a/3PhasePWM.cpp	Fri Jan 26 01:13:45 2018 +0000
+++ b/3PhasePWM.cpp	Fri Jan 26 01:50:53 2018 +0000
@@ -167,8 +167,8 @@
     uvw[i].mode += 1;   //チョッピングのオンオフを決定するモードを1増やす
 
     if( uvw[i].mode == 1 ){ // モードが1のとき、Toffの状態をつくる
-        pwm_upper[i] = 0;  // 上アームUuをオフ
-        pwm_lower[i] = 1;  // 下アームUdをオン
+        pwm_upper_U = 0;  // 上アームUuをオフ
+        pwm_lower_U = 1;  // 下アームUdをオン
 
         // モード3の時間幅 T3 = Ton-Tdt を計算
         uvw[i].upper_us = uvw[i].duty * 1000000 / Frequency_ - DeadTime_;
@@ -188,29 +188,29 @@
         // Tdt[μs]経過してからタイムアウトでこの関数自身をコール
         pwm[i].attach_us(this, &ThreePhasePWM::PwmUout, DeadTime_);
 
-        pwm_upper[i] = 0;         // 上アームUuをオフ
-        pwm_lower[i] = 0;         // 下アームUdをオフ
+        pwm_upper_U = 0;         // 上アームUuをオフ
+        pwm_lower_U = 0;         // 下アームUdをオフ
     }
     else if( uvw[i].mode == 3 ) { // モードが3のとき、Tonの状態をつくる
         // T3[μs]経過してからタイムアウトでこの関数自身をコール
         pwm[i].attach_us(this, &ThreePhasePWM::PwmUout, uvw[i].upper_us);
 
-        pwm_upper[i] = 1;         // 上アームUuをオン
-        pwm_lower[i] = 0;         // 下アームUdをオフ
+        pwm_upper_U = 1;         // 上アームUuをオン
+        pwm_lower_U = 0;         // 下アームUdをオフ
     }
     else if( uvw[i].mode == 4 ) { // モードが4のとき、デッドタイムをつくる
         // Tdt[μs]経過してからタイムアウトでこの関数自身をコール
         pwm[i].attach_us(this, &ThreePhasePWM::PwmUout, DeadTime_);
 
-        pwm_upper[i] = 0;         // 上アームUuをオフ
-        pwm_lower[i] = 0;         // 下アームUdをオフ
+        pwm_upper_U = 0;         // 上アームUuをオフ
+        pwm_lower_U = 0;         // 下アームUdをオフ
     }
     else {                     // モードが5のとき、Toffの状態をつくる
         // T5(=T1)[μs]経過してからタイムアウトでこの関数自身をコール
         pwm[i].attach_us(this, &ThreePhasePWM::PwmUout, uvw[i].lower_us);
 
-        pwm_upper[i] = 0;         // 上アームUuをオフ
-        pwm_lower[i] = 1;         // 下アームUdをオン
+        pwm_upper_U = 0;         // 上アームUuをオフ
+        pwm_lower_U = 1;         // 下アームUdをオン
 
         uvw[i].mode = 0;          // チョッピングのオンオフを決定するモードを0にする
     }                            
@@ -221,8 +221,8 @@
     uvw[i].mode += 1;   //チョッピングのオンオフを決定するモードを1増やす
 
     if( uvw[i].mode == 1 ){ // モードが1のとき、Toffの状態をつくる
-        pwm_upper[i] = 0;  // 上アームVuをオフ
-        pwm_lower[i] = 1;  // 下アームVdをオン
+        pwm_upper_V = 0;  // 上アームVuをオフ
+        pwm_lower_V = 1;  // 下アームVdをオン
 
         // モード3の時間幅 T3 = Ton-Tdt を計算
         uvw[i].upper_us = uvw[i].duty * 1000000 / Frequency_ - DeadTime_;
@@ -242,29 +242,29 @@
         // Tdt[μs]経過してからタイムアウトでこの関数自身をコール
         pwm[i].attach_us(this, &ThreePhasePWM::PwmVout, DeadTime_);
 
-        pwm_upper[i] = 0;         // 上アームVuをオフ
-        pwm_lower[i] = 0;         // 下アームVdをオフ
+        pwm_upper_V = 0;         // 上アームVuをオフ
+        pwm_lower_V = 0;         // 下アームVdをオフ
     }
     else if( uvw[i].mode == 3 ) { // モードが3のとき、Tonの状態をつくる
         // T3[μs]経過してからタイムアウトでこの関数自身をコール
         pwm[i].attach_us(this, &ThreePhasePWM::PwmVout, uvw[i].upper_us);
 
-        pwm_upper[i] = 1;         // 上アームVuをオン
-        pwm_lower[i] = 0;         // 下アームVdをオフ
+        pwm_upper_V = 1;         // 上アームVuをオン
+        pwm_lower_V = 0;         // 下アームVdをオフ
     }
     else if( uvw[i].mode == 4 ) { // モードが4のとき、デッドタイムをつくる
         // Tdt[μs]経過してからタイムアウトでこの関数自身をコール
         pwm[i].attach_us(this, &ThreePhasePWM::PwmVout, DeadTime_);
 
-        pwm_upper[i] = 0;         // 上アームVuをオフ
-        pwm_lower[i] = 0;         // 下アームVdをオフ
+        pwm_upper_V = 0;         // 上アームVuをオフ
+        pwm_lower_V = 0;         // 下アームVdをオフ
     }
     else {                     // モードが5のとき、Toffの状態をつくる
         // T5(=T1)[μs]経過してからタイムアウトでこの関数自身をコール
         pwm[i].attach_us(this, &ThreePhasePWM::PwmVout, uvw[i].lower_us);
 
-        pwm_upper[i] = 0;         // 上アームVuをオフ
-        pwm_lower[i] = 1;         // 下アームVdをオン
+        pwm_upper_V = 0;         // 上アームVuをオフ
+        pwm_lower_V = 1;         // 下アームVdをオン
 
         uvw[i].mode = 0;          // チョッピングのオンオフを決定するモードを0にする
     }         
@@ -275,8 +275,8 @@
     uvw[i].mode += 1;   //チョッピングのオンオフを決定するモードを1増やす
 
     if( uvw[i].mode == 1 ){ // モードが1のとき、Toffの状態をつくる
-        pwm_upper[i] = 0;  // 上アームWuをオフ
-        pwm_lower[i] = 1;  // 下アームWdをオン
+        pwm_upper_W = 0;  // 上アームWuをオフ
+        pwm_lower_W = 1;  // 下アームWdをオン
 
         // モード3の時間幅 T3 = Ton-Tdt を計算
         uvw[i].upper_us = uvw[i].duty * 1000000 / Frequency_ - DeadTime_;
@@ -296,29 +296,29 @@
         // Tdt[μs]経過してからタイムアウトでこの関数自身をコール
         pwm[i].attach_us(this, &ThreePhasePWM::PwmWout, DeadTime_);
 
-        pwm_upper[i] = 0;         // 上アームWuをオフ
-        pwm_lower[i] = 0;         // 下アームWdをオフ
+        pwm_upper_W = 0;         // 上アームWuをオフ
+        pwm_lower_W = 0;         // 下アームWdをオフ
     }
     else if( uvw[i].mode == 3 ) { // モードが3のとき、Tonの状態をつくる
         // T3[μs]経過してからタイムアウトでこの関数自身をコール
         pwm[i].attach_us(this, &ThreePhasePWM::PwmWout, uvw[i].upper_us);
 
-        pwm_upper[i] = 1;         // 上アームWuをオン
-        pwm_lower[i] = 0;         // 下アームWdをオフ
+        pwm_upper_W = 1;         // 上アームWuをオン
+        pwm_lower_W = 0;         // 下アームWdをオフ
     }
     else if( uvw[i].mode == 4 ) { // モードが4のとき、デッドタイムをつくる
         // Tdt[μs]経過してからタイムアウトでこの関数自身をコール
         pwm[i].attach_us(this, &ThreePhasePWM::PwmWout, DeadTime_);
 
-        pwm_upper[i] = 0;         // 上アームWuをオフ
-        pwm_lower[i] = 0;         // 下アームWdをオフ
+        pwm_upper_W = 0;         // 上アームWuをオフ
+        pwm_lower_W = 0;         // 下アームWdをオフ
     }
     else {                     // モードが5のとき、Toffの状態をつくる
         // T5(=T1)[μs]経過してからタイムアウトでこの関数自身をコール
         pwm[i].attach_us(this, &ThreePhasePWM::PwmWout, uvw[i].lower_us);
 
-        pwm_upper[i] = 0;         // 上アームWuをオフ
-        pwm_lower[i] = 1;         // 下アームWdをオン
+        pwm_upper_W = 0;         // 上アームWuをオフ
+        pwm_lower_W = 1;         // 下アームWdをオン
 
         uvw[i].mode = 0;          // チョッピングのオンオフを決定するモードを0にする
     }