サーボモータをPWM制御で動作させる関数
Dependents: 2020_lab_No2reactor_contorl_ver2
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
Generated on Fri Aug 12 2022 10:58:06 by
1.7.2