サーボモータをPWM制御で動作させる関数
Dependents: 2020_lab_No2reactor_contorl_ver2
ServoMotor.cpp@0:908ddd5c615d, 2019-10-18 (annotated)
- 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?
User | Revision | Line number | New 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 |