サーボモータをPWM制御で動作させる関数
Dependents: 2020_lab_No2reactor_contorl_ver2
ServoMotor.cpp
- Committer:
- _ai_
- Date:
- 2020-07-29
- Revision:
- 4:314817c5ec80
- Parent:
- 3:5fb516a5f593
- Child:
- 5:d3104455fed9
File content as of revision 4:314817c5ec80:
#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_=0.0){ target_deg_ = 0.00001; } 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で発生する) }