
FRDM_wahadlo_torsyjne
Dependencies: mbed BufferedSerial
Fork of FRDM_wahadlo_torsyjne by
Diff: main.cpp
- Revision:
- 11:b3bd4b86f914
- Parent:
- 10:497e9a0da7d6
- Child:
- 12:103f3fbeab78
--- a/main.cpp Thu Jun 12 17:30:39 2014 +0000 +++ b/main.cpp Sat Jun 14 11:15:33 2014 +0000 @@ -2,49 +2,35 @@ #include "TSISensor.h" #include "Timer.h" -Ticker triger1; -Ticker triger2; +Ticker triger1; //przerwanie sterowania silnikiem +Ticker triger2; //przerwanie wysyłania danych +TSISensor tsi; //sensor dotykowy -int motor_PWM_period_us = 200; //okres sygnału PWM (w mikrosekundach) wyzwalającego kolejny krok silnika -int i_start = 0; -int EXC_angle = 3200/4; //360 stopni to 3200 krok. przy mkrok. = 1.8/16 -float switch_dir_time=(float)((float)EXC_angle/500.0)*((float)motor_PWM_period_us/1000.0); -int DIR_switched = 0; +int motor_PWM_period_us = 200; //okres sygnału PWM (w mikrosekundach) wyzwalającego kolejny krok silnika +int EXC_angle = 3200/4; //360 stopni to 3200 krok. przy mkrok. = 1.8/16 +float switch_dir_time=(float)((float)EXC_angle/500.0)*((float)motor_PWM_period_us/1000.0); + //czas po któym następuje zmiana obrotów (żeby nie liczyć po każdej zmianie kierunku w pętli) +int DIR_switched = 0; int SWITCH_DIR = EXC_angle; -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 - -TSISensor tsi; +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ęcia z wejścia analogowego 0 (kąt obrotu kolumny) +AnalogIn analog_IN_1(PTB1); //odczyt napięcia z wejścia analogowego 1 (kąt obrotu ciała swobodnego) +PwmOut motor(PTA5); //sygnał PWM do sterowania sterownikiem silnika krokowego +Serial pc(USBTX,USBRX); //komunikacja z PC Timer timer; 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 + return (analog_in.read() - zero_analog_in) * 2.9035; //przesunięcie do zera i skalowanie napiecia do zakresu } void task1() { - //i_start += 1;1 - //if (i_start == SWITCH_DIR) { - // i_start = 0; myled = !myled; direction = !direction; - /*if (DIR_switched == 0) { - if (SWITCH_DIR == EXC_angle) { - SWITCH_DIR = 2*EXC_angle; - DIR_switched = 1; - } - }*/ - //} } void task2() { - //wyslij dane int zero_analog_IN_0 = analog_IN_0.read(); int zero_analog_IN_1 = analog_IN_1.read(); @@ -54,32 +40,16 @@ int main() { motor.period_us(motor_PWM_period_us); - motor = 0.0; // wypełnienie PWM sygnału CLK - pc.baud(115200); // największa szybkość standardowa, jaką można zadać to 19200 - - wait(5); //czas na ustawienia początkowe 15 sek. - - triger2.attach(&task2, 0.02); //1/1000000); - - - motor = 0.5; - - //wait(switch_dir_time/2); //tu jest teoretyczna ćwiartka obrotu - //direction = !direction; - - triger1.attach(&task1, switch_dir_time); //motor_PWM_period_us/1000000); - + motor = 0.5; // wypełnienie PWM sygnału CLK + pc.baud(115200); // największa szybkość standardowa, jaką można zadać to 19200 + //dla 115200 mamy mniejsze czasy wysyłania (możemy wysyłać częściej- co 10ms + //int zero_analog_IN_0 = analog_IN_0.read(); + //int zero_analog_IN_1 = analog_IN_1.read(); + wait(5); //czas na ustawienia początkowe 5 sek. + triger2.attach(&task2, 0.02); + triger1.attach(&task1, switch_dir_time); while (true) { - // t0 = timer.read_us(); - //if (tsi.readPercentage() < 0.5) - - //else motor = 0.0; // silnik zatrzyma się po dotknięciu prawej strony potencjometru wait(10); // "nic nierobienie, żeby się nie zawiesił" - - //t1 = timer.read_us(); - //t0_t1 = t1 - t0; - //wait_us(motor_PWM_period_us); } -} - +} \ No newline at end of file