Lagerpruefstand
Dependencies: mbed
Lagerpruefstand.cpp@1:894dcc6f650d, 2015-11-26 (annotated)
- 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?
User | Revision | Line number | New 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 | } |