3相インバータで3相PWMを生成するためのライブラリです。ブラシレスDCモータの制御に利用できます。
Diff: 3PhasePWM.cpp
- Revision:
- 1:209637768493
- Parent:
- 0:e82b1532eec5
diff -r e82b1532eec5 -r 209637768493 3PhasePWM.cpp --- 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にする }