Program for STCL Control of motors via PWM

Dependencies:   SoftPWM USBDevice mbed

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?

UserRevisionLine numberNew 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