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

Committer:
porizou
Date:
Fri Jan 26 01:13:45 2018 +0000
Revision:
0:e82b1532eec5
Child:
1:209637768493
3PhasePWM

Who changed what in which revision?

UserRevisionLine numberNew contents of line
porizou 0:e82b1532eec5 1 #ifndef __3PhasePWM_h
porizou 0:e82b1532eec5 2 #define __3PhasePWM_h
porizou 0:e82b1532eec5 3
porizou 0:e82b1532eec5 4 #include "mbed.h"
porizou 0:e82b1532eec5 5
porizou 0:e82b1532eec5 6
porizou 0:e82b1532eec5 7 /*
porizou 0:e82b1532eec5 8 *キャリアの波形の指定
porizou 0:e82b1532eec5 9 *TOOTHWAVEかTRIANGLERWAVEのどちらかを定義
porizou 0:e82b1532eec5 10 */
porizou 0:e82b1532eec5 11 #define TOOTHWAVE //キャリアの波形 ノコギリ波
porizou 0:e82b1532eec5 12 //#define TRIANGLERWAVE //キャリアの波形 三角波
porizou 0:e82b1532eec5 13
porizou 0:e82b1532eec5 14 #define TMIN 3 //PWM時間幅の最小値 [μs]
porizou 0:e82b1532eec5 15
porizou 0:e82b1532eec5 16
porizou 0:e82b1532eec5 17 class ThreePhasePWM {
porizou 0:e82b1532eec5 18
porizou 0:e82b1532eec5 19
porizou 0:e82b1532eec5 20 public:
porizou 0:e82b1532eec5 21 ThreePhasePWM(PinName upper_U, PinName upper_V, PinName upper_W,
porizou 0:e82b1532eec5 22 PinName lower_U, PinName lower_V, PinName lower_W,
porizou 0:e82b1532eec5 23 float Frequency, float DeadTime);
porizou 0:e82b1532eec5 24 /*
porizou 0:e82b1532eec5 25 * upper_U U相上アームディジタル出力ポート
porizou 0:e82b1532eec5 26 * upper_V V相上アームディジタル出力ポート
porizou 0:e82b1532eec5 27 * upper_W W相上アームディジタル出力ポート
porizou 0:e82b1532eec5 28 * lower_U U相下アームディジタル出力ポート
porizou 0:e82b1532eec5 29 * lower_V V相下アームディジタル出力ポート
porizou 0:e82b1532eec5 30 * lower_W W相下アームディジタル出力ポート
porizou 0:e82b1532eec5 31 * Frequency PWMキャリア周波数[Hz]
porizou 0:e82b1532eec5 32 * deadtime デッドタイムの時間幅[μs]
porizou 0:e82b1532eec5 33 */
porizou 0:e82b1532eec5 34
porizou 0:e82b1532eec5 35 void startPWM(void); //PWM開始
porizou 0:e82b1532eec5 36 void stopPWM(void); //PWM停止
porizou 0:e82b1532eec5 37
porizou 0:e82b1532eec5 38
porizou 0:e82b1532eec5 39 void setU(float duty_u); //U相Duty比を設定
porizou 0:e82b1532eec5 40 void setV(float duty_v); //V相Duty比を設定
porizou 0:e82b1532eec5 41 void setW(float duty_w); //W相Duty比を設定
porizou 0:e82b1532eec5 42 void setUVW(float duty_u, float duty_v , float duty_w); //3相Duty比を設定
porizou 0:e82b1532eec5 43
porizou 0:e82b1532eec5 44
porizou 0:e82b1532eec5 45 private:
porizou 0:e82b1532eec5 46
porizou 0:e82b1532eec5 47 void PwmUout(void); //U相PWM出力関数
porizou 0:e82b1532eec5 48 void PwmVout(void); //V相PWM出力関数
porizou 0:e82b1532eec5 49 void PwmWout(void); //W相PWM出力関数
porizou 0:e82b1532eec5 50
porizou 0:e82b1532eec5 51 DigitalOut pwm_upper_U; //U相上アームディジタル出力ポート
porizou 0:e82b1532eec5 52 DigitalOut pwm_upper_V; //V相上アームディジタル出力ポート
porizou 0:e82b1532eec5 53 DigitalOut pwm_upper_W; //W相上アームディジタル出力ポート
porizou 0:e82b1532eec5 54 DigitalOut pwm_lower_U; //U相下アームディジタル出力ポート
porizou 0:e82b1532eec5 55 DigitalOut pwm_lower_V; //V相下アームディジタル出力ポート
porizou 0:e82b1532eec5 56 DigitalOut pwm_lower_W; //W相下アームディジタル出力ポート
porizou 0:e82b1532eec5 57
porizou 0:e82b1532eec5 58 Timeout pwm[3]; //タイムアウト関数の宣言
porizou 0:e82b1532eec5 59
porizou 0:e82b1532eec5 60 float Frequency_; //PWMキャリア周波数 F[Hz]
porizou 0:e82b1532eec5 61 float DeadTime_; //デットタイム Tdt [μs]
porizou 0:e82b1532eec5 62
porizou 0:e82b1532eec5 63 typedef struct struct_PWM_param{
porizou 0:e82b1532eec5 64 float duty; // 0.0-1.0, PWMデューティ比
porizou 0:e82b1532eec5 65 unsigned char mode; // チョッピングのON,OFFを決定するモード
porizou 0:e82b1532eec5 66 long upper_us; // 上側アームをONにする時間幅[μs]
porizou 0:e82b1532eec5 67 long lower_us; // 下側アームをONにする時間幅[μs]
porizou 0:e82b1532eec5 68 }PWMparam;
porizou 0:e82b1532eec5 69
porizou 0:e82b1532eec5 70 PWMparam uvw[3];
porizou 0:e82b1532eec5 71 };
porizou 0:e82b1532eec5 72
porizou 0:e82b1532eec5 73 #endif
porizou 0:e82b1532eec5 74 //3PhasePWM_H