H2M Teststand
/
Multiplexer-Test
Multiplexer lauffähig
Fork of Multiplexer-Test by
Multiplexer_read.cpp@8:fd403cfcaa0a, 2014-09-09 (annotated)
- Committer:
- O_Shovah
- Date:
- Tue Sep 09 10:48:03 2014 +0000
- Revision:
- 8:fd403cfcaa0a
- Parent:
- 0:42c1addaf061
- Child:
- 9:341c831b162b
Snippet Drehzahlmessung l?uft [090920141300]; JS
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
O_Shovah | 0:42c1addaf061 | 1 | #include "mbed.h" |
O_Shovah | 0:42c1addaf061 | 2 | |
O_Shovah | 0:42c1addaf061 | 3 | |
O_Shovah | 0:42c1addaf061 | 4 | //Outputs |
O_Shovah | 0:42c1addaf061 | 5 | |
O_Shovah | 8:fd403cfcaa0a | 6 | DigitalOut timetest_0 (p30); |
O_Shovah | 0:42c1addaf061 | 7 | |
O_Shovah | 0:42c1addaf061 | 8 | |
O_Shovah | 0:42c1addaf061 | 9 | BusOut unused(p18); |
O_Shovah | 0:42c1addaf061 | 10 | |
O_Shovah | 0:42c1addaf061 | 11 | |
O_Shovah | 0:42c1addaf061 | 12 | //Inputs |
O_Shovah | 0:42c1addaf061 | 13 | |
O_Shovah | 8:fd403cfcaa0a | 14 | InterruptIn Drehzahl_lichtschranke(p29); |
O_Shovah | 0:42c1addaf061 | 15 | |
O_Shovah | 0:42c1addaf061 | 16 | Timer Umlaufzeit; |
O_Shovah | 0:42c1addaf061 | 17 | |
O_Shovah | 0:42c1addaf061 | 18 | //Communication |
O_Shovah | 0:42c1addaf061 | 19 | |
O_Shovah | 0:42c1addaf061 | 20 | Serial pc(USBTX, USBRX); |
O_Shovah | 0:42c1addaf061 | 21 | |
O_Shovah | 0:42c1addaf061 | 22 | volatile int Drehzeit_counter = 0; |
O_Shovah | 0:42c1addaf061 | 23 | #define DREHZEIT_SIZE 3 |
O_Shovah | 0:42c1addaf061 | 24 | volatile int Drehzeit[DREHZEIT_SIZE]; |
O_Shovah | 0:42c1addaf061 | 25 | |
O_Shovah | 0:42c1addaf061 | 26 | |
O_Shovah | 0:42c1addaf061 | 27 | void Motor_drehzahl() |
O_Shovah | 0:42c1addaf061 | 28 | { |
O_Shovah | 8:fd403cfcaa0a | 29 | timetest_0 = 1; |
O_Shovah | 0:42c1addaf061 | 30 | static bool first_run = true; |
O_Shovah | 0:42c1addaf061 | 31 | int tmp = Umlaufzeit.read_us(); |
O_Shovah | 8:fd403cfcaa0a | 32 | if (first_run) { |
O_Shovah | 8:fd403cfcaa0a | 33 | Umlaufzeit.start(); |
O_Shovah | 8:fd403cfcaa0a | 34 | first_run = false; |
O_Shovah | 8:fd403cfcaa0a | 35 | return; |
O_Shovah | 8:fd403cfcaa0a | 36 | } |
O_Shovah | 0:42c1addaf061 | 37 | if (tmp < 1000) return; |
O_Shovah | 8:fd403cfcaa0a | 38 | |
O_Shovah | 0:42c1addaf061 | 39 | // Cache last 3 values for averaging |
O_Shovah | 0:42c1addaf061 | 40 | Drehzeit[Drehzeit_counter % DREHZEIT_SIZE] = tmp; |
O_Shovah | 0:42c1addaf061 | 41 | ++Drehzeit_counter; |
O_Shovah | 0:42c1addaf061 | 42 | Umlaufzeit.reset(); |
O_Shovah | 8:fd403cfcaa0a | 43 | |
O_Shovah | 8:fd403cfcaa0a | 44 | timetest_0 = 0; |
O_Shovah | 0:42c1addaf061 | 45 | } |
O_Shovah | 0:42c1addaf061 | 46 | |
O_Shovah | 0:42c1addaf061 | 47 | int main(void) |
O_Shovah | 0:42c1addaf061 | 48 | { |
O_Shovah | 8:fd403cfcaa0a | 49 | |
O_Shovah | 8:fd403cfcaa0a | 50 | |
O_Shovah | 8:fd403cfcaa0a | 51 | Drehzahl_lichtschranke.fall(&Motor_drehzahl); |
O_Shovah | 8:fd403cfcaa0a | 52 | |
O_Shovah | 0:42c1addaf061 | 53 | |
O_Shovah | 8:fd403cfcaa0a | 54 | // Time counters |
O_Shovah | 8:fd403cfcaa0a | 55 | Timer timer_print; |
O_Shovah | 8:fd403cfcaa0a | 56 | timer_print.start(); |
O_Shovah | 0:42c1addaf061 | 57 | |
O_Shovah | 0:42c1addaf061 | 58 | |
O_Shovah | 0:42c1addaf061 | 59 | float motor_n_cur = 0; |
O_Shovah | 0:42c1addaf061 | 60 | |
O_Shovah | 8:fd403cfcaa0a | 61 | |
O_Shovah | 0:42c1addaf061 | 62 | |
O_Shovah | 0:42c1addaf061 | 63 | while(true) { |
O_Shovah | 0:42c1addaf061 | 64 | |
O_Shovah | 0:42c1addaf061 | 65 | |
O_Shovah | 0:42c1addaf061 | 66 | |
O_Shovah | 0:42c1addaf061 | 67 | // Calculate motor_n_cur by averaging |
O_Shovah | 0:42c1addaf061 | 68 | int drehzeit_sum = 0; |
O_Shovah | 0:42c1addaf061 | 69 | for (int i=0; i != DREHZEIT_SIZE; ++i) |
O_Shovah | 0:42c1addaf061 | 70 | drehzeit_sum += Drehzeit[i]; |
O_Shovah | 0:42c1addaf061 | 71 | |
O_Shovah | 8:fd403cfcaa0a | 72 | motor_n_cur = (drehzeit_sum ? (1.0e6/drehzeit_sum)*DREHZEIT_SIZE : 0.0)*60; |
O_Shovah | 8:fd403cfcaa0a | 73 | |
O_Shovah | 8:fd403cfcaa0a | 74 | |
O_Shovah | 0:42c1addaf061 | 75 | // Set motor_n_cur to 0 if the interrupt wasn't called for a specified time |
O_Shovah | 0:42c1addaf061 | 76 | if (Umlaufzeit.read_ms() > 200) |
O_Shovah | 0:42c1addaf061 | 77 | motor_n_cur = 0.0; |
O_Shovah | 0:42c1addaf061 | 78 | |
O_Shovah | 8:fd403cfcaa0a | 79 | pc.printf("%f\n\r",motor_n_cur); |
O_Shovah | 0:42c1addaf061 | 80 | |
O_Shovah | 8:fd403cfcaa0a | 81 | wait(0.5); |
O_Shovah | 0:42c1addaf061 | 82 | } |
O_Shovah | 0:42c1addaf061 | 83 | } |