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

Dependents:   2020_lab_No2reactor_contorl_ver2

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers ServoMotor.cpp Source File

ServoMotor.cpp

00001 #include "mbed.h"
00002 #include "ServoMotor.h"
00003 
00004 
00005 /* ServoMotorコンストラクタ */
00006 ServoMotor::ServoMotor( PinName servo_pwmport_,
00007                         float   minDeg_,
00008                         float   maxDeg_,
00009                         float   pulse_width_,
00010                         float   minDPLW_,
00011                         float   maxDPLW_
00012                       ):servo_pwmport(servo_pwmport_)
00013 {
00014 
00015     minDeg = minDeg_;
00016     maxDeg = maxDeg_;
00017     pulse_width = pulse_width_;
00018     minDPLW = minDPLW_;
00019     maxDPLW = maxDPLW_;
00020 
00021     servo_pwmport.period(pulse_width);                  //pwm周期を20msにする
00022 
00023     decomposition_value = maxDeg / (maxDPLW - minDPLW); //分解値の計算
00024 }
00025 
00026 
00027 
00028 /* モータを回転させる関数 引数:目標角度 */
00029 void ServoMotor::rot(float target_deg_)
00030 {
00031 //    if(target_deg_=0.0){
00032 //        target_deg_ = 0.01;
00033 //    }
00034     
00035     if(target_deg_ == output_deg_b){    //もし前回の値と同じ値が続いたときは電圧の出力はしないためのフィルタ
00036         ;
00037     }else{
00038         if(target_deg_< minDeg)         //minDeg度より小さい値はminDegにする
00039             target_deg_ = minDeg;
00040         else if(target_deg_ > maxDeg)   //maxDeg度より大きい値はmaxDegにする
00041             target_deg_ = maxDeg;
00042     
00043         output_deg = target_deg_;
00044         servo_pwmport.pulsewidth((output_deg / decomposition_value) + minDPLW); //pwmのパルスの出力幅を計算。この計算はmaxDPLWがmaxDeg,minDPLWがminDegになるような計算式.
00045         
00046         output_deg_b = output_deg;
00047     }
00048 }
00049 
00050 
00051 void ServoMotor::weak_condition()
00052 {
00053     servo_pwmport.pulsewidth(0.00005);   //脱力状態(50usで発生する)
00054 }
00055