Script voor het aansturen van de motor met behulp van twee potmeters. Potmeter 1 wordt gebruikt om de draairichting te bepalen en potmeter 2 wordt gebruikt om de snelheid te bepalen. Het script werkt en heeft een snellere reactie op de potmeters dan bij het vorige script.

Dependencies:   HIDScope mbed Encoder MODSERIAL

Fork of motor_met_potmeters_en_aanuit by Projectgroep 20 Biorobotics

Committer:
paulineoonk
Date:
Fri Oct 06 10:31:12 2017 +0000
Revision:
7:df5ad7a84f86
Parent:
6:2b4c749c294f
Child:
8:432f6d4669e1
Namen veranderd. Direction cookbook in schrift Miriam;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Annelotte 0:85965fd37d39 1 #include "mbed.h"
Annelotte 4:fbf4307e8aea 2 #include "HIDScope.h"
Annelotte 4:fbf4307e8aea 3
Annelotte 5:c9cb66b7010d 4 HIDScope scope(3); //Met HIDScope lezen we de waarde uit van de potmeter en led A en B van de encoder (kan eventueel gebruikt worden)
Annelotte 4:fbf4307e8aea 5 Ticker AInTicker; //We maken een ticker aan genaamd AIn (wordt gebruikt voor HIDScope)
Annelotte 4:fbf4307e8aea 6
Annelotte 0:85965fd37d39 7
Annelotte 0:85965fd37d39 8 Ticker Treecko; //We maken een geweldige ticker aan zodat de potmeter en alles telkens opnieuw worden uitgelezen
paulineoonk 7:df5ad7a84f86 9 AnalogIn potMeter2(A1); //Analoge input van potmeter 2 (zal gebruikt worden voor de snelheids bepaling van de motor)
paulineoonk 7:df5ad7a84f86 10 AnalogIn potMeter1(A3); //Analoge input van potmeter 1 (zal gebruikt worden voor de bepaling van de draairichting van de motor)
paulineoonk 7:df5ad7a84f86 11 PwmOut M1E(D6); //Biorobotics Motor 1 PWM controle van de snelheid
paulineoonk 7:df5ad7a84f86 12 DigitalOut M1D(D7); //Biorobotics Motor 1 draairichting controle
paulineoonk 7:df5ad7a84f86 13 DigitalOut enc1ledB(D12); //Led B van de encoder van motor 1
paulineoonk 7:df5ad7a84f86 14 DigitalOut enc1ledA(D13); //Led A van de encoder van motor 1
Annelotte 0:85965fd37d39 15
Annelotte 4:fbf4307e8aea 16 //Hier start het deel voor HIDScope
Annelotte 4:fbf4307e8aea 17 void ReadAnalogInAndFilter()
Annelotte 4:fbf4307e8aea 18 {
paulineoonk 7:df5ad7a84f86 19 scope.set(0,potMeter2);
paulineoonk 7:df5ad7a84f86 20 scope.set(1,enc1ledB);
paulineoonk 7:df5ad7a84f86 21 scope.set(2,enc1ledA);
Annelotte 4:fbf4307e8aea 22 scope.send(); //send what's in the scope memory to PC
Annelotte 4:fbf4307e8aea 23 }
Annelotte 4:fbf4307e8aea 24 //Hier eindigt het deel van de HIDScope. Het toont nu de waarde van de potmeter 2 zodat je deze zichtbaar kunt maken op je pc.
Annelotte 4:fbf4307e8aea 25
Annelotte 4:fbf4307e8aea 26
Annelotte 0:85965fd37d39 27 float PwmPeriod = 1.0/5000.0; //PWM periode instellen (5000 Hz, want 5000 periodes in 1 seconde)
Annelotte 0:85965fd37d39 28
Annelotte 3:e1147e50344b 29 void SetMotor1(float motorValue)
Annelotte 0:85965fd37d39 30 {
Annelotte 0:85965fd37d39 31 //Hiermee wordt de richting bepaald met behulp van potmeter 1 en wordt de snelheid bepaald aan de hand van de motorValue.
paulineoonk 7:df5ad7a84f86 32 if (potMeter1>= 0.5)
paulineoonk 7:df5ad7a84f86 33 { //Counterclockwise rotation
paulineoonk 7:df5ad7a84f86 34 M1D = 1; //de motor draait tegen de klok in
Annelotte 0:85965fd37d39 35 }
Annelotte 0:85965fd37d39 36 else
paulineoonk 7:df5ad7a84f86 37 {
paulineoonk 7:df5ad7a84f86 38 //Clockwise rotation
paulineoonk 7:df5ad7a84f86 39 M1D = 0; //de motor draait met de klok mee
Annelotte 0:85965fd37d39 40 }
Annelotte 0:85965fd37d39 41 if (fabs(motorValue) > 1)
Annelotte 0:85965fd37d39 42 {
paulineoonk 7:df5ad7a84f86 43 M1E = 1; //de snelheid wordt teruggeschaald naar 8.4 rad/s (maximale snelheid, dus waarde 1)
Annelotte 0:85965fd37d39 44 }
Annelotte 0:85965fd37d39 45 else
Annelotte 0:85965fd37d39 46 {
paulineoonk 7:df5ad7a84f86 47 M1E = fabs(motorValue); //de absolute snelheid wordt bepaald, de motor staat uit bij een waarde 0
Annelotte 0:85965fd37d39 48 }
Annelotte 0:85965fd37d39 49 }
Annelotte 0:85965fd37d39 50
Annelotte 0:85965fd37d39 51 float GetReferenceVelocity()
Annelotte 0:85965fd37d39 52 {
Annelotte 0:85965fd37d39 53 //Returns reference velocity in rad/s
Annelotte 0:85965fd37d39 54 //Positieve waarden betekend met de klok mee draaien
Annelotte 0:85965fd37d39 55 const float maxVelocity=8.4; //in rad/s
paulineoonk 7:df5ad7a84f86 56 float refV = potMeter2 * maxVelocity;
paulineoonk 7:df5ad7a84f86 57 return refV;
Annelotte 0:85965fd37d39 58 }
Annelotte 0:85965fd37d39 59
paulineoonk 7:df5ad7a84f86 60 float FeedForwardControl(float refV) //Koppelt de referenceVelocity aan de motorValue
Annelotte 0:85965fd37d39 61 {
Annelotte 0:85965fd37d39 62 //eenvoudige lineaire feed-forward control
Annelotte 0:85965fd37d39 63 const float MotorGain = 8.4; //eenheid: (rad/s) / PWM
paulineoonk 7:df5ad7a84f86 64 float motorValue = refV / MotorGain; //bepalen van de fractie van de snelheid t.o.v. max snelheid
Annelotte 0:85965fd37d39 65 return motorValue;
Annelotte 0:85965fd37d39 66 }
Annelotte 0:85965fd37d39 67
Annelotte 0:85965fd37d39 68 void MeasureAndControl(void)
Annelotte 0:85965fd37d39 69 {
Annelotte 0:85965fd37d39 70 //Deze functie neemt de potmeter positie waar, leidt hier een referentie snelheid vanaf en controleert de motor
Annelotte 0:85965fd37d39 71 //met een eenvoudige feed-forward controller. Deze functie wordt aangeroepen met behulp van de ticker Treecko
paulineoonk 7:df5ad7a84f86 72 float refV = GetReferenceVelocity();
paulineoonk 7:df5ad7a84f86 73 float motorValue = FeedForwardControl(refV);
Annelotte 0:85965fd37d39 74 SetMotor1(motorValue);
Annelotte 0:85965fd37d39 75 }
Annelotte 0:85965fd37d39 76
Annelotte 0:85965fd37d39 77 int main ()
Annelotte 0:85965fd37d39 78 {
Annelotte 4:fbf4307e8aea 79 Treecko.attach(MeasureAndControl, 0.1); //Elke 1 seconde zorgt de ticker voor het runnen en uitlezen van de verschillende
Annelotte 4:fbf4307e8aea 80 //functies en analoge signalen. Veranderingen worden elke 1 seconde doorgevoerd.
Annelotte 4:fbf4307e8aea 81 //(Stukje voor HIDScope)
Annelotte 4:fbf4307e8aea 82 AInTicker.attach(&ReadAnalogInAndFilter, 0.01); //Elke 0.01 seconde roept het de ticker aan zodat deze de data
Annelotte 4:fbf4307e8aea 83 //heeft om te tonen. De ReadAnalogInAndFilter waarde verandert mee.
Annelotte 3:e1147e50344b 84 }