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 ESC by
esc.h@0:116260c66d88, 2013-07-19 (annotated)
- Committer:
- MatteoT
- Date:
- Fri Jul 19 03:11:05 2013 +0000
- Revision:
- 0:116260c66d88
- Child:
- 1:735702ea5519
constructor with PinName; 0-1.0f thruttle range; others
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| MatteoT | 0:116260c66d88 | 1 | #ifndef _ESC_H_ |
| MatteoT | 0:116260c66d88 | 2 | #define _ESC_H_ |
| MatteoT | 0:116260c66d88 | 3 | |
| MatteoT | 0:116260c66d88 | 4 | /** ESC class used to controll standard Electronic Speed Controllers for brushless motors of RC models. |
| MatteoT | 0:116260c66d88 | 5 | * Simple usage example: |
| MatteoT | 0:116260c66d88 | 6 | * @code |
| MatteoT | 0:116260c66d88 | 7 | * |
| MatteoT | 0:116260c66d88 | 8 | #include "mbed.h" |
| MatteoT | 0:116260c66d88 | 9 | #include "esc.h" //include the ESC class |
| MatteoT | 0:116260c66d88 | 10 | |
| MatteoT | 0:116260c66d88 | 11 | |
| MatteoT | 0:116260c66d88 | 12 | int main() |
| MatteoT | 0:116260c66d88 | 13 | { |
| MatteoT | 0:116260c66d88 | 14 | ESC esc1(p26); //declare the ESC as connected to pin p26. |
| MatteoT | 0:116260c66d88 | 15 | float throttle_var = 0.5 //that means 50%. |
| MatteoT | 0:116260c66d88 | 16 | |
| MatteoT | 0:116260c66d88 | 17 | while(1) |
| MatteoT | 0:116260c66d88 | 18 | { |
| MatteoT | 0:116260c66d88 | 19 | //... update throttle_var ... |
| MatteoT | 0:116260c66d88 | 20 | |
| MatteoT | 0:116260c66d88 | 21 | esc1 = throttle_var; //memorize the throttle value (it doesn't send it to the ESC). |
| MatteoT | 0:116260c66d88 | 22 | |
| MatteoT | 0:116260c66d88 | 23 | //... do whatever you want - e.g. call esc1.setThrottle(throttle_var) again ... |
| MatteoT | 0:116260c66d88 | 24 | |
| MatteoT | 0:116260c66d88 | 25 | esc1(); //actually sets the throttle to the ESC. |
| MatteoT | 0:116260c66d88 | 26 | |
| MatteoT | 0:116260c66d88 | 27 | wait_ms(20); //20ms is the default period of the ESC pwm; the ESC may not run faster. |
| MatteoT | 0:116260c66d88 | 28 | } |
| MatteoT | 0:116260c66d88 | 29 | } |
| MatteoT | 0:116260c66d88 | 30 | * @endcode |
| MatteoT | 0:116260c66d88 | 31 | * |
| MatteoT | 0:116260c66d88 | 32 | * Another example: |
| MatteoT | 0:116260c66d88 | 33 | * |
| MatteoT | 0:116260c66d88 | 34 | * @code |
| MatteoT | 0:116260c66d88 | 35 | * |
| MatteoT | 0:116260c66d88 | 36 | #include "mbed.h" |
| MatteoT | 0:116260c66d88 | 37 | #include "esc.h" |
| MatteoT | 0:116260c66d88 | 38 | |
| MatteoT | 0:116260c66d88 | 39 | ESC esc1(PTD4); |
| MatteoT | 0:116260c66d88 | 40 | ESC esc2(PTA12); |
| MatteoT | 0:116260c66d88 | 41 | ESC esc3(PTA4); |
| MatteoT | 0:116260c66d88 | 42 | ESC esc4(PTA5); |
| MatteoT | 0:116260c66d88 | 43 | |
| MatteoT | 0:116260c66d88 | 44 | Serial pc(USBTX, USBRX); // tx, rx |
| MatteoT | 0:116260c66d88 | 45 | |
| MatteoT | 0:116260c66d88 | 46 | int main() { |
| MatteoT | 0:116260c66d88 | 47 | |
| MatteoT | 0:116260c66d88 | 48 | char c; |
| MatteoT | 0:116260c66d88 | 49 | int var = 0; |
| MatteoT | 0:116260c66d88 | 50 | |
| MatteoT | 0:116260c66d88 | 51 | while(1) { |
| MatteoT | 0:116260c66d88 | 52 | c = pc.getc(); |
| MatteoT | 0:116260c66d88 | 53 | |
| MatteoT | 0:116260c66d88 | 54 | if (c == 'u') { |
| MatteoT | 0:116260c66d88 | 55 | if (var < 100) { |
| MatteoT | 0:116260c66d88 | 56 | var++; |
| MatteoT | 0:116260c66d88 | 57 | } |
| MatteoT | 0:116260c66d88 | 58 | if (esc1.setThrottle(var) && esc2.setThrottle(var) && esc3.setThrottle(var) && esc4.setThrottle(var)) { |
| MatteoT | 0:116260c66d88 | 59 | printf("%i\r\n", var); |
| MatteoT | 0:116260c66d88 | 60 | } |
| MatteoT | 0:116260c66d88 | 61 | } |
| MatteoT | 0:116260c66d88 | 62 | else if (c == 'd') { |
| MatteoT | 0:116260c66d88 | 63 | if (var > 0) { |
| MatteoT | 0:116260c66d88 | 64 | var--; |
| MatteoT | 0:116260c66d88 | 65 | } |
| MatteoT | 0:116260c66d88 | 66 | if (esc1.setThrottle(var) && esc2.setThrottle(var) && esc3.setThrottle(var) && esc4.setThrottle(var)) { |
| MatteoT | 0:116260c66d88 | 67 | printf("%i\r\n", var); |
| MatteoT | 0:116260c66d88 | 68 | } |
| MatteoT | 0:116260c66d88 | 69 | } |
| MatteoT | 0:116260c66d88 | 70 | else if (c == 'r') { |
| MatteoT | 0:116260c66d88 | 71 | var = 0; |
| MatteoT | 0:116260c66d88 | 72 | if (esc1.setThrottle(var) && esc2.setThrottle(var) && esc3.setThrottle(var) && esc4.setThrottle(var)) { |
| MatteoT | 0:116260c66d88 | 73 | printf("%i\r\n", var); |
| MatteoT | 0:116260c66d88 | 74 | } |
| MatteoT | 0:116260c66d88 | 75 | } |
| MatteoT | 0:116260c66d88 | 76 | |
| MatteoT | 0:116260c66d88 | 77 | esc1.pulse(); |
| MatteoT | 0:116260c66d88 | 78 | esc2.pulse(); |
| MatteoT | 0:116260c66d88 | 79 | esc3.pulse(); |
| MatteoT | 0:116260c66d88 | 80 | esc4.pulse(); |
| MatteoT | 0:116260c66d88 | 81 | wait_ms(20); // 20ms is the default period of the ESC pwm |
| MatteoT | 0:116260c66d88 | 82 | } |
| MatteoT | 0:116260c66d88 | 83 | } |
| MatteoT | 0:116260c66d88 | 84 | * @endcode |
| MatteoT | 0:116260c66d88 | 85 | */ |
| MatteoT | 0:116260c66d88 | 86 | |
| MatteoT | 0:116260c66d88 | 87 | class ESC |
| MatteoT | 0:116260c66d88 | 88 | { |
| MatteoT | 0:116260c66d88 | 89 | private: |
| MatteoT | 0:116260c66d88 | 90 | |
| MatteoT | 0:116260c66d88 | 91 | PwmOut esc; |
| MatteoT | 0:116260c66d88 | 92 | int period; |
| MatteoT | 0:116260c66d88 | 93 | int throttle; |
| MatteoT | 0:116260c66d88 | 94 | |
| MatteoT | 0:116260c66d88 | 95 | public: |
| MatteoT | 0:116260c66d88 | 96 | |
| MatteoT | 0:116260c66d88 | 97 | /** Initializes the PwmOut for minimum throttle (1000us). |
| MatteoT | 0:116260c66d88 | 98 | * @param pwmPinOut is the pin connected to the ESC. |
| MatteoT | 0:116260c66d88 | 99 | * @param period is the PWM period in ms (default is 20ms). |
| MatteoT | 0:116260c66d88 | 100 | */ |
| MatteoT | 0:116260c66d88 | 101 | ESC (const PinName pwmPinOut, const int period=20); |
| MatteoT | 0:116260c66d88 | 102 | |
| MatteoT | 0:116260c66d88 | 103 | /** Sets the throttle value without output (see pulse()). |
| MatteoT | 0:116260c66d88 | 104 | * @param t in in the range [0.0;1.0] |
| MatteoT | 0:116260c66d88 | 105 | * @return true if throttle value is in range; false otherwise. |
| MatteoT | 0:116260c66d88 | 106 | */ |
| MatteoT | 0:116260c66d88 | 107 | inline bool setThrottle (const float t); |
| MatteoT | 0:116260c66d88 | 108 | ///Alias of setThrottle(float) |
| MatteoT | 0:116260c66d88 | 109 | inline bool operator= (const float t); |
| MatteoT | 0:116260c66d88 | 110 | |
| MatteoT | 0:116260c66d88 | 111 | /** Get the last setted throttle value |
| MatteoT | 0:116260c66d88 | 112 | * @return throttle in range [0.0-1.0]. |
| MatteoT | 0:116260c66d88 | 113 | */ |
| MatteoT | 0:116260c66d88 | 114 | inline float getThrottle () const; |
| MatteoT | 0:116260c66d88 | 115 | ///Alias of getThrottle() |
| MatteoT | 0:116260c66d88 | 116 | inline operator float () const; |
| MatteoT | 0:116260c66d88 | 117 | |
| MatteoT | 0:116260c66d88 | 118 | /** Output the throttle value to the ESC. |
| MatteoT | 0:116260c66d88 | 119 | */ |
| MatteoT | 0:116260c66d88 | 120 | inline void pulse (); |
| MatteoT | 0:116260c66d88 | 121 | ///Alias of pulse() |
| MatteoT | 0:116260c66d88 | 122 | inline void operator() (); |
| MatteoT | 0:116260c66d88 | 123 | }; |
| MatteoT | 0:116260c66d88 | 124 | |
| MatteoT | 0:116260c66d88 | 125 | #endif |
