Rauno U
/
Miisu
Six crescent shaped legs
PIDController.cpp@47:4f418a4b0051, 2016-06-21 (annotated)
- Committer:
- sim642
- Date:
- Tue Jun 21 14:43:44 2016 +0000
- Revision:
- 47:4f418a4b0051
- Parent:
- 13:dc5f5f19e4e8
Byte based communication
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sim642 | 2:cf0147952fb9 | 1 | #include "PIDController.hpp" |
sim642 | 2:cf0147952fb9 | 2 | |
sim642 | 13:dc5f5f19e4e8 | 3 | PIDController::PIDController(PIDData nData) : |
sim642 | 13:dc5f5f19e4e8 | 4 | data(nData) |
sim642 | 2:cf0147952fb9 | 5 | { |
sim642 | 2:cf0147952fb9 | 6 | reset(); |
sim642 | 2:cf0147952fb9 | 7 | } |
sim642 | 2:cf0147952fb9 | 8 | |
sim642 | 2:cf0147952fb9 | 9 | PIDController::~PIDController() |
sim642 | 2:cf0147952fb9 | 10 | { |
sim642 | 2:cf0147952fb9 | 11 | |
sim642 | 2:cf0147952fb9 | 12 | } |
sim642 | 2:cf0147952fb9 | 13 | |
sim642 | 2:cf0147952fb9 | 14 | void PIDController::reset() |
sim642 | 2:cf0147952fb9 | 15 | { |
sim642 | 2:cf0147952fb9 | 16 | timer.reset(); |
sim642 | 2:cf0147952fb9 | 17 | timer.start(); |
sim642 | 2:cf0147952fb9 | 18 | prev_error = 0; |
sim642 | 2:cf0147952fb9 | 19 | integral = 0; |
sim642 | 2:cf0147952fb9 | 20 | } |
sim642 | 2:cf0147952fb9 | 21 | |
sim642 | 2:cf0147952fb9 | 22 | float PIDController::step(float error) |
sim642 | 2:cf0147952fb9 | 23 | { |
sim642 | 2:cf0147952fb9 | 24 | float dt = timer.read(); |
sim642 | 2:cf0147952fb9 | 25 | timer.reset(); // timer keeps running |
sim642 | 2:cf0147952fb9 | 26 | |
sim642 | 2:cf0147952fb9 | 27 | integral += error * dt; |
sim642 | 2:cf0147952fb9 | 28 | float derivative = (error - prev_error) / dt; |
sim642 | 13:dc5f5f19e4e8 | 29 | float out = data.Kp * error + data.Ki * integral + data.Kd * derivative; |
sim642 | 2:cf0147952fb9 | 30 | |
sim642 | 2:cf0147952fb9 | 31 | prev_error = error; |
sim642 | 2:cf0147952fb9 | 32 | |
sim642 | 2:cf0147952fb9 | 33 | return out; |
sim642 | 2:cf0147952fb9 | 34 | } |
sim642 | 2:cf0147952fb9 | 35 | |
sim642 | 13:dc5f5f19e4e8 | 36 | void PIDController::set(PIDData nData) |
sim642 | 2:cf0147952fb9 | 37 | { |
sim642 | 13:dc5f5f19e4e8 | 38 | data = nData; |
sim642 | 2:cf0147952fb9 | 39 | } |