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

Dependents:   2020_lab_No2reactor_contorl_ver2

Committer:
_ai_
Date:
Fri Oct 18 16:18:07 2019 +0000
Revision:
0:908ddd5c615d
Child:
1:66011300b267
ServoMotor func

Who changed what in which revision?

UserRevisionLine numberNew contents of line
_ai_ 0:908ddd5c615d 1 #include "mbed.h"
_ai_ 0:908ddd5c615d 2 #include "ServoMotor.h"
_ai_ 0:908ddd5c615d 3
_ai_ 0:908ddd5c615d 4 ServoMotor_270::ServoMotor_270(PinName servo_pwmport_,float init_deg):servo_pwmport(servo_pwmport_){
_ai_ 0:908ddd5c615d 5 servo_pwmport.period(0.02); //pwm周期を20msにする
_ai_ 0:908ddd5c615d 6 output_deg = init_deg; //outputの初期化
_ai_ 0:908ddd5c615d 7 servo_pwmport.pulsewidth(0.0007);
_ai_ 0:908ddd5c615d 8 servo_pwmport.pulsewidth((init_deg/168750.0)+0.0007);
_ai_ 0:908ddd5c615d 9 }
_ai_ 0:908ddd5c615d 10
_ai_ 0:908ddd5c615d 11 void ServoMotor_270::rot(float input_deg){
_ai_ 0:908ddd5c615d 12
_ai_ 0:908ddd5c615d 13 float temp = 0.0;
_ai_ 0:908ddd5c615d 14
_ai_ 0:908ddd5c615d 15 if(input_deg<0.0){ //0度以下の値は0にする
_ai_ 0:908ddd5c615d 16 output_deg=0.0;
_ai_ 0:908ddd5c615d 17 }
_ai_ 0:908ddd5c615d 18 else if(input_deg>270.0){
_ai_ 0:908ddd5c615d 19 output_deg=270.0;
_ai_ 0:908ddd5c615d 20 }
_ai_ 0:908ddd5c615d 21
_ai_ 0:908ddd5c615d 22 output_deg=input_deg;
_ai_ 0:908ddd5c615d 23 servo_pwmport.pulsewidth((output_deg/168750.0)+0.0007);//pwmのパルスの出力幅を計算。この計算は23msが270度、7msが0度の計算式。
_ai_ 0:908ddd5c615d 24 }
_ai_ 0:908ddd5c615d 25
_ai_ 0:908ddd5c615d 26
_ai_ 0:908ddd5c615d 27 float ServoMotor_270::read(){
_ai_ 0:908ddd5c615d 28 return output_deg;
_ai_ 0:908ddd5c615d 29 }
_ai_ 0:908ddd5c615d 30
_ai_ 0:908ddd5c615d 31
_ai_ 0:908ddd5c615d 32 void ServoMotor_270::weak_condition(){
_ai_ 0:908ddd5c615d 33 servo_pwmport.pulsewidth(0.00005); //脱力状態(50usで発生する)
_ai_ 0:908ddd5c615d 34 }
_ai_ 0:908ddd5c615d 35