Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
shared/PID_Control/PID.cpp@0:ee7e9405e1c7, 2021-04-14 (annotated)
- Committer:
- e2011220
- Date:
- Wed Apr 14 07:26:19 2021 +0000
- Revision:
- 0:ee7e9405e1c7
first
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| e2011220 | 0:ee7e9405e1c7 | 1 | #include "PID.h" |
| e2011220 | 0:ee7e9405e1c7 | 2 | |
| e2011220 | 0:ee7e9405e1c7 | 3 | double PID::get_control() |
| e2011220 | 0:ee7e9405e1c7 | 4 | { |
| e2011220 | 0:ee7e9405e1c7 | 5 | _calc_p(); |
| e2011220 | 0:ee7e9405e1c7 | 6 | return _get_control(); |
| e2011220 | 0:ee7e9405e1c7 | 7 | } |
| e2011220 | 0:ee7e9405e1c7 | 8 | |
| e2011220 | 0:ee7e9405e1c7 | 9 | void PID::set_state(double target, double current) |
| e2011220 | 0:ee7e9405e1c7 | 10 | { |
| e2011220 | 0:ee7e9405e1c7 | 11 | _pid_state.target = target; |
| e2011220 | 0:ee7e9405e1c7 | 12 | _pid_state.current = current; |
| e2011220 | 0:ee7e9405e1c7 | 13 | } |
| e2011220 | 0:ee7e9405e1c7 | 14 | |
| e2011220 | 0:ee7e9405e1c7 | 15 | void PID::set_PID(double k, double Ti, double Td) |
| e2011220 | 0:ee7e9405e1c7 | 16 | { |
| e2011220 | 0:ee7e9405e1c7 | 17 | _pid_state.k = k; |
| e2011220 | 0:ee7e9405e1c7 | 18 | _pid_state.Ti = Ti; |
| e2011220 | 0:ee7e9405e1c7 | 19 | _pid_state.Td = Td; |
| e2011220 | 0:ee7e9405e1c7 | 20 | reset(); |
| e2011220 | 0:ee7e9405e1c7 | 21 | } |
| e2011220 | 0:ee7e9405e1c7 | 22 | |
| e2011220 | 0:ee7e9405e1c7 | 23 | void PID::reset() |
| e2011220 | 0:ee7e9405e1c7 | 24 | { |
| e2011220 | 0:ee7e9405e1c7 | 25 | _reset(); |
| e2011220 | 0:ee7e9405e1c7 | 26 | if(_pid_state.Ti != 0) |
| e2011220 | 0:ee7e9405e1c7 | 27 | _tick_i.attach(callback(this, &PID::_on_isr_i), _pid_state.Ti); |
| e2011220 | 0:ee7e9405e1c7 | 28 | if(_pid_state.Td != 0) |
| e2011220 | 0:ee7e9405e1c7 | 29 | _tick_d.attach(callback(this, &PID::_on_isr_d), _pid_state.Td); |
| e2011220 | 0:ee7e9405e1c7 | 30 | } |
| e2011220 | 0:ee7e9405e1c7 | 31 | |
| e2011220 | 0:ee7e9405e1c7 | 32 | void PID::_on_isr_i() |
| e2011220 | 0:ee7e9405e1c7 | 33 | { |
| e2011220 | 0:ee7e9405e1c7 | 34 | _calc_p(); |
| e2011220 | 0:ee7e9405e1c7 | 35 | _calc_i(); |
| e2011220 | 0:ee7e9405e1c7 | 36 | } |
| e2011220 | 0:ee7e9405e1c7 | 37 | |
| e2011220 | 0:ee7e9405e1c7 | 38 | void PID::_on_isr_d() |
| e2011220 | 0:ee7e9405e1c7 | 39 | { |
| e2011220 | 0:ee7e9405e1c7 | 40 | _calc_p(); |
| e2011220 | 0:ee7e9405e1c7 | 41 | _calc_d(); |
| e2011220 | 0:ee7e9405e1c7 | 42 | } |