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.
Fork of motor by
motor.h@1:2911b1a7b611, 2016-11-15 (annotated)
- Committer:
- adamsonk
- Date:
- Tue Nov 15 14:08:11 2016 +0000
- Revision:
- 1:2911b1a7b611
- Parent:
- 0:910b46b1e4ae
15.11 t??tav variant
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| kolibakter | 0:910b46b1e4ae | 1 | #ifndef MOTOR_H |
| kolibakter | 0:910b46b1e4ae | 2 | #define MOTOR_H |
| kolibakter | 0:910b46b1e4ae | 3 | #include "mbed.h" |
| kolibakter | 0:910b46b1e4ae | 4 | #include "PwmOut.h" |
| kolibakter | 0:910b46b1e4ae | 5 | #include "USBSerial.h" |
| kolibakter | 0:910b46b1e4ae | 6 | |
| kolibakter | 0:910b46b1e4ae | 7 | class Motor { |
| kolibakter | 0:910b46b1e4ae | 8 | public: |
| kolibakter | 0:910b46b1e4ae | 9 | Motor(); |
| kolibakter | 0:910b46b1e4ae | 10 | Motor(USBSerial *pc, PwmOut *pwm, DigitalOut *dir1, DigitalOut *dir2, DigitalIn *fault); |
| kolibakter | 0:910b46b1e4ae | 11 | |
| kolibakter | 0:910b46b1e4ae | 12 | uint8_t pid_on; |
| kolibakter | 0:910b46b1e4ae | 13 | int16_t encTicks; |
| kolibakter | 0:910b46b1e4ae | 14 | volatile int16_t speed; |
| kolibakter | 0:910b46b1e4ae | 15 | uint8_t pgain, igain, dgain; |
| kolibakter | 0:910b46b1e4ae | 16 | |
| kolibakter | 0:910b46b1e4ae | 17 | void setup(); |
| kolibakter | 0:910b46b1e4ae | 18 | /* |
| kolibakter | 0:910b46b1e4ae | 19 | * Run this to update speed |
| kolibakter | 0:910b46b1e4ae | 20 | */ |
| kolibakter | 0:910b46b1e4ae | 21 | void pid(int16_t encTicks); |
| kolibakter | 0:910b46b1e4ae | 22 | void pid2(int16_t encTicks); |
| kolibakter | 0:910b46b1e4ae | 23 | void init(); |
| kolibakter | 0:910b46b1e4ae | 24 | int16_t getSpeed(); |
| kolibakter | 0:910b46b1e4ae | 25 | void setSpeed (int16_t speed); |
| kolibakter | 0:910b46b1e4ae | 26 | void getPIDGain(char *gain); |
| kolibakter | 0:910b46b1e4ae | 27 | void forward(float pwm); |
| kolibakter | 0:910b46b1e4ae | 28 | void backward(float pwm); |
| kolibakter | 0:910b46b1e4ae | 29 | private: |
| adamsonk | 1:2911b1a7b611 | 30 | static const unsigned int PWM_PERIOD_US = 20000; |
| kolibakter | 0:910b46b1e4ae | 31 | |
| kolibakter | 0:910b46b1e4ae | 32 | USBSerial *_pc; |
| kolibakter | 0:910b46b1e4ae | 33 | PwmOut *_pwm; |
| kolibakter | 0:910b46b1e4ae | 34 | DigitalOut *_dir1; |
| kolibakter | 0:910b46b1e4ae | 35 | DigitalOut *_dir2; |
| kolibakter | 0:910b46b1e4ae | 36 | DigitalIn *_fault; |
| kolibakter | 0:910b46b1e4ae | 37 | |
| kolibakter | 0:910b46b1e4ae | 38 | union doublebyte { |
| kolibakter | 0:910b46b1e4ae | 39 | unsigned int value; |
| kolibakter | 0:910b46b1e4ae | 40 | unsigned char bytes[2]; |
| kolibakter | 0:910b46b1e4ae | 41 | }; |
| kolibakter | 0:910b46b1e4ae | 42 | |
| kolibakter | 0:910b46b1e4ae | 43 | uint8_t enc_dir; |
| kolibakter | 0:910b46b1e4ae | 44 | uint8_t enc_last; |
| kolibakter | 0:910b46b1e4ae | 45 | uint8_t enc_now; |
| kolibakter | 0:910b46b1e4ae | 46 | |
| kolibakter | 0:910b46b1e4ae | 47 | uint8_t dir; |
| kolibakter | 0:910b46b1e4ae | 48 | |
| kolibakter | 0:910b46b1e4ae | 49 | int16_t currentPWM; |
| kolibakter | 0:910b46b1e4ae | 50 | uint8_t motor_polarity; |
| kolibakter | 0:910b46b1e4ae | 51 | |
| kolibakter | 0:910b46b1e4ae | 52 | float pidSpeed0; |
| kolibakter | 0:910b46b1e4ae | 53 | float pidSpeed1; |
| kolibakter | 0:910b46b1e4ae | 54 | float pidError0; |
| kolibakter | 0:910b46b1e4ae | 55 | float pidError1; |
| kolibakter | 0:910b46b1e4ae | 56 | float pidError2; |
| kolibakter | 0:910b46b1e4ae | 57 | float pidSetpoint; |
| kolibakter | 0:910b46b1e4ae | 58 | |
| kolibakter | 0:910b46b1e4ae | 59 | /* |
| kolibakter | 0:910b46b1e4ae | 60 | union doublebyte wcount; |
| kolibakter | 0:910b46b1e4ae | 61 | union doublebyte decoder_count; |
| kolibakter | 0:910b46b1e4ae | 62 | |
| kolibakter | 0:910b46b1e4ae | 63 | uint8_t dir; |
| kolibakter | 0:910b46b1e4ae | 64 | */ |
| kolibakter | 0:910b46b1e4ae | 65 | |
| kolibakter | 0:910b46b1e4ae | 66 | uint8_t fail_counter; |
| kolibakter | 0:910b46b1e4ae | 67 | uint8_t send_speed; |
| kolibakter | 0:910b46b1e4ae | 68 | uint8_t failsafe; |
| kolibakter | 0:910b46b1e4ae | 69 | uint8_t leds_on; |
| kolibakter | 0:910b46b1e4ae | 70 | |
| kolibakter | 0:910b46b1e4ae | 71 | int16_t sp, sp_pid, der; |
| kolibakter | 0:910b46b1e4ae | 72 | int16_t intgrl, prop; |
| kolibakter | 0:910b46b1e4ae | 73 | //int16_t count, speed; |
| kolibakter | 0:910b46b1e4ae | 74 | int16_t csum; |
| kolibakter | 0:910b46b1e4ae | 75 | int16_t err, err_prev; |
| kolibakter | 0:910b46b1e4ae | 76 | |
| kolibakter | 0:910b46b1e4ae | 77 | int16_t pwm, pwm_min, pwmmin; |
| kolibakter | 0:910b46b1e4ae | 78 | int16_t imax, err_max; |
| kolibakter | 0:910b46b1e4ae | 79 | uint8_t pid_multi, update_pid; |
| kolibakter | 0:910b46b1e4ae | 80 | |
| kolibakter | 0:910b46b1e4ae | 81 | uint16_t stall_counter; |
| kolibakter | 0:910b46b1e4ae | 82 | uint16_t stallCount; |
| kolibakter | 0:910b46b1e4ae | 83 | uint16_t prevStallCount; |
| kolibakter | 0:910b46b1e4ae | 84 | uint16_t stallWarningLimit; |
| kolibakter | 0:910b46b1e4ae | 85 | uint16_t stallErrorLimit; |
| kolibakter | 0:910b46b1e4ae | 86 | uint8_t stallLevel; |
| kolibakter | 0:910b46b1e4ae | 87 | uint8_t stallChanged; |
| kolibakter | 0:910b46b1e4ae | 88 | //int16_t currentPWM; |
| kolibakter | 0:910b46b1e4ae | 89 | |
| kolibakter | 0:910b46b1e4ae | 90 | |
| kolibakter | 0:910b46b1e4ae | 91 | void reset_pid(); |
| kolibakter | 0:910b46b1e4ae | 92 | |
| kolibakter | 0:910b46b1e4ae | 93 | }; |
| kolibakter | 0:910b46b1e4ae | 94 | #endif //MOTOR_H |
