Motor control in Ticker

Dependencies:   FastPWM MODSERIAL mbed QEI

Fork of Motorcontrol by Laurence B

Committer:
s1680897
Date:
Mon Oct 08 09:30:19 2018 +0000
Revision:
5:1e85f68b5580
Parent:
4:7f7974aec29d
Potmeter komen overeen met motoren en encoders.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
laurencebr 0:dacd23e75c5c 1 #include "mbed.h"
laurencebr 0:dacd23e75c5c 2 #include "FastPWM.h"
laurencebr 0:dacd23e75c5c 3 #include "MODSERIAL.h"
s1680897 4:7f7974aec29d 4 #include "QEI.h"
laurencebr 0:dacd23e75c5c 5
s1680897 2:ba344767412c 6 Ticker Motorticker;
s1680897 4:7f7974aec29d 7 Ticker Printticker;
s1680897 2:ba344767412c 8
s1680897 5:1e85f68b5580 9 FastPWM motor1_pwm(D6);
s1680897 5:1e85f68b5580 10 DigitalOut motor1_richting(D7);
s1680897 5:1e85f68b5580 11 FastPWM motor2_pwm(D5);
s1680897 5:1e85f68b5580 12 DigitalOut motor2_richting(D4);
s1680897 4:7f7974aec29d 13 QEI encoder1(D10, D11, NC, 32);
s1680897 4:7f7974aec29d 14 QEI encoder2(D12, D13, NC, 32);
laurencebr 0:dacd23e75c5c 15
s1680897 5:1e85f68b5580 16 AnalogIn pot1(A0);
s1680897 5:1e85f68b5580 17 AnalogIn pot2(A1);
laurencebr 0:dacd23e75c5c 18 MODSERIAL pc(USBTX, USBRX);
laurencebr 0:dacd23e75c5c 19
s1680897 4:7f7974aec29d 20 float AnalogVoltage1;
s1680897 4:7f7974aec29d 21 float AnalogVoltage2;
s1680897 4:7f7974aec29d 22
s1680897 4:7f7974aec29d 23 void Print_pot()
laurencebr 0:dacd23e75c5c 24 {
s1680897 4:7f7974aec29d 25 pc.baud(115200);
s1680897 4:7f7974aec29d 26
s1680897 4:7f7974aec29d 27 AnalogVoltage1 = pot1.read()*2 - 1;
s1680897 4:7f7974aec29d 28 AnalogVoltage2 = pot2.read()*2 - 1;
s1680897 4:7f7974aec29d 29
s1680897 4:7f7974aec29d 30 float rel_pos1=encoder1.getPulses()/32.0/131.25*2.0*3.1416;
s1680897 4:7f7974aec29d 31 float rel_pos2=encoder2.getPulses()/32.0/131.25*2.0*3.1416;
s1680897 4:7f7974aec29d 32
s1680897 5:1e85f68b5580 33 pc.printf("pot1 = %f \t pot2 = %f \t Position 1 = %f \t Position 2 = %f \r\n", AnalogVoltage1, AnalogVoltage2, rel_pos1, rel_pos2);
s1680897 4:7f7974aec29d 34 }
s1680897 4:7f7974aec29d 35
s1680897 4:7f7974aec29d 36 void Motor_control()
s1680897 4:7f7974aec29d 37 {
s1680897 4:7f7974aec29d 38 AnalogVoltage1 = pot1.read()*2 - 1;
s1680897 4:7f7974aec29d 39 AnalogVoltage2 = pot2.read()*2 - 1;
laurencebr 0:dacd23e75c5c 40
laurencebr 1:621c4bb5301d 41 //Motor1
laurencebr 1:621c4bb5301d 42
s1680897 2:ba344767412c 43 if (AnalogVoltage1 <= 0)
s1680897 2:ba344767412c 44 {
laurencebr 0:dacd23e75c5c 45 motor1_richting = 0;
laurencebr 0:dacd23e75c5c 46 motor1_pwm.write(-AnalogVoltage1); //write Duty cycle
s1680897 2:ba344767412c 47 }
s1680897 2:ba344767412c 48
s1680897 2:ba344767412c 49 if (AnalogVoltage1 >= 0)
s1680897 2:ba344767412c 50 {
laurencebr 0:dacd23e75c5c 51 motor1_richting = 1;
laurencebr 0:dacd23e75c5c 52 motor1_pwm.write(AnalogVoltage1); //write Duty cycle
s1680897 2:ba344767412c 53 }
laurencebr 0:dacd23e75c5c 54
laurencebr 1:621c4bb5301d 55 //Motor 2
laurencebr 1:621c4bb5301d 56
s1680897 2:ba344767412c 57 if (AnalogVoltage2 <= 0)
s1680897 2:ba344767412c 58 {
laurencebr 1:621c4bb5301d 59 motor2_richting = 0;
laurencebr 1:621c4bb5301d 60 motor2_pwm.write(-AnalogVoltage2); //write Duty cycle
s1680897 2:ba344767412c 61 }
s1680897 2:ba344767412c 62 if (AnalogVoltage2 >= 0)
s1680897 2:ba344767412c 63 {
laurencebr 1:621c4bb5301d 64 motor2_richting = 1;
laurencebr 1:621c4bb5301d 65 motor2_pwm.write(AnalogVoltage2); //write Duty cycle
laurencebr 0:dacd23e75c5c 66 }
s1680897 2:ba344767412c 67 }
s1680897 2:ba344767412c 68
s1680897 2:ba344767412c 69 int main()
s1680897 2:ba344767412c 70 {
s1680897 2:ba344767412c 71 int frequency_pwm = 16700; //16.7 kHz PWM
s1680897 2:ba344767412c 72
s1680897 4:7f7974aec29d 73 Motorticker.attach(Motor_control,0.1);
s1680897 4:7f7974aec29d 74 Printticker.attach(Print_pot, 0.5);
s1680897 2:ba344767412c 75 motor1_pwm.period(1.0/frequency_pwm); // T = 1/f
s1680897 2:ba344767412c 76
s1680897 2:ba344767412c 77 while(true)
s1680897 2:ba344767412c 78 {}
laurencebr 0:dacd23e75c5c 79 }