Code om de PID controller af te stellen aan de hand van een sinus golf
Dependencies: mbed QEI MODSERIAL FastPWM biquadFilter
Diff: main.cpp
- Revision:
- 4:99f7fdce608e
- Parent:
- 3:ac13255164cd
- Child:
- 5:4b25551aeb6e
--- a/main.cpp Wed Mar 13 16:03:13 2019 +0000 +++ b/main.cpp Fri Mar 15 15:00:21 2019 +0000 @@ -1,75 +1,101 @@ #include "mbed.h" #include "MODSERIAL.h" +#include "QEI.h" + +// Algemeen DigitalIn button2(SW2); DigitalIn button3(SW3); DigitalOut led(LED_GREEN); DigitalOut led2(LED_RED); +DigitalOut led3(LED_BLUE); MODSERIAL pc(USBTX, USBRX); -//motoren +//Motoren DigitalOut direction1(D4); PwmOut pwmpin1(D5); PwmOut pwmpin2(D6); DigitalOut direction2(D7); +volatile float PWM1; +volatile float PWM2; +volatile float pwm2; + +//Encoder +DigitalIn EncoderA(D13); +DigitalIn EncoderB(D12); +QEI encoder2 (D13, D12, NC, 8400, QEI::X4_ENCODING); +float Pulses2; +float Degrees2; //Pot meter AnalogIn pot(A1); -Ticker Pot; +float Pot2; + +//Ticker +Ticker Pwm; Ticker PotRead; -Ticker Typ; -volatile float PWM1; -volatile float PWM2; -volatile float pwm2; -float Pot2; + + + void Period(void) { pwmpin2.period_us(60); } -void Potread(void) + +void PwmMotor(void) { - PWM2 = pot.read(); - pwm2 = (PWM2*2)-1; //scaling + pwm2 = (Pot2*2)-1; //scaling pc.printf("pwm2=%f\r\n",pwm2); + Degrees2 = (Pulses2/8400)*360; + pc.printf("Pulses is: %i\n", Pulses2); direction2 = pwm2 < 0.0f; //positief = CW, negatief = CCW pwmpin2 = fabs(pwm2); + } void MotorOn(void) { - Pot.attach (Potread, 0.1); - + pwmpin2 = 0; + Pwm.attach (PwmMotor, 0.1); } void MotorOff(void) { - Pot.detach (); + Pwm.detach (); pwmpin2 = 0; } -void Typen(void){ + +void ContinuousReader(void){ Pot2 = pot.read(); - pc.printf("%f\r\n",Pot2); + Pulses2 = encoder2.getPulses(); + //pc.printf("%f\r\n",Pot2); } int main() { Period(); + PotRead.attach(ContinuousReader,0.1); pc.baud(115200); pc.printf("start\r\n"); + led = 1; + led2 =1; + led3 =1; while (true){ - led2 = 0; + led3 = 0; if (!button2) { - led = 1; - Typ.attach(Typen,1); + led3 = 1; + led = 0; + pc.printf("MotorOn\r\n"); MotorOn(); } if (!button3) { - Typ.detach(); + pc.printf("MotorOff\r\n"); + PotRead.detach(); MotorOff(); } led = 0;