As used for motor testing May / June 2016

Dependencies:   iC_MU mbed-rtos mbed

Fork of SweptSine by Vitec Group

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?

UserRevisionLine numberNew 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", &amplitude);
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 }