サーボモータをPWM制御で動作させる関数

Dependents:   2020_lab_No2reactor_contorl_ver2

ServoMotor.cpp

Committer:
_ai_
Date:
2019-10-24
Revision:
1:66011300b267
Parent:
0:908ddd5c615d
Child:
3:5fb516a5f593

File content as of revision 1:66011300b267:

#include "mbed.h"
#include "ServoMotor.h"


/* ServoMotorコンストラクタ */
ServoMotor::ServoMotor( PinName servo_pwmport_,
                        float   minDeg_,
                        float   maxDeg_,
                        float   pulse_width_,
                        float   minDPLW_,
                        float   maxDPLW_
                      ):servo_pwmport(servo_pwmport_)
{

    minDeg = minDeg_;
    maxDeg = maxDeg_;
    pulse_width = pulse_width_;
    minDPLW = minDPLW_;
    maxDPLW = maxDPLW_;

    servo_pwmport.period(pulse_width);                  //pwm周期を20msにする

    decomposition_value = maxDeg / (maxDPLW - minDPLW); //分解値の計算
}



/* モータを回転させる関数 引数:目標角度 */
void ServoMotor::rot(float target_deg_)
{
    if(target_deg_ == output_deg_b){
        ;
    }else{
        if(target_deg_< minDeg)         //minDeg度より小さい値はminDegにする
            target_deg_ = minDeg;
        else if(target_deg_ > maxDeg)   //maxDeg度より大きい値はmaxDegにする
            target_deg_ = maxDeg;
    
        output_deg = target_deg_;
        servo_pwmport.pulsewidth((output_deg / decomposition_value) + minDPLW); //pwmのパルスの出力幅を計算。この計算はmaxDPLWがmaxDeg,minDPLWがminDegになるような計算式.
        
        output_deg_b = output_deg;
    }
}


void ServoMotor::weak_condition()
{
    servo_pwmport.pulsewidth(0.00005);   //脱力状態(50usで発生する)
}