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.
Dependencies: Encoder MODSERIAL mbed
Fork of P_controller_motor by
Revision 3:eee8d5461256, committed 2015-09-17
- 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) { }
+}
