サーボモータを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で発生する) }