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.
    }
}

Files at this revision

API Documentation at this revision

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