As used for motor testing May / June 2016
Dependencies: iC_MU mbed-rtos mbed
Fork of SweptSine by
main.cpp@3:463edcfc09c5, 2016-06-08 (annotated)
- Committer:
- acodd
- Date:
- Wed Jun 08 13:56:25 2016 +0000
- Revision:
- 3:463edcfc09c5
- Parent:
- 2:be3b6a72f823
As used for scoping motors May / June 2016
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ms523 | 0:3a132f85c1a8 | 1 | #include "mbed.h" |
ms523 | 1:0f0423207b62 | 2 | #include "iC_MU.h" |
ms523 | 1:0f0423207b62 | 3 | #include "rtos.h" |
acodd | 3:463edcfc09c5 | 4 | #include "MyAxis.h" |
ms523 | 1:0f0423207b62 | 5 | |
ms523 | 1:0f0423207b62 | 6 | // iC-MU Encoder Objects |
acodd | 3:463edcfc09c5 | 7 | iC_MU tilt_Motor(p5,p6,p7,p8); |
acodd | 3:463edcfc09c5 | 8 | iC_MU TiltPos(p5,p6,p7,p11); |
acodd | 3:463edcfc09c5 | 9 | iC_MU pan_Motor(p5,p6,p7,p12); |
acodd | 3:463edcfc09c5 | 10 | iC_MU PanPos(p5,p6,p7,p13); |
ms523 | 1:0f0423207b62 | 11 | |
acodd | 3:463edcfc09c5 | 12 | // Tilt Motor |
acodd | 3:463edcfc09c5 | 13 | PwmOut Tilt_Motor_PWM(p23); // Purple wire |
acodd | 3:463edcfc09c5 | 14 | DigitalOut Tilt_Motor_Direction(p24); // Yellow wire |
ms523 | 1:0f0423207b62 | 15 | // Pan Motor |
ms523 | 1:0f0423207b62 | 16 | PwmOut Pan_Motor_PWM(p21); // Purple wire |
ms523 | 1:0f0423207b62 | 17 | DigitalOut Pan_Motor_Direction(p22); // Yellow wire |
ms523 | 1:0f0423207b62 | 18 | |
ms523 | 1:0f0423207b62 | 19 | // Serial objects |
ms523 | 0:3a132f85c1a8 | 20 | Serial pc (USBTX,USBRX); |
ms523 | 1:0f0423207b62 | 21 | |
acodd | 3:463edcfc09c5 | 22 | int ServiceKeyboard(); |
acodd | 3:463edcfc09c5 | 23 | |
acodd | 3:463edcfc09c5 | 24 | |
acodd | 3:463edcfc09c5 | 25 | // Global Variables for sinusoidrun |
acodd | 3:463edcfc09c5 | 26 | float run_time = 10.0; |
ms523 | 1:0f0423207b62 | 27 | float start_Hz = 1.0, stop_Hz = 2.0; |
acodd | 3:463edcfc09c5 | 28 | extern float amplitude; |
acodd | 3:463edcfc09c5 | 29 | bool sinusoid = 0; |
acodd | 3:463edcfc09c5 | 30 | extern float a; |
acodd | 3:463edcfc09c5 | 31 | extern float Hz; |
acodd | 3:463edcfc09c5 | 32 | |
acodd | 3:463edcfc09c5 | 33 | // Global variables for auto gearbox calculator |
acodd | 3:463edcfc09c5 | 34 | bool ratiocalc = 0; |
acodd | 3:463edcfc09c5 | 35 | |
ms523 | 1:0f0423207b62 | 36 | |
ms523 | 1:0f0423207b62 | 37 | // External variables |
ms523 | 1:0f0423207b62 | 38 | extern int LasticMuPosition; |
ms523 | 1:0f0423207b62 | 39 | |
ms523 | 1:0f0423207b62 | 40 | // Functions |
acodd | 3:463edcfc09c5 | 41 | void PanAxisInitialise(); |
acodd | 3:463edcfc09c5 | 42 | void TiltAxisInitialise(); |
acodd | 3:463edcfc09c5 | 43 | void AxisControlLoop(MyAxis& Axis); |
acodd | 3:463edcfc09c5 | 44 | void Pan_Counter(void const *args); |
acodd | 3:463edcfc09c5 | 45 | |
acodd | 3:463edcfc09c5 | 46 | void RunLoop(void const *args) |
acodd | 3:463edcfc09c5 | 47 | { |
acodd | 3:463edcfc09c5 | 48 | AxisControlLoop(Pan); |
acodd | 3:463edcfc09c5 | 49 | AxisControlLoop(Tilt); |
acodd | 3:463edcfc09c5 | 50 | } |
ms523 | 0:3a132f85c1a8 | 51 | |
ms523 | 0:3a132f85c1a8 | 52 | int main() |
ms523 | 0:3a132f85c1a8 | 53 | { |
ms523 | 1:0f0423207b62 | 54 | // Initalise Pan Velocity loop RtosTimer thread |
acodd | 3:463edcfc09c5 | 55 | //Startme(); |
acodd | 3:463edcfc09c5 | 56 | pc.baud(921600); |
acodd | 3:463edcfc09c5 | 57 | pc.printf("\n\r AH-10 Motor Scope Tool \n\r"); |
acodd | 3:463edcfc09c5 | 58 | pc.printf("\n\r Press q for menu \n\r"); |
acodd | 3:463edcfc09c5 | 59 | PanAxisInitialise(); |
acodd | 3:463edcfc09c5 | 60 | TiltAxisInitialise(); |
acodd | 3:463edcfc09c5 | 61 | RtosTimer RunLoop_timer(RunLoop, osTimerPeriodic); |
acodd | 3:463edcfc09c5 | 62 | RunLoop_timer.start(1); // Run at 1kHz |
ms523 | 2:be3b6a72f823 | 63 | |
acodd | 3:463edcfc09c5 | 64 | |
acodd | 3:463edcfc09c5 | 65 | // Initalise Pan counter RtosTimer thread |
acodd | 3:463edcfc09c5 | 66 | RtosTimer Pan_Counter_timer(Pan_Counter, osTimerPeriodic); |
acodd | 3:463edcfc09c5 | 67 | Pan_Counter_timer.start(1); |
ms523 | 1:0f0423207b62 | 68 | |
ms523 | 1:0f0423207b62 | 69 | |
ms523 | 1:0f0423207b62 | 70 | while(1) { |
acodd | 3:463edcfc09c5 | 71 | |
acodd | 3:463edcfc09c5 | 72 | if(pc.readable()) { |
acodd | 3:463edcfc09c5 | 73 | ServiceKeyboard(); |
acodd | 3:463edcfc09c5 | 74 | } |
acodd | 3:463edcfc09c5 | 75 | |
acodd | 3:463edcfc09c5 | 76 | if (sinusoid) { |
acodd | 3:463edcfc09c5 | 77 | sinusoid = false; |
acodd | 3:463edcfc09c5 | 78 | |
acodd | 3:463edcfc09c5 | 79 | // Prompt the user to enter the test parameters |
acodd | 3:463edcfc09c5 | 80 | pc.printf("\n\r Enter Start frequency (Hz): "); |
acodd | 3:463edcfc09c5 | 81 | pc.scanf("%f", &start_Hz); |
acodd | 3:463edcfc09c5 | 82 | pc.printf("%f",start_Hz); |
acodd | 3:463edcfc09c5 | 83 | |
acodd | 3:463edcfc09c5 | 84 | pc.printf("\n\r Enter Stop frequency (Hz): "); |
acodd | 3:463edcfc09c5 | 85 | pc.scanf("%f", &stop_Hz); |
acodd | 3:463edcfc09c5 | 86 | pc.printf("%f",stop_Hz); |
acodd | 3:463edcfc09c5 | 87 | |
acodd | 3:463edcfc09c5 | 88 | pc.printf("\n\r Enter Amplitude (encoder counts): "); |
acodd | 3:463edcfc09c5 | 89 | pc.scanf("%f", &litude); |
acodd | 3:463edcfc09c5 | 90 | pc.printf("%f",amplitude); |
acodd | 3:463edcfc09c5 | 91 | |
acodd | 3:463edcfc09c5 | 92 | pc.printf("\n\r Enter Time (s): "); |
acodd | 3:463edcfc09c5 | 93 | pc.scanf("%f", &run_time); |
acodd | 3:463edcfc09c5 | 94 | pc.printf("%f",run_time); |
acodd | 3:463edcfc09c5 | 95 | |
acodd | 3:463edcfc09c5 | 96 | pc.printf("\n\n\r Press any key to start test..."); |
acodd | 3:463edcfc09c5 | 97 | pc.getc(); |
acodd | 3:463edcfc09c5 | 98 | |
acodd | 3:463edcfc09c5 | 99 | a = (stop_Hz - start_Hz) / (run_time * 1000); // This is the incrementor |
acodd | 3:463edcfc09c5 | 100 | pc.printf("\n\n\n\r ********************************************* \n\n\n\r *************************************************"); |
acodd | 3:463edcfc09c5 | 101 | // pc.printf("\n\n\r Time (ms),input,output,frequency (Hz)"); |
acodd | 3:463edcfc09c5 | 102 | pc.printf("\n\n\r Time (ms),Motor,System,frequency (Hz x 100),Demand"); |
acodd | 3:463edcfc09c5 | 103 | |
acodd | 3:463edcfc09c5 | 104 | Pan.start_SysPos = Pan.System_position; |
acodd | 3:463edcfc09c5 | 105 | Pan.start_MotPos = Pan.Motor_position; |
acodd | 3:463edcfc09c5 | 106 | |
acodd | 3:463edcfc09c5 | 107 | Tilt.start_SysPos = Tilt.System_position; |
acodd | 3:463edcfc09c5 | 108 | Tilt.start_MotPos = Tilt.Motor_position; |
acodd | 3:463edcfc09c5 | 109 | |
acodd | 3:463edcfc09c5 | 110 | // Set the test running# |
acodd | 3:463edcfc09c5 | 111 | if (Pan.jog > 0){ |
acodd | 3:463edcfc09c5 | 112 | Pan.sinusoidrun = 1; |
acodd | 3:463edcfc09c5 | 113 | } |
acodd | 3:463edcfc09c5 | 114 | if (Tilt.jog > 0) { |
acodd | 3:463edcfc09c5 | 115 | Tilt.sinusoidrun = 1; |
acodd | 3:463edcfc09c5 | 116 | } |
acodd | 3:463edcfc09c5 | 117 | } |
acodd | 3:463edcfc09c5 | 118 | |
acodd | 3:463edcfc09c5 | 119 | if (ratiocalc) { |
acodd | 3:463edcfc09c5 | 120 | ratiocalc = false; |
acodd | 3:463edcfc09c5 | 121 | |
acodd | 3:463edcfc09c5 | 122 | Pan.start_SysPos = Pan.System_position; |
acodd | 3:463edcfc09c5 | 123 | Pan.start_MotPos = Pan.Motor_position; |
acodd | 3:463edcfc09c5 | 124 | |
acodd | 3:463edcfc09c5 | 125 | Pan.calcmyratio = true; |
acodd | 3:463edcfc09c5 | 126 | |
acodd | 3:463edcfc09c5 | 127 | Tilt.start_SysPos = Tilt.System_position; |
acodd | 3:463edcfc09c5 | 128 | Tilt.start_MotPos = Tilt.Motor_position; |
acodd | 3:463edcfc09c5 | 129 | |
acodd | 3:463edcfc09c5 | 130 | Tilt.calcmyratio = true; |
acodd | 3:463edcfc09c5 | 131 | } |
ms523 | 0:3a132f85c1a8 | 132 | } |
ms523 | 0:3a132f85c1a8 | 133 | |
ms523 | 0:3a132f85c1a8 | 134 | } |