FRDM_wahadlo_torsyjne
Dependencies: mbed BufferedSerial
Fork of FRDM_wahadlo_torsyjne by
main.cpp@9:3540ad710232, 2014-06-12 (annotated)
- Committer:
- Pawel_13
- Date:
- Thu Jun 12 09:07:39 2014 +0000
- Revision:
- 9:3540ad710232
- Parent:
- 8:434d613f0929
- Child:
- 10:497e9a0da7d6
okres 200 us oraz 3200/2 dobrze sie sprawdza
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
wojtekmir | 1:a4f9276a0f35 | 1 | #include "mbed.h" |
Pawel_13 | 8:434d613f0929 | 2 | #include "TSISensor.h" |
Pawel_13 | 9:3540ad710232 | 3 | #include "Timer.h" |
wojtekmir | 1:a4f9276a0f35 | 4 | |
Pawel_13 | 9:3540ad710232 | 5 | int motor_PWM_period_us = 200; //okres sygnału PWM (w mikrosekundach) wyzwalającego kolejny krok silnika |
wojtekmir | 1:a4f9276a0f35 | 6 | |
Pawel_13 | 8:434d613f0929 | 7 | DigitalOut direction(PTC7); //zmiana wartości logicznej na wyjściu PTC7 powoduje zmianę kieruneku obrotów |
Pawel_13 | 8:434d613f0929 | 8 | DigitalOut myled(LED_GREEN); //dioda zielona sygnalizuje zmianę kierunku obrotów |
Pawel_13 | 8:434d613f0929 | 9 | |
Pawel_13 | 8:434d613f0929 | 10 | AnalogIn analog_IN_0(PTB0); //odczyt napięć z wejść analogowych (kąty obrotu) |
Pawel_13 | 8:434d613f0929 | 11 | AnalogIn analog_IN_1(PTB1); |
Pawel_13 | 3:2ba53b9a499a | 12 | |
wojtekmir | 2:78a032749524 | 13 | PwmOut motor(PTA5); //sygnał PWM do sterowania sterownikiem silnika krokowego |
Pawel_13 | 8:434d613f0929 | 14 | Serial pc(USBTX,USBRX); //komunikacja z PC |
wojtekmir | 1:a4f9276a0f35 | 15 | |
Pawel_13 | 8:434d613f0929 | 16 | TSISensor tsi; |
Pawel_13 | 8:434d613f0929 | 17 | |
Pawel_13 | 9:3540ad710232 | 18 | Timer timer; |
Pawel_13 | 9:3540ad710232 | 19 | |
Pawel_13 | 8:434d613f0929 | 20 | float get_voltage_in(AnalogIn analog_in, float zero_analog_in) { |
Pawel_13 | 8:434d613f0929 | 21 | return (analog_in.read() - zero_analog_in) * 2.9035; // przesunięcie do zera i skalowanie napiecia do zakresu |
Pawel_13 | 3:2ba53b9a499a | 22 | } |
Pawel_13 | 3:2ba53b9a499a | 23 | |
Pawel_13 | 8:434d613f0929 | 24 | |
Pawel_13 | 8:434d613f0929 | 25 | int main() { |
Pawel_13 | 6:9414a292d7f2 | 26 | motor.period_us(motor_PWM_period_us); |
Pawel_13 | 9:3540ad710232 | 27 | motor = 0.0; // wypełnienie PWM sygnału CLK |
Pawel_13 | 9:3540ad710232 | 28 | pc.baud(9600); // największa szybkość standardowa, jaką można zadać to 19200 |
Pawel_13 | 5:1e2e73ac4bed | 29 | |
Pawel_13 | 3:2ba53b9a499a | 30 | int i_start = 0; |
Pawel_13 | 9:3540ad710232 | 31 | int EXC_angle = 3200/4; //360 stopni to 3200 krok. przy mkrok. = 1.8/16 |
Pawel_13 | 8:434d613f0929 | 32 | int DIR_switched = 0; |
Pawel_13 | 8:434d613f0929 | 33 | int SWITCH_DIR = EXC_angle; |
Pawel_13 | 8:434d613f0929 | 34 | |
Pawel_13 | 8:434d613f0929 | 35 | wait(15); //czas na ustawienia początkowe 15 sek. |
wojtekmir | 1:a4f9276a0f35 | 36 | |
Pawel_13 | 8:434d613f0929 | 37 | int zero_analog_IN_0 = analog_IN_0.read(); |
Pawel_13 | 8:434d613f0929 | 38 | int zero_analog_IN_1 = analog_IN_1.read(); |
Pawel_13 | 9:3540ad710232 | 39 | timer.start(); |
Pawel_13 | 9:3540ad710232 | 40 | int t0, t1; |
Pawel_13 | 9:3540ad710232 | 41 | int t0_t1 = 0; |
Pawel_13 | 8:434d613f0929 | 42 | |
Pawel_13 | 8:434d613f0929 | 43 | while (true) { |
Pawel_13 | 9:3540ad710232 | 44 | t0 = timer.read_us(); |
Pawel_13 | 8:434d613f0929 | 45 | if (tsi.readPercentage() < 0.5) |
Pawel_13 | 8:434d613f0929 | 46 | motor = 0.5; |
Pawel_13 | 8:434d613f0929 | 47 | else motor = 0.0; // silnik zatrzyma się po dotknięciu prawej strony potencjometru |
Pawel_13 | 9:3540ad710232 | 48 | get_voltage_in(analog_IN_0, zero_analog_IN_0); |
Pawel_13 | 9:3540ad710232 | 49 | |
Pawel_13 | 9:3540ad710232 | 50 | // pc.printf("%.3f\t%d\n", get_voltage_in(analog_IN_0, zero_analog_IN_0), t0_t1); // zbyt długo trwa - wstrzymuje procedurę |
Pawel_13 | 3:2ba53b9a499a | 51 | |
Pawel_13 | 5:1e2e73ac4bed | 52 | i_start += 1; |
Pawel_13 | 3:2ba53b9a499a | 53 | if (i_start == SWITCH_DIR) { |
Pawel_13 | 5:1e2e73ac4bed | 54 | i_start = 0; |
Pawel_13 | 3:2ba53b9a499a | 55 | myled = !myled; |
Pawel_13 | 5:1e2e73ac4bed | 56 | direction = !direction; |
Pawel_13 | 8:434d613f0929 | 57 | if (DIR_switched == 0) { |
Pawel_13 | 8:434d613f0929 | 58 | if (SWITCH_DIR == EXC_angle) { |
Pawel_13 | 8:434d613f0929 | 59 | SWITCH_DIR = 2*EXC_angle; |
Pawel_13 | 8:434d613f0929 | 60 | DIR_switched = 1; |
Pawel_13 | 8:434d613f0929 | 61 | } |
Pawel_13 | 3:2ba53b9a499a | 62 | } |
Pawel_13 | 8:434d613f0929 | 63 | } |
Pawel_13 | 9:3540ad710232 | 64 | t1 = timer.read_us(); |
Pawel_13 | 9:3540ad710232 | 65 | t0_t1 = t1 - t0; |
Pawel_13 | 8:434d613f0929 | 66 | wait_us(motor_PWM_period_us); |
wojtekmir | 1:a4f9276a0f35 | 67 | } |
Pawel_13 | 8:434d613f0929 | 68 | } |