PID.cpp

Committer:
inst
Date:
2015-04-24
Revision:
0:e3c87254ed02

File content as of revision 0:e3c87254ed02:

#include "mbed.h"
#include "PID.h"

const float PID::mPCoeff = 0.5f;
const float PID::mICoeff = 0.1f;
const float PID::mDCoeff = 10.0f;
const float PID::mIRange = 0.2f;

PID::PID(){
    mI = 0.0f;
    mOldDiff = 0.0f;
}

PID::~PID(){
}

void PID::updatePid( float diff ){
    // P制御
    float c = diff * mPCoeff;
    
    // I制御
    if ( mOldDiff * diff < 0.0f ){
        mI = 0;
    }
    if ( abs( diff ) < mIRange ){
        c += mI * mICoeff;
        mI += diff;
    } else {
        mI = 0;
    }
    
    // D制御
    c += ( diff - mOldDiff ) * mDCoeff;
    
    // 値の範囲を-1.0~1.0にする
    if ( c > 1.0f ){
        c = 1.0f;
    } else if ( c < -1.0f ){
        c = -1.0f;
    }
    
    control( c );
    
    mOldDiff = diff;
}