
Motor control in Ticker
Dependencies: FastPWM MODSERIAL mbed QEI
Fork of Motorcontrol by
main.cpp@5:1e85f68b5580, 2018-10-08 (annotated)
- 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?
User | Revision | Line number | New 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 | } |