Thomas Burgers / Mbed 2 deprecated P_controller_motor_Bouke2

Dependencies:   Encoder MODSERIAL mbed

Fork of P_controller_motor_Bouke by Thomas Burgers

Files at this revision

API Documentation at this revision

Comitter:
ThomasBNL
Date:
Thu Sep 17 10:45:54 2015 +0000
Parent:
2:f5c9d981de51
Child:
4:dfdfcb518e60
Commit message:
Poging toevoegen encoder

Changed in this revision

encoder.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/encoder.h	Thu Sep 17 10:45:54 2015 +0000
@@ -0,0 +1,62 @@
+#ifndef _ENCODER_H_
+#define _ENCODER_H_
+
+#include "mbed.h"
+
+/** Encoder class.
+ *  Used to read out incremental position encoder. Decodes position in X2 configuration.
+ *
+ *  Speed estimation is very crude and computationally intensive. Turned off by default
+ *
+ * Example:
+ * @code
+ * #include "mbed.h"
+ * #include "Encoder.h"
+ *
+ *   Encoder motor1(PTD0,PTC9,true);
+ *   Serial pc(USBTX,USBRX);
+ *   pc.baud(115200);
+ *   while(1) {
+ *       wait(0.2);
+ *       pc.printf("pos: %d, speed %f \r\n",motor1.getPosition(), motor1.getSpeed());
+ *   }
+ * @endcode
+ */
+class Encoder
+{
+    public:
+    /** Create Encoder instance
+    @param int_a Pin to be used as InterruptIn! Be careful, as not all pins on all platforms may be used as InterruptIn.
+    @param int_b second encoder pin, used as DigitalIn. Can be any DigitalIn pin, not necessarily on InterruptIn location
+    @param speed boolean value to determine whether speed calculation is done in interrupt routine. Default false (no speed calculation)
+    */
+
+    Encoder(PinName int_a, PinName int_b, bool speed=false);
+    /** Request position
+    @returns current position in encoder counts
+    */
+    int32_t getPosition(){return m_position;}
+    /** Overwrite position
+    @param pos position to be written
+    */
+    void    setPosition(int32_t pos){m_position = pos;}
+    /** Request speed
+    @returns current speed
+    */
+    float   getSpeed(){return m_speed;}
+    private:
+    void encoderFalling(void);
+    void encoderRising(void);
+    bool m_speed_enabled;
+    Timer EncoderTimer;
+    Timeout EncoderTimeout;
+    InterruptIn pin_a;
+    DigitalIn pin_b;
+    int32_t m_position;
+    float   m_speed;
+    void timeouthandler(void);
+    bool zero_speed;
+};
+
+
+#endif //_ENCODER_H_
\ No newline at end of file
--- a/main.cpp	Thu Sep 17 10:15:44 2015 +0000
+++ b/main.cpp	Thu Sep 17 10:45:54 2015 +0000
@@ -1,28 +1,11 @@
 #include "mbed.h"
 #include "HIDScope.h"
+#include "encoder.h"
 
 // Define the HIDScope and Ticker object
 HIDScope    scope(1);
 Ticker      scopeTimer;
  
-// Read the analog input
-float triangle_signal = 3;
- 
-// The data read and send function
-void scopeSend()
-{
-    scope.set(0,triangle_signal);
-    scope.send();
-}
- 
-int main()
-{
-    // Attach the data read and send function at 100 Hz
-    scopeTimer.attach_us(&scopeSend, 1e4);   
-    
-    while(1) { }
-}
-
 ////// P Motor Controller
 
 // Controller gain
@@ -32,8 +15,23 @@
 // Reusable P controller (FUNCTIE)
 double P (double error, const double Kp)
     {
-            Return Kp*error;
+            return Kp*error;
     }
+
+#include "Encoder.h"
+ *
+ *   Encoder motor1(PTD0,PTC9,true);
+ *   Serial pc(USBTX,USBRX);
+ *   pc.baud(115200);
+   while(1) {
+    wait(0.2);
+    pc.printf("pos: %d, speed %f \r\n",motor1.getPosition(), motor1.getSpeed());
+    }
+ 
+AnalogIn potmeter1(POT1);
+
+// encoder1
+// potmeter1
     
 // Error measurement and apply the output to the plant
 void motorP_Controller()
@@ -48,3 +46,22 @@
         myControllerTicker.attach(&motorP_Controller,0.01f); //100Hz
         while(1){}
     }
+
+
+// Read the analog input
+float triangle_signal = 2.05;
+ 
+// The data read and send function
+void scopeSend()
+{
+    scope.set(0,motorP);
+    scope.send();
+}
+ 
+int main()
+{
+    // Attach the data read and send function at 200 Hz
+    scopeTimer.attach_us(&scopeSend, 2e4);   
+    
+    while(1) { }
+}