
FRDM_wahadlo_torsyjne
Dependencies: mbed BufferedSerial
Fork of FRDM_wahadlo_torsyjne by
Diff: main.cpp
- Revision:
- 8:434d613f0929
- Parent:
- 6:9414a292d7f2
- Child:
- 9:3540ad710232
--- a/main.cpp Tue Jun 10 10:02:09 2014 +0000 +++ b/main.cpp Tue Jun 10 15:32:03 2014 +0000 @@ -1,46 +1,58 @@ #include "mbed.h" +#include "TSISensor.h" -int motor_PWM_period_us = 300; //deklaracja zmiennych +int motor_PWM_period_us = 100; //okres sygnału PWM (w mikrosekundach) wyzwalającego kolejny krok silnika -DigitalOut direction(PTC7); //wyjście PTC7 jako kierunek obrotów -DigitalOut myled(LED_GREEN); //dioda zielona jako wizualizacja PWM -AnalogIn ain0(PTB0); //deklaracja wejść analogowych -//AnalogIn ain1(PTB1); +DigitalOut direction(PTC7); //zmiana wartości logicznej na wyjściu PTC7 powoduje zmianę kieruneku obrotów +DigitalOut myled(LED_GREEN); //dioda zielona sygnalizuje zmianę kierunku obrotów + +AnalogIn analog_IN_0(PTB0); //odczyt napięć z wejść analogowych (kąty obrotu) +AnalogIn analog_IN_1(PTB1); PwmOut motor(PTA5); //sygnał PWM do sterowania sterownikiem silnika krokowego -Serial pc(USBTX,USBRX); // komunikacja z PC +Serial pc(USBTX,USBRX); //komunikacja z PC -float get_voltage_in(AnalogIn analog_in) { - return analog_in.read() * 2.9035; // kalibracja -0.01% wartości odczytanej +TSISensor tsi; + +float get_voltage_in(AnalogIn analog_in, float zero_analog_in) { + return (analog_in.read() - zero_analog_in) * 2.9035; // przesunięcie do zera i skalowanie napiecia do zakresu } -int main() { - + +int main() { motor.period_us(motor_PWM_period_us); - motor = 0.5f; //wypełnienie zawsze 50% - pc.baud(115200); + motor = 0.0; + pc.baud(19200); // największa szybkość standardowa, jaką można zadać int i_start = 0; - int SWITCH_DIR = 120; + int EXC_angle = 3200/3; //360 stopni / 1 + int DIR_switched = 0; + int SWITCH_DIR = EXC_angle; + + wait(15); //czas na ustawienia początkowe 15 sek. - while (true) { - wait_us(motor_PWM_period_us); - pc.printf("%.4f\n", get_voltage_in(ain0)); + int zero_analog_IN_0 = analog_IN_0.read(); + int zero_analog_IN_1 = analog_IN_1.read(); + + while (true) { + if (tsi.readPercentage() < 0.5) + motor = 0.5; + else motor = 0.0; // silnik zatrzyma się po dotknięciu prawej strony potencjometru + +// pc.printf("%.2f\n", get_voltage_in(analog_IN_0, zero_analog_IN_0)); // zbyt długo wstrzymuje procedurę -// pc.printf("a1:%d\n",ain1.read_u16()); i_start += 1; if (i_start == SWITCH_DIR) { i_start = 0; myled = !myled; direction = !direction; - if (SWITCH_DIR == 120) { - SWITCH_DIR = 240; - } + if (DIR_switched == 0) { + if (SWITCH_DIR == EXC_angle) { + SWITCH_DIR = 2*EXC_angle; + DIR_switched = 1; + } } - - - //zmiana czestotliwosci ifami tutaj - - + } + wait_us(motor_PWM_period_us); } -} +} \ No newline at end of file