
FRDM_wahadlo_torsyjne
Dependencies: mbed BufferedSerial
Fork of FRDM_wahadlo_torsyjne by
main.cpp@11:b3bd4b86f914, 2014-06-14 (annotated)
- Committer:
- wojtekmir
- Date:
- Sat Jun 14 11:15:33 2014 +0000
- Revision:
- 11:b3bd4b86f914
- Parent:
- 10:497e9a0da7d6
- Child:
- 12:103f3fbeab78
Poprawione przerwania
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 | |
wojtekmir | 11:b3bd4b86f914 | 5 | Ticker triger1; //przerwanie sterowania silnikiem |
wojtekmir | 11:b3bd4b86f914 | 6 | Ticker triger2; //przerwanie wysyłania danych |
wojtekmir | 11:b3bd4b86f914 | 7 | TSISensor tsi; //sensor dotykowy |
wojtekmir | 10:497e9a0da7d6 | 8 | |
wojtekmir | 11:b3bd4b86f914 | 9 | int motor_PWM_period_us = 200; //okres sygnału PWM (w mikrosekundach) wyzwalającego kolejny krok silnika |
wojtekmir | 11:b3bd4b86f914 | 10 | int EXC_angle = 3200/4; //360 stopni to 3200 krok. przy mkrok. = 1.8/16 |
wojtekmir | 11:b3bd4b86f914 | 11 | float switch_dir_time=(float)((float)EXC_angle/500.0)*((float)motor_PWM_period_us/1000.0); |
wojtekmir | 11:b3bd4b86f914 | 12 | //czas po któym następuje zmiana obrotów (żeby nie liczyć po każdej zmianie kierunku w pętli) |
wojtekmir | 11:b3bd4b86f914 | 13 | int DIR_switched = 0; |
wojtekmir | 10:497e9a0da7d6 | 14 | int SWITCH_DIR = EXC_angle; |
wojtekmir | 10:497e9a0da7d6 | 15 | |
wojtekmir | 11:b3bd4b86f914 | 16 | DigitalOut direction(PTC7); //zmiana wartości logicznej na wyjściu PTC7 powoduje zmianę kieruneku obrotów |
wojtekmir | 11:b3bd4b86f914 | 17 | DigitalOut myled(LED_GREEN); //dioda zielona sygnalizuje zmianę kierunku obrotów |
wojtekmir | 11:b3bd4b86f914 | 18 | AnalogIn analog_IN_0(PTB0); //odczyt napięcia z wejścia analogowego 0 (kąt obrotu kolumny) |
wojtekmir | 11:b3bd4b86f914 | 19 | AnalogIn analog_IN_1(PTB1); //odczyt napięcia z wejścia analogowego 1 (kąt obrotu ciała swobodnego) |
wojtekmir | 11:b3bd4b86f914 | 20 | PwmOut motor(PTA5); //sygnał PWM do sterowania sterownikiem silnika krokowego |
wojtekmir | 11:b3bd4b86f914 | 21 | Serial pc(USBTX,USBRX); //komunikacja z PC |
Pawel_13 | 8:434d613f0929 | 22 | |
Pawel_13 | 9:3540ad710232 | 23 | Timer timer; |
Pawel_13 | 9:3540ad710232 | 24 | |
Pawel_13 | 8:434d613f0929 | 25 | float get_voltage_in(AnalogIn analog_in, float zero_analog_in) { |
wojtekmir | 11:b3bd4b86f914 | 26 | return (analog_in.read() - zero_analog_in) * 2.9035; //przesunięcie do zera i skalowanie napiecia do zakresu |
Pawel_13 | 3:2ba53b9a499a | 27 | } |
wojtekmir | 10:497e9a0da7d6 | 28 | void task1() { |
wojtekmir | 10:497e9a0da7d6 | 29 | myled = !myled; |
wojtekmir | 10:497e9a0da7d6 | 30 | direction = !direction; |
wojtekmir | 10:497e9a0da7d6 | 31 | } |
Pawel_13 | 3:2ba53b9a499a | 32 | |
wojtekmir | 10:497e9a0da7d6 | 33 | void task2() { |
wojtekmir | 10:497e9a0da7d6 | 34 | int zero_analog_IN_0 = analog_IN_0.read(); |
wojtekmir | 10:497e9a0da7d6 | 35 | int zero_analog_IN_1 = analog_IN_1.read(); |
wojtekmir | 10:497e9a0da7d6 | 36 | |
wojtekmir | 10:497e9a0da7d6 | 37 | get_voltage_in(analog_IN_0, zero_analog_IN_0); |
wojtekmir | 10:497e9a0da7d6 | 38 | pc.printf("%.3f\t\n", get_voltage_in(analog_IN_0, zero_analog_IN_0)); |
wojtekmir | 10:497e9a0da7d6 | 39 | } |
Pawel_13 | 8:434d613f0929 | 40 | |
Pawel_13 | 8:434d613f0929 | 41 | int main() { |
Pawel_13 | 6:9414a292d7f2 | 42 | motor.period_us(motor_PWM_period_us); |
wojtekmir | 11:b3bd4b86f914 | 43 | motor = 0.5; // wypełnienie PWM sygnału CLK |
wojtekmir | 11:b3bd4b86f914 | 44 | pc.baud(115200); // największa szybkość standardowa, jaką można zadać to 19200 |
wojtekmir | 11:b3bd4b86f914 | 45 | //dla 115200 mamy mniejsze czasy wysyłania (możemy wysyłać częściej- co 10ms |
wojtekmir | 11:b3bd4b86f914 | 46 | //int zero_analog_IN_0 = analog_IN_0.read(); |
wojtekmir | 11:b3bd4b86f914 | 47 | //int zero_analog_IN_1 = analog_IN_1.read(); |
wojtekmir | 11:b3bd4b86f914 | 48 | wait(5); //czas na ustawienia początkowe 5 sek. |
wojtekmir | 11:b3bd4b86f914 | 49 | triger2.attach(&task2, 0.02); |
wojtekmir | 11:b3bd4b86f914 | 50 | triger1.attach(&task1, switch_dir_time); |
wojtekmir | 10:497e9a0da7d6 | 51 | |
Pawel_13 | 8:434d613f0929 | 52 | while (true) { |
wojtekmir | 10:497e9a0da7d6 | 53 | wait(10); // "nic nierobienie, żeby się nie zawiesił" |
wojtekmir | 1:a4f9276a0f35 | 54 | } |
wojtekmir | 11:b3bd4b86f914 | 55 | } |