Program for STCL Control of motors via PWM
Dependencies: SoftPWM USBDevice mbed
main.cpp@1:2c0e9ef138a4, 2015-04-17 (annotated)
- Committer:
- Dzak
- Date:
- Fri Apr 17 03:14:39 2015 +0000
- Revision:
- 1:2c0e9ef138a4
- Parent:
- 0:651738eb850c
- Child:
- 2:31a9ee6d066d
Updated to include Z axis. Do not update USBDevice library! New version not working properly with Mbuino
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 | 1:2c0e9ef138a4 | 7 | AnalogIn Z_Axis(P0_15); |
Dzak | 0:651738eb850c | 8 | |
Dzak | 0:651738eb850c | 9 | SoftPWM X_PWM(P0_9); //P0_9 |
Dzak | 0:651738eb850c | 10 | SoftPWM Y_PWM(P0_10); //P0_10 |
Dzak | 1:2c0e9ef138a4 | 11 | SoftPWM Z_PWM(P0_4); //P0_4 |
Dzak | 0:651738eb850c | 12 | |
Dzak | 0:651738eb850c | 13 | USBSerial serial; |
Dzak | 0:651738eb850c | 14 | |
Dzak | 0:651738eb850c | 15 | #define MAX_LOGIC 10000 // Full-deflection Max Range |
Dzak | 0:651738eb850c | 16 | #define MIN_LOGIC 0 // Full-deflection Min Range |
Dzak | 0:651738eb850c | 17 | |
Dzak | 1:2c0e9ef138a4 | 18 | #define SWITCH_LEVELS 5 // # of possible levels |
Dzak | 0:651738eb850c | 19 | #define FWD 1 |
Dzak | 0:651738eb850c | 20 | #define REV 0 |
Dzak | 0:651738eb850c | 21 | |
Dzak | 0:651738eb850c | 22 | |
Dzak | 0:651738eb850c | 23 | |
Dzak | 0:651738eb850c | 24 | //NOTE: Period MUST be defined 1st, them DC. |
Dzak | 0:651738eb850c | 25 | |
Dzak | 1:2c0e9ef138a4 | 26 | float Period_Array [SWITCH_LEVELS] = {0.01, 0.1, 100.0, 0.1, 0.01}; // Period Corresponding to 10, 100, 0, 100, 10 Hz |
Dzak | 0:651738eb850c | 27 | uint16_t SpeedThreshold = MAX_LOGIC / SWITCH_LEVELS; |
Dzak | 0:651738eb850c | 28 | |
Dzak | 0:651738eb850c | 29 | uint16_t X_Speed = 4; |
Dzak | 0:651738eb850c | 30 | uint16_t Y_Speed = 4; |
Dzak | 1:2c0e9ef138a4 | 31 | uint16_t Z_Speed = 4; |
Dzak | 0:651738eb850c | 32 | |
Dzak | 1:2c0e9ef138a4 | 33 | bool X_Direction = FWD; |
Dzak | 1:2c0e9ef138a4 | 34 | bool Y_Direction = FWD; |
Dzak | 1:2c0e9ef138a4 | 35 | bool Z_Direction = FWD; |
Dzak | 0:651738eb850c | 36 | |
Dzak | 0:651738eb850c | 37 | uint16_t tempX_Speed = 1; |
Dzak | 0:651738eb850c | 38 | uint16_t tempY_Speed = 1; |
Dzak | 1:2c0e9ef138a4 | 39 | uint16_t tempZ_Speed = 1; |
Dzak | 0:651738eb850c | 40 | |
Dzak | 0:651738eb850c | 41 | |
Dzak | 0:651738eb850c | 42 | main() |
Dzak | 0:651738eb850c | 43 | { |
Dzak | 0:651738eb850c | 44 | while(1) |
Dzak | 0:651738eb850c | 45 | { |
Dzak | 0:651738eb850c | 46 | wait_ms(5); |
Dzak | 0:651738eb850c | 47 | |
Dzak | 0:651738eb850c | 48 | X_Speed = (uint16_t) (X_Axis.read() * MAX_LOGIC) / (SpeedThreshold + SpeedThreshold / SWITCH_LEVELS); |
Dzak | 0:651738eb850c | 49 | |
Dzak | 0:651738eb850c | 50 | Y_Speed = (uint16_t) (Y_Axis.read() * MAX_LOGIC) / (SpeedThreshold + SpeedThreshold / SWITCH_LEVELS); |
Dzak | 0:651738eb850c | 51 | |
Dzak | 1:2c0e9ef138a4 | 52 | Z_Speed = (uint16_t) (Z_Axis.read() * MAX_LOGIC) / (SpeedThreshold + SpeedThreshold / SWITCH_LEVELS); |
Dzak | 1:2c0e9ef138a4 | 53 | |
Dzak | 1:2c0e9ef138a4 | 54 | if (X_Speed > 2) {X_Direction = FWD;} |
Dzak | 1:2c0e9ef138a4 | 55 | if (X_Speed < 2) {X_Direction = REV;} |
Dzak | 1:2c0e9ef138a4 | 56 | if (Y_Speed > 2) {Y_Direction = FWD;} |
Dzak | 1:2c0e9ef138a4 | 57 | if (Y_Speed < 2) {Y_Direction = REV;} |
Dzak | 1:2c0e9ef138a4 | 58 | if (Z_Speed > 2) {Z_Direction = FWD;} |
Dzak | 1:2c0e9ef138a4 | 59 | if (Z_Speed < 2) {Z_Direction = REV;} |
Dzak | 0:651738eb850c | 60 | |
Dzak | 0:651738eb850c | 61 | |
Dzak | 1:2c0e9ef138a4 | 62 | serial.printf(" X_Direction : %u", X_Direction); |
Dzak | 1:2c0e9ef138a4 | 63 | serial.printf(" Y_Direction : %u \n",Y_Direction); |
Dzak | 1:2c0e9ef138a4 | 64 | serial.printf(" Z_Direction : %u \n",Z_Direction); |
Dzak | 0:651738eb850c | 65 | |
Dzak | 0:651738eb850c | 66 | if(tempX_Speed != X_Speed) |
Dzak | 0:651738eb850c | 67 | { |
Dzak | 0:651738eb850c | 68 | tempX_Speed = X_Speed; |
Dzak | 0:651738eb850c | 69 | X_PWM.period(Period_Array[X_Speed]); |
Dzak | 0:651738eb850c | 70 | X_PWM.write(0.5); |
Dzak | 0:651738eb850c | 71 | |
Dzak | 1:2c0e9ef138a4 | 72 | serial.printf(" X_Period : %4.4f \n",Period_Array[X_Speed]); |
Dzak | 0:651738eb850c | 73 | } |
Dzak | 0:651738eb850c | 74 | |
Dzak | 0:651738eb850c | 75 | if(tempY_Speed != Y_Speed) |
Dzak | 0:651738eb850c | 76 | { |
Dzak | 0:651738eb850c | 77 | tempY_Speed = Y_Speed; |
Dzak | 0:651738eb850c | 78 | Y_PWM.period(Period_Array[Y_Speed]); |
Dzak | 0:651738eb850c | 79 | Y_PWM.write(0.5); |
Dzak | 1:2c0e9ef138a4 | 80 | serial.printf(" Y_Period : %4.4f \n",Period_Array[Y_Speed]); |
Dzak | 1:2c0e9ef138a4 | 81 | } |
Dzak | 1:2c0e9ef138a4 | 82 | |
Dzak | 1:2c0e9ef138a4 | 83 | if(tempZ_Speed != Z_Speed) |
Dzak | 1:2c0e9ef138a4 | 84 | { |
Dzak | 1:2c0e9ef138a4 | 85 | tempZ_Speed = Z_Speed; |
Dzak | 1:2c0e9ef138a4 | 86 | Z_PWM.period(Period_Array[Z_Speed]); |
Dzak | 1:2c0e9ef138a4 | 87 | Z_PWM.write(0.5); |
Dzak | 1:2c0e9ef138a4 | 88 | serial.printf(" Z_Period : %4.4f \n",Period_Array[Z_Speed]); |
Dzak | 0:651738eb850c | 89 | } |
Dzak | 0:651738eb850c | 90 | } |
Dzak | 0:651738eb850c | 91 | } |
Dzak | 0:651738eb850c | 92 | |
Dzak | 0:651738eb850c | 93 |