Program for STCL Control of motors via PWM
Dependencies: SoftPWM USBDevice mbed
main.cpp@0:651738eb850c, 2015-02-07 (annotated)
- Committer:
- Dzak
- Date:
- Sat Feb 07 04:56:46 2015 +0000
- Revision:
- 0:651738eb850c
- Child:
- 1:2c0e9ef138a4
Joystick PWM Complte
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Dzak | 0:651738eb850c | 1 | #include "mbed.h" |
Dzak | 0:651738eb850c | 2 | #include "USBSerial.h" |
Dzak | 0:651738eb850c | 3 | #include "SoftPWM.h" |
Dzak | 0:651738eb850c | 4 | |
Dzak | 0:651738eb850c | 5 | AnalogIn Y_Axis(P0_13); |
Dzak | 0:651738eb850c | 6 | AnalogIn X_Axis(P0_11); |
Dzak | 0:651738eb850c | 7 | |
Dzak | 0:651738eb850c | 8 | SoftPWM X_PWM(P0_9); //P0_9 |
Dzak | 0:651738eb850c | 9 | SoftPWM Y_PWM(P0_10); //P0_10 |
Dzak | 0:651738eb850c | 10 | |
Dzak | 0:651738eb850c | 11 | USBSerial serial; |
Dzak | 0:651738eb850c | 12 | |
Dzak | 0:651738eb850c | 13 | #define MAX_LOGIC 10000 // Full-deflection Max Range |
Dzak | 0:651738eb850c | 14 | #define MIN_LOGIC 0 // Full-deflection Min Range |
Dzak | 0:651738eb850c | 15 | |
Dzak | 0:651738eb850c | 16 | #define SWITCH_LEVELS 9 // # of possible levels |
Dzak | 0:651738eb850c | 17 | #define FWD 1 |
Dzak | 0:651738eb850c | 18 | #define REV 0 |
Dzak | 0:651738eb850c | 19 | |
Dzak | 0:651738eb850c | 20 | |
Dzak | 0:651738eb850c | 21 | |
Dzak | 0:651738eb850c | 22 | //NOTE: Period MUST be defined 1st, them DC. |
Dzak | 0:651738eb850c | 23 | |
Dzak | 0:651738eb850c | 24 | float Period_Array [SWITCH_LEVELS] = {0.010, 0.250, 1.0, 2.0, 100.0, 2.0, 1.0, 0.250, 0.010}; // PEriod Corresponding to 10, 100, 200, 400, 0 , 400, 200, 100, 10 Hz |
Dzak | 0:651738eb850c | 25 | uint16_t SpeedThreshold = MAX_LOGIC / SWITCH_LEVELS; |
Dzak | 0:651738eb850c | 26 | |
Dzak | 0:651738eb850c | 27 | uint16_t X_Speed = 4; |
Dzak | 0:651738eb850c | 28 | uint16_t Y_Speed = 4; |
Dzak | 0:651738eb850c | 29 | |
Dzak | 0:651738eb850c | 30 | bool X_Direction; |
Dzak | 0:651738eb850c | 31 | bool Y_Direction; |
Dzak | 0:651738eb850c | 32 | |
Dzak | 0:651738eb850c | 33 | uint16_t tempX_Speed = 1; |
Dzak | 0:651738eb850c | 34 | uint16_t tempY_Speed = 1; |
Dzak | 0:651738eb850c | 35 | |
Dzak | 0:651738eb850c | 36 | |
Dzak | 0:651738eb850c | 37 | main() |
Dzak | 0:651738eb850c | 38 | { |
Dzak | 0:651738eb850c | 39 | while(1) |
Dzak | 0:651738eb850c | 40 | { |
Dzak | 0:651738eb850c | 41 | wait_ms(5); |
Dzak | 0:651738eb850c | 42 | |
Dzak | 0:651738eb850c | 43 | X_Speed = (uint16_t) (X_Axis.read() * MAX_LOGIC) / (SpeedThreshold + SpeedThreshold / SWITCH_LEVELS); |
Dzak | 0:651738eb850c | 44 | |
Dzak | 0:651738eb850c | 45 | Y_Speed = (uint16_t) (Y_Axis.read() * MAX_LOGIC) / (SpeedThreshold + SpeedThreshold / SWITCH_LEVELS); |
Dzak | 0:651738eb850c | 46 | |
Dzak | 0:651738eb850c | 47 | if (X_Speed > 4) {X_Direction = FWD;} |
Dzak | 0:651738eb850c | 48 | if (X_Speed < 4) {X_Direction = REV;} |
Dzak | 0:651738eb850c | 49 | if (Y_Speed > 4) {Y_Direction = FWD;} |
Dzak | 0:651738eb850c | 50 | if (Y_Speed < 4) {Y_Direction = REV;} |
Dzak | 0:651738eb850c | 51 | |
Dzak | 0:651738eb850c | 52 | |
Dzak | 0:651738eb850c | 53 | //serial.printf(" X_Direction : %u", X_Direction); |
Dzak | 0:651738eb850c | 54 | //serial.printf(" Y_Direction : %u \n",Y_Direction); |
Dzak | 0:651738eb850c | 55 | |
Dzak | 0:651738eb850c | 56 | if(tempX_Speed != X_Speed) |
Dzak | 0:651738eb850c | 57 | { |
Dzak | 0:651738eb850c | 58 | tempX_Speed = X_Speed; |
Dzak | 0:651738eb850c | 59 | X_PWM.period(Period_Array[X_Speed]); |
Dzak | 0:651738eb850c | 60 | X_PWM.write(0.5); |
Dzak | 0:651738eb850c | 61 | |
Dzak | 0:651738eb850c | 62 | //serial.printf(" X_Period : %4.4f \n",Period_Array[X_Speed]); |
Dzak | 0:651738eb850c | 63 | } |
Dzak | 0:651738eb850c | 64 | |
Dzak | 0:651738eb850c | 65 | if(tempY_Speed != Y_Speed) |
Dzak | 0:651738eb850c | 66 | { |
Dzak | 0:651738eb850c | 67 | tempY_Speed = Y_Speed; |
Dzak | 0:651738eb850c | 68 | Y_PWM.period(Period_Array[Y_Speed]); |
Dzak | 0:651738eb850c | 69 | Y_PWM.write(0.5); |
Dzak | 0:651738eb850c | 70 | //serial.printf(" Y_Period : %4.4f \n",Period_Array[Y_Speed]); |
Dzak | 0:651738eb850c | 71 | } |
Dzak | 0:651738eb850c | 72 | } |
Dzak | 0:651738eb850c | 73 | } |
Dzak | 0:651738eb850c | 74 | |
Dzak | 0:651738eb850c | 75 |