ESC class used to controll standard Electronic Speed Controllers for brushless motors of RC models
Dependents: MTQuadControl Base_Hybrid_V2 base_rekam_darurat_v1 Base_Hybrid_Latihan_Ok_Hajar_servo_pwm ... more
Simple ESC usage example
#include "mbed.h" #include "esc.h" //include the ESC class int main() { ESC esc1(p26); //declare the ESC as connected to pin p26. float throttle_var = 0.5 //that means 50%. while(1) { //... update throttle_var ... esc1 = throttle_var; //memorize the throttle value (it doesn't send it to the ESC). //... do whatever you want - e.g. call esc1.setThrottle(throttle_var) again ... esc1(); //actually sets the throttle to the ESC. wait_ms(20); //20ms is the default period of the ESC pwm; the ESC may not run faster. } }
Revision 0:116260c66d88, committed 2013-07-19
- Comitter:
- MatteoT
- Date:
- Fri Jul 19 03:11:05 2013 +0000
- Child:
- 1:735702ea5519
- Commit message:
- constructor with PinName; 0-1.0f thruttle range; others
Changed in this revision
esc.cpp | Show annotated file Show diff for this revision Revisions of this file |
esc.h | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/esc.cpp Fri Jul 19 03:11:05 2013 +0000 @@ -0,0 +1,37 @@ +#include "mbed.h" +#include "esc.h" + +ESC::ESC(const PinName pwmPinOut, const int period) + : esc(pwmPinOut), period(period), throttle(1000) +{ + esc.period_ms(period); + esc.pulsewidth_us(throttle); +} + +inline bool ESC::setThrottle (const float t) +{ + if (t >= 0.0 && t <= 1.0) { // qualify range, 0-1 + throttle = 1000.0*t + 1000; // map to range, 1-2 ms (1000-2000us) + return true; + } + return false; +} +inline bool ESC::operator= (const float t){ + return this->setThrottle(t); +} + +inline float ESC::getThrottle () const{ + return throttle; +} +inline ESC::operator float () const{ + return this->getThrottle(); +} + +inline void ESC::pulse () +{ + esc.pulsewidth_us(throttle); +} +inline void ESC::operator() () +{ + this->pulse(); +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/esc.h Fri Jul 19 03:11:05 2013 +0000 @@ -0,0 +1,125 @@ +#ifndef _ESC_H_ +#define _ESC_H_ + +/** ESC class used to controll standard Electronic Speed Controllers for brushless motors of RC models. + * Simple usage example: + * @code + * +#include "mbed.h" +#include "esc.h" //include the ESC class + + +int main() +{ + ESC esc1(p26); //declare the ESC as connected to pin p26. + float throttle_var = 0.5 //that means 50%. + + while(1) + { + //... update throttle_var ... + + esc1 = throttle_var; //memorize the throttle value (it doesn't send it to the ESC). + + //... do whatever you want - e.g. call esc1.setThrottle(throttle_var) again ... + + esc1(); //actually sets the throttle to the ESC. + + wait_ms(20); //20ms is the default period of the ESC pwm; the ESC may not run faster. + } +} + * @endcode + * + * Another example: + * + * @code + * +#include "mbed.h" +#include "esc.h" + +ESC esc1(PTD4); +ESC esc2(PTA12); +ESC esc3(PTA4); +ESC esc4(PTA5); + +Serial pc(USBTX, USBRX); // tx, rx + +int main() { + + char c; + int var = 0; + + while(1) { + c = pc.getc(); + + if (c == 'u') { + if (var < 100) { + var++; + } + if (esc1.setThrottle(var) && esc2.setThrottle(var) && esc3.setThrottle(var) && esc4.setThrottle(var)) { + printf("%i\r\n", var); + } + } + else if (c == 'd') { + if (var > 0) { + var--; + } + if (esc1.setThrottle(var) && esc2.setThrottle(var) && esc3.setThrottle(var) && esc4.setThrottle(var)) { + printf("%i\r\n", var); + } + } + else if (c == 'r') { + var = 0; + if (esc1.setThrottle(var) && esc2.setThrottle(var) && esc3.setThrottle(var) && esc4.setThrottle(var)) { + printf("%i\r\n", var); + } + } + + esc1.pulse(); + esc2.pulse(); + esc3.pulse(); + esc4.pulse(); + wait_ms(20); // 20ms is the default period of the ESC pwm + } +} + * @endcode + */ + +class ESC +{ + private: + + PwmOut esc; + int period; + int throttle; + + public: + + /** Initializes the PwmOut for minimum throttle (1000us). + * @param pwmPinOut is the pin connected to the ESC. + * @param period is the PWM period in ms (default is 20ms). + */ + ESC (const PinName pwmPinOut, const int period=20); + + /** Sets the throttle value without output (see pulse()). + * @param t in in the range [0.0;1.0] + * @return true if throttle value is in range; false otherwise. + */ + inline bool setThrottle (const float t); + ///Alias of setThrottle(float) + inline bool operator= (const float t); + + /** Get the last setted throttle value + * @return throttle in range [0.0-1.0]. + */ + inline float getThrottle () const; + ///Alias of getThrottle() + inline operator float () const; + + /** Output the throttle value to the ESC. + */ + inline void pulse (); + ///Alias of pulse() + inline void operator() (); + }; + +#endif \ No newline at end of file