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

3PhasePWM.h

Committer:
porizou
Date:
2018-01-26
Revision:
2:d1e5f63a3568
Parent:
1:209637768493

File content as of revision 2:d1e5f63a3568:

#ifndef __3PhasePWM_h
#define __3PhasePWM_h

#include "mbed.h"


/* 
 *キャリアの波形の指定
 *TOOTHWAVEかTRIANGLERWAVEのどちらかを定義
*/
#define TOOTHWAVE  //キャリアの波形 ノコギリ波
//#define TRIANGLERWAVE //キャリアの波形 三角波

#define TMIN 3 //PWM時間幅の最小値 [μs]


class ThreePhasePWM {


public:
    ThreePhasePWM(PinName upper_U, PinName upper_V, PinName upper_W,
              PinName lower_U, PinName lower_V, PinName lower_W,
              float Frequency, float DeadTime);
    /*
     * upper_U U相上アームディジタル出力ポート
     * upper_V V相上アームディジタル出力ポート
     * upper_W W相上アームディジタル出力ポート
     * lower_U U相下アームディジタル出力ポート
     * lower_V V相下アームディジタル出力ポート
     * lower_W W相下アームディジタル出力ポート
     * Frequency PWMキャリア周波数[Hz]
     * deadtime  デッドタイムの時間幅[μs]
     */

    void startPWM(void); //PWM開始
    void stopPWM(void);  //PWM停止


    void setU(float duty_u); //U相Duty比を設定
    void setV(float duty_v); //V相Duty比を設定
    void setW(float duty_w); //W相Duty比を設定
    void setUVW(float duty_u, float duty_v , float duty_w); //3相Duty比を設定


private:

    void PwmUout(void); //U相PWM出力関数
    void PwmVout(void); //V相PWM出力関数
    void PwmWout(void); //W相PWM出力関数

    DigitalOut pwm_upper_U; //U相上アームディジタル出力ポート
    DigitalOut pwm_upper_V; //V相上アームディジタル出力ポート
    DigitalOut pwm_upper_W; //W相上アームディジタル出力ポート
    DigitalOut pwm_lower_U; //U相下アームディジタル出力ポート
    DigitalOut pwm_lower_V; //V相下アームディジタル出力ポート
    DigitalOut pwm_lower_W; //W相下アームディジタル出力ポート

    Timeout pwm[3]; //タイムアウト関数の宣言

    float Frequency_; //PWMキャリア周波数 F[Hz]
    float DeadTime_;     //デットタイム Tdt [μs]

    typedef struct struct_PWM_param{
        float duty;         // 0.0-1.0, PWMデューティ比
        unsigned char mode; // チョッピングのON,OFFを決定するモード
        long  upper_us;     // 上側アームをONにする時間幅[μs]
        long  lower_us;     // 下側アームをONにする時間幅[μs]
    }PWMparam;
    
    PWMparam uvw[3];
};

#endif 
//3PhasePWM_H