Lagerpruefstand

Dependencies:   mbed

Committer:
O_Shovah
Date:
Thu Nov 26 11:44:59 2015 +0000
Revision:
1:894dcc6f650d
Parent:
0:0745169668f2
Version Lagerpruefstand of the 261115

Who changed what in which revision?

UserRevisionLine numberNew contents of line
O_Shovah 0:0745169668f2 1 #include "mbed.h"
O_Shovah 0:0745169668f2 2 #include "Ticker.h"
O_Shovah 0:0745169668f2 3
O_Shovah 0:0745169668f2 4 #define marker 16.0
O_Shovah 0:0745169668f2 5
O_Shovah 0:0745169668f2 6 //***************************************************************************************************
O_Shovah 0:0745169668f2 7 //Outputs
O_Shovah 0:0745169668f2 8
O_Shovah 0:0745169668f2 9 DigitalOut led1(LED1);
O_Shovah 0:0745169668f2 10
O_Shovah 0:0745169668f2 11 DigitalOut led2(LED2);
O_Shovah 0:0745169668f2 12
O_Shovah 0:0745169668f2 13 DigitalOut led4(LED4);
O_Shovah 0:0745169668f2 14
O_Shovah 0:0745169668f2 15 DigitalOut Motor(p14);
O_Shovah 0:0745169668f2 16
O_Shovah 0:0745169668f2 17 PwmOut servo(p21);
O_Shovah 0:0745169668f2 18
O_Shovah 0:0745169668f2 19 //***************************************************************************************************
O_Shovah 0:0745169668f2 20 //Inputs
O_Shovah 0:0745169668f2 21
O_Shovah 0:0745169668f2 22 InterruptIn input(p17);
O_Shovah 0:0745169668f2 23
O_Shovah 0:0745169668f2 24
O_Shovah 0:0745169668f2 25
O_Shovah 0:0745169668f2 26 //***************************************************************************************************
O_Shovah 0:0745169668f2 27 //Communication
O_Shovah 0:0745169668f2 28
O_Shovah 0:0745169668f2 29 Serial pc(USBTX, USBRX); // tx, rx
O_Shovah 0:0745169668f2 30
O_Shovah 0:0745169668f2 31 //***************************************************************************************************
O_Shovah 0:0745169668f2 32 //Variables
O_Shovah 0:0745169668f2 33
O_Shovah 0:0745169668f2 34 float sample;
O_Shovah 0:0745169668f2 35
O_Shovah 0:0745169668f2 36 volatile float rpm = 0, rpm_total;
O_Shovah 0:0745169668f2 37
O_Shovah 0:0745169668f2 38 bool newDetection = true; //need this as multiple reads happen across white spot
O_Shovah 0:0745169668f2 39
O_Shovah 0:0745169668f2 40 bool run_down = false;
O_Shovah 0:0745169668f2 41
O_Shovah 0:0745169668f2 42 bool broadcast = false;
O_Shovah 0:0745169668f2 43
O_Shovah 0:0745169668f2 44 bool broadcast_old = false;
O_Shovah 0:0745169668f2 45
O_Shovah 0:0745169668f2 46 int samples[10]; //higher number = greater accuracy but longer read time
O_Shovah 0:0745169668f2 47
O_Shovah 0:0745169668f2 48 int sampleCounts = 0, sampleCounts_old = 0;
O_Shovah 0:0745169668f2 49
O_Shovah 0:0745169668f2 50 bool Motor_status = false;
O_Shovah 0:0745169668f2 51
O_Shovah 0:0745169668f2 52
O_Shovah 0:0745169668f2 53
O_Shovah 0:0745169668f2 54 volatile int delta_t;
O_Shovah 0:0745169668f2 55
O_Shovah 0:0745169668f2 56
O_Shovah 0:0745169668f2 57 //***************************************************************************************************
O_Shovah 0:0745169668f2 58 //Misc
O_Shovah 0:0745169668f2 59
O_Shovah 0:0745169668f2 60 Timer t;
O_Shovah 0:0745169668f2 61
O_Shovah 0:0745169668f2 62 Ticker serial_tx;
O_Shovah 0:0745169668f2 63
O_Shovah 0:0745169668f2 64 int seconds = 0;
O_Shovah 0:0745169668f2 65
O_Shovah 0:0745169668f2 66 void rpm_counter()
O_Shovah 0:0745169668f2 67 {
O_Shovah 0:0745169668f2 68
O_Shovah 0:0745169668f2 69 sampleCounts++;
O_Shovah 0:0745169668f2 70
O_Shovah 0:0745169668f2 71 led2 = !led2;
O_Shovah 0:0745169668f2 72
O_Shovah 0:0745169668f2 73 }
O_Shovah 0:0745169668f2 74
O_Shovah 0:0745169668f2 75 void servo_engage_movement()
O_Shovah 0:0745169668f2 76 {
O_Shovah 0:0745169668f2 77
O_Shovah 0:0745169668f2 78 servo.pulsewidth_us(1100 ); // servo position determined by a pulsewidth between 1-2ms
O_Shovah 0:0745169668f2 79
O_Shovah 0:0745169668f2 80 //pc.printf("offset = %i us \n\r",offset);
O_Shovah 0:0745169668f2 81 }
O_Shovah 0:0745169668f2 82
O_Shovah 0:0745169668f2 83 void servo_disengage_movement()
O_Shovah 0:0745169668f2 84 {
O_Shovah 0:0745169668f2 85
O_Shovah 0:0745169668f2 86 servo.pulsewidth_us(1900); // servo position determined by a pulsewidth between 1-2ms
O_Shovah 0:0745169668f2 87
O_Shovah 0:0745169668f2 88 // pc.printf("offset = %i us \n\r",offset);
O_Shovah 0:0745169668f2 89
O_Shovah 0:0745169668f2 90 }
O_Shovah 0:0745169668f2 91
O_Shovah 0:0745169668f2 92
O_Shovah 0:0745169668f2 93 void rpm_display()
O_Shovah 0:0745169668f2 94 {
O_Shovah 0:0745169668f2 95
O_Shovah 0:0745169668f2 96 rpm_total = sampleCounts/marker;
O_Shovah 0:0745169668f2 97
O_Shovah 0:0745169668f2 98 rpm = ((rpm*4) + ((sampleCounts - sampleCounts_old)/ marker * 60))/5;
O_Shovah 0:0745169668f2 99
O_Shovah 0:0745169668f2 100 sampleCounts_old = sampleCounts;
O_Shovah 0:0745169668f2 101
O_Shovah 0:0745169668f2 102 if(run_down == false && broadcast == false && Motor_status == false) {
O_Shovah 0:0745169668f2 103
O_Shovah 0:0745169668f2 104 servo_engage_movement();
O_Shovah 0:0745169668f2 105
O_Shovah 0:0745169668f2 106 wait_ms(500);
O_Shovah 0:0745169668f2 107
O_Shovah 0:0745169668f2 108 Motor = 0;
O_Shovah 0:0745169668f2 109
O_Shovah 0:0745169668f2 110 Motor_status = true;
O_Shovah 0:0745169668f2 111
O_Shovah 0:0745169668f2 112 sampleCounts = 0;
O_Shovah 0:0745169668f2 113
O_Shovah 0:0745169668f2 114 sampleCounts_old = 0;
O_Shovah 0:0745169668f2 115
O_Shovah 0:0745169668f2 116 }
O_Shovah 0:0745169668f2 117
O_Shovah 0:0745169668f2 118 if(rpm > 505 && run_down == false) {
O_Shovah 0:0745169668f2 119
O_Shovah 0:0745169668f2 120 servo_disengage_movement();
O_Shovah 0:0745169668f2 121
O_Shovah 0:0745169668f2 122 Motor = 1;
O_Shovah 0:0745169668f2 123
O_Shovah 0:0745169668f2 124 Motor_status = false;
O_Shovah 0:0745169668f2 125
O_Shovah 0:0745169668f2 126 run_down = true;
O_Shovah 0:0745169668f2 127 }
O_Shovah 0:0745169668f2 128
O_Shovah 0:0745169668f2 129 if(run_down == true && rpm < 5) {
O_Shovah 0:0745169668f2 130
O_Shovah 0:0745169668f2 131 run_down = false;
O_Shovah 0:0745169668f2 132
O_Shovah 0:0745169668f2 133 broadcast = false;
O_Shovah 0:0745169668f2 134 }
O_Shovah 0:0745169668f2 135
O_Shovah 0:0745169668f2 136 if(run_down == true && rpm <= 500) {
O_Shovah 0:0745169668f2 137
O_Shovah 0:0745169668f2 138 broadcast_old = broadcast;
O_Shovah 0:0745169668f2 139
O_Shovah 0:0745169668f2 140 broadcast = true;
O_Shovah 0:0745169668f2 141 }
O_Shovah 0:0745169668f2 142
O_Shovah 0:0745169668f2 143 if(broadcast != broadcast_old) {
O_Shovah 0:0745169668f2 144
O_Shovah 0:0745169668f2 145 seconds = 0;
O_Shovah 0:0745169668f2 146
O_Shovah 0:0745169668f2 147 //pc.printf("Beginn der Drehzahlaufzeichnung\n\r");
O_Shovah 0:0745169668f2 148 }
O_Shovah 0:0745169668f2 149
O_Shovah 0:0745169668f2 150 if(broadcast == true) {
O_Shovah 0:0745169668f2 151
O_Shovah 0:0745169668f2 152 pc.printf("$1;1;%i;%f;0\r\n",seconds,rpm);
O_Shovah 0:0745169668f2 153
O_Shovah 0:0745169668f2 154 ++seconds;
O_Shovah 0:0745169668f2 155
O_Shovah 0:0745169668f2 156 }
O_Shovah 0:0745169668f2 157
O_Shovah 0:0745169668f2 158 led1 = !led1;
O_Shovah 0:0745169668f2 159
O_Shovah 0:0745169668f2 160 }
O_Shovah 0:0745169668f2 161
O_Shovah 0:0745169668f2 162
O_Shovah 0:0745169668f2 163 int main(void)
O_Shovah 0:0745169668f2 164 {
O_Shovah 0:0745169668f2 165
O_Shovah 0:0745169668f2 166 Motor = 1;
O_Shovah 0:0745169668f2 167
O_Shovah 0:0745169668f2 168 Motor_status = false;
O_Shovah 0:0745169668f2 169
O_Shovah 0:0745169668f2 170 servo.period(0.020); // servo requires a 20ms period
O_Shovah 0:0745169668f2 171
O_Shovah 0:0745169668f2 172 t.start(); //start initial timer
O_Shovah 0:0745169668f2 173
O_Shovah 0:0745169668f2 174 servo.pulsewidth_us(2000);
O_Shovah 0:0745169668f2 175
O_Shovah 0:0745169668f2 176 input.rise(&rpm_counter);
O_Shovah 0:0745169668f2 177
O_Shovah 1:894dcc6f650d 178 serial_tx.attach(&rpm_display,1); // the function rpm_display attached to the ticker wich is using the interval of 1 second
O_Shovah 0:0745169668f2 179
O_Shovah 0:0745169668f2 180
O_Shovah 0:0745169668f2 181
O_Shovah 0:0745169668f2 182 while(true) {
O_Shovah 0:0745169668f2 183
O_Shovah 0:0745169668f2 184
O_Shovah 0:0745169668f2 185
O_Shovah 0:0745169668f2 186 led4 = !run_down;
O_Shovah 0:0745169668f2 187
O_Shovah 0:0745169668f2 188 }
O_Shovah 0:0745169668f2 189 }