Draaiende motor op commando van knopje (WERKEND)

Dependencies:   Encoder MODSERIAL mbed

Fork of P_controller_motor by Bouke Scheltinga

Committer:
ThomasBNL
Date:
Thu Sep 17 10:49:09 2015 +0000
Revision:
4:dfdfcb518e60
Parent:
3:eee8d5461256
Child:
5:8ea7a765c1f7
encoder toevoegen;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ThomasBNL 0:843492f4fe62 1 #include "mbed.h"
ThomasBNL 0:843492f4fe62 2 #include "HIDScope.h"
ThomasBNL 3:eee8d5461256 3 #include "encoder.h"
ThomasBNL 0:843492f4fe62 4
ThomasBNL 1:b0d3c64bd4d8 5 // Define the HIDScope and Ticker object
ThomasBNL 1:b0d3c64bd4d8 6 HIDScope scope(1);
ThomasBNL 1:b0d3c64bd4d8 7 Ticker scopeTimer;
ThomasBNL 4:dfdfcb518e60 8
ThomasBNL 4:dfdfcb518e60 9 // Define Encoder
ThomasBNL 4:dfdfcb518e60 10
ThomasBNL 4:dfdfcb518e60 11 Encoder motorP(PTD0,PTC9,true);
ThomasBNL 4:dfdfcb518e60 12 Serial pc(USBTX,USBRX);
ThomasBNL 4:dfdfcb518e60 13 pc.baud(115200);
ThomasBNL 4:dfdfcb518e60 14 while(1) {
ThomasBNL 4:dfdfcb518e60 15 wait(0.2);
ThomasBNL 4:dfdfcb518e60 16 pc.printf("pos: %d, speed %f \r\n",motor1.getPosition(), motor1.getSpeed());
ThomasBNL 4:dfdfcb518e60 17 }
ThomasBNL 4:dfdfcb518e60 18
ThomasBNL 4:dfdfcb518e60 19 // Define Potmeter
ThomasBNL 4:dfdfcb518e60 20
ThomasBNL 4:dfdfcb518e60 21
ThomasBNL 1:b0d3c64bd4d8 22 ////// P Motor Controller
ThomasBNL 0:843492f4fe62 23
ThomasBNL 0:843492f4fe62 24 // Controller gain
ThomasBNL 0:843492f4fe62 25 const double motorP_Kp=2.5;
ThomasBNL 0:843492f4fe62 26 const double Convert_volt_to_position=0.00300;
ThomasBNL 0:843492f4fe62 27
ThomasBNL 0:843492f4fe62 28 // Reusable P controller (FUNCTIE)
ThomasBNL 0:843492f4fe62 29 double P (double error, const double Kp)
ThomasBNL 0:843492f4fe62 30 {
ThomasBNL 3:eee8d5461256 31 return Kp*error;
ThomasBNL 0:843492f4fe62 32 }
ThomasBNL 3:eee8d5461256 33
ThomasBNL 4:dfdfcb518e60 34
ThomasBNL 4:dfdfcb518e60 35
ThomasBNL 3:eee8d5461256 36
ThomasBNL 3:eee8d5461256 37 // encoder1
ThomasBNL 3:eee8d5461256 38 // potmeter1
ThomasBNL 0:843492f4fe62 39
ThomasBNL 0:843492f4fe62 40 // Error measurement and apply the output to the plant
ThomasBNL 0:843492f4fe62 41 void motorP_Controller()
ThomasBNL 0:843492f4fe62 42 {
ThomasBNL 0:843492f4fe62 43 double reference_position = potmeter1.read();
ThomasBNL 0:843492f4fe62 44 double position = Convert_volt_to_position*encoder1.getPosition();
ThomasBNL 0:843492f4fe62 45 motorP=P(reference_position - position, motorP_Kp);
ThomasBNL 0:843492f4fe62 46 }
ThomasBNL 0:843492f4fe62 47
ThomasBNL 0:843492f4fe62 48 int main()
ThomasBNL 0:843492f4fe62 49 {
ThomasBNL 0:843492f4fe62 50 myControllerTicker.attach(&motorP_Controller,0.01f); //100Hz
ThomasBNL 0:843492f4fe62 51 while(1){}
ThomasBNL 0:843492f4fe62 52 }
ThomasBNL 3:eee8d5461256 53
ThomasBNL 3:eee8d5461256 54
ThomasBNL 3:eee8d5461256 55 // Read the analog input
ThomasBNL 3:eee8d5461256 56 float triangle_signal = 2.05;
ThomasBNL 3:eee8d5461256 57
ThomasBNL 3:eee8d5461256 58 // The data read and send function
ThomasBNL 3:eee8d5461256 59 void scopeSend()
ThomasBNL 3:eee8d5461256 60 {
ThomasBNL 3:eee8d5461256 61 scope.set(0,motorP);
ThomasBNL 3:eee8d5461256 62 scope.send();
ThomasBNL 3:eee8d5461256 63 }
ThomasBNL 3:eee8d5461256 64
ThomasBNL 3:eee8d5461256 65 int main()
ThomasBNL 3:eee8d5461256 66 {
ThomasBNL 3:eee8d5461256 67 // Attach the data read and send function at 200 Hz
ThomasBNL 3:eee8d5461256 68 scopeTimer.attach_us(&scopeSend, 2e4);
ThomasBNL 3:eee8d5461256 69
ThomasBNL 3:eee8d5461256 70 while(1) { }
ThomasBNL 3:eee8d5461256 71 }