Control an H-Bridge using a PwmOut (enable) and two DigitalOuts (direction select)

Fork of Motor by Simon Ford

Files at this revision

API Documentation at this revision

Comitter:
miczyg
Date:
Fri May 15 13:44:38 2015 +0000
Parent:
8:d192b38e0d5c
Child:
10:f22e6393af83
Commit message:
jk

Changed in this revision

MotorL.cpp Show annotated file Show diff for this revision Revisions of this file
MotorL.h Show annotated file Show diff for this revision Revisions of this file
MotorR.cpp Show annotated file Show diff for this revision Revisions of this file
MotorR.h Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MotorL.cpp	Fri May 15 13:44:38 2015 +0000
@@ -0,0 +1,43 @@
+#include "MotorL.h"
+#include "mbed.h"
+
+MotorL::MotorL(PinName pwm, PinName fwd, PinName rev, PinName stby) :
+_pwm(pwm), _fwd(fwd), _rev(rev), _stdby(stby)//, speedControl(K, Ti, Td, itv)//, encoder(CH_A, CH_B, NC, pPerRev)
+{
+
+    // Set initial condition of PWM
+    _pwm.period(0.001);
+    _pwm = 0;
+    _stdby = 1;
+    // Initial condition of output enables
+    _fwd = 0;
+    _rev = 0;
+
+    //PID config
+    //speedControl.setInputLimits(0, 1);
+    //speedControl.setOutputLimits(0, 1);
+    //speedControl.setMode(AUTO); 
+
+}
+
+void MotorL::speed(float speed) {
+
+/*PID do enkoderow i utrzymywania stalej predkosci*/
+/*
+    if (speed != set_speed){
+        speedControl.setSetPoint(speed);
+        set_speed = speed;
+    }
+
+    pulses = encoder.getPulses();
+    curr_speed = (pulses-prev_pulses) / max_pulse_rate;
+    prev_pulses = pulses;
+
+    speedControl.setProcessValue(curr_speed);
+    speed = speedControl.compute();
+*/
+
+    _fwd = (speed > 0.0);
+    _rev = (speed < 0.0);
+    _pwm = abs(speed);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MotorL.h	Fri May 15 13:44:38 2015 +0000
@@ -0,0 +1,57 @@
+#ifndef MBED_MOTORL_H
+#define MBED_MOTORL_H
+
+#include "mbed.h"
+//#include "PID.h"
+
+/*nastawy regulatora PID*/
+/*
+const float K = 1;
+const float Ti = 0;
+const float Td = 0;
+const float itv = 0.001;
+#define AUTO 1
+*/
+/** Interface to control a standard DC motor
+*
+* with an H-bridge using a PwmOut and 2 DigitalOuts
+*/
+class MotorL {
+public:
+
+    /** Create a motor control interface
+    *
+    * @param pwm A PwmOut pin, driving the H-bridge enable line to control the speed
+    * @param fwd A DigitalOut, set high when the motor should go forward
+    * @param rev A DigitalOut, set high when the motor should go backwards
+    */
+    MotorL(PinName pwm, PinName fwd, PinName rev, PinName stby);
+
+    /** Set the speed of the motor
+    *
+    * @param speed The speed of the motor as a normalised value between -1.0 and 1.0
+    */
+    void speed(float speed);
+    
+    /**Change the stand by status of H-bridge
+    *
+    * @param status 0 - bridge disabled, 1 - bridge enabled
+    */
+    void setStandby(bool status)
+    {
+        _stdby = status;
+    }
+
+protected:
+    PwmOut _pwm;
+    DigitalOut _fwd;
+    DigitalOut _rev;
+    DigitalOut _stdby;
+private:
+    //PID speedControl;
+    //QEI encoder;
+    float set_speed;
+    
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MotorR.cpp	Fri May 15 13:44:38 2015 +0000
@@ -0,0 +1,43 @@
+#include "MotorR.h"
+#include "mbed.h"
+
+MotorR::MotorR(PinName pwm, PinName fwd, PinName rev, PinName stby) :
+_pwm(pwm), _fwd(fwd), _rev(rev), _stdby(stby)//, speedControl(K, Ti, Td, itv)//, encoder(CH_A, CH_B, NC, pPerRev)
+{
+
+    // Set initial condition of PWM
+    _pwm.period(0.001);
+    _pwm = 0;
+    _stdby = 1;
+    // Initial condition of output enables
+    _fwd = 0;
+    _rev = 0;
+
+    //PID config
+    //speedControl.setInputLimits(0, 1);
+    //speedControl.setOutputLimits(0, 1);
+    //speedControl.setMode(AUTO); 
+
+}
+
+void MotorR::speed(float speed) {
+
+/*PID do enkoderow i utrzymywania stalej predkosci*/
+/*
+    if (speed != set_speed){
+        speedControl.setSetPoint(speed);
+        set_speed = speed;
+    }
+
+    pulses = encoder.getPulses();
+    curr_speed = (pulses-prev_pulses) / max_pulse_rate;
+    prev_pulses = pulses;
+
+    speedControl.setProcessValue(curr_speed);
+    speed = speedControl.compute();
+*/
+
+    _fwd = (speed > 0.0);
+    _rev = (speed < 0.0);
+    _pwm = abs(speed);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MotorR.h	Fri May 15 13:44:38 2015 +0000
@@ -0,0 +1,57 @@
+#ifndef MBED_MOTORR_H
+#define MBED_MOTORR_H
+
+#include "mbed.h"
+//#include "PID.h"
+
+/*nastawy regulatora PID*/
+/*
+const float K = 1;
+const float Ti = 0;
+const float Td = 0;
+const float itv = 0.001;
+#define AUTO 1
+*/
+/** Interface to control a standard DC motor
+*
+* with an H-bridge using a PwmOut and 2 DigitalOuts
+*/
+class MotorR {
+public:
+
+    /** Create a motor control interface
+    *
+    * @param pwm A PwmOut pin, driving the H-bridge enable line to control the speed
+    * @param fwd A DigitalOut, set high when the motor should go forward
+    * @param rev A DigitalOut, set high when the motor should go backwards
+    */
+    MotorR(PinName pwm, PinName fwd, PinName rev, PinName stby);
+
+    /** Set the speed of the motor
+    *
+    * @param speed The speed of the motor as a normalised value between -1.0 and 1.0
+    */
+    void speed(float speed);
+    
+    /**Change the stand by status of H-bridge
+    *
+    * @param status 0 - bridge disabled, 1 - bridge enabled
+    */
+    void setStandby(bool status)
+    {
+        _stdby = status;
+    }
+
+protected:
+    PwmOut _pwm;
+    DigitalOut _fwd;
+    DigitalOut _rev;
+    DigitalOut _stdby;
+private:
+    //PID speedControl;
+    //QEI encoder;
+    float set_speed;
+    
+};
+
+#endif