FRDM_wahadlo_torsyjne
Dependencies: mbed BufferedSerial
Fork of FRDM_wahadlo_torsyjne by
Diff: main.cpp
- Revision:
- 18:97a08a408bc7
- Parent:
- 14:93a9776b5dee
- Child:
- 19:2012df6b8e56
--- a/main.cpp Wed Jun 18 15:23:14 2014 +0000 +++ b/main.cpp Wed Oct 11 08:11:43 2017 +0000 @@ -14,23 +14,34 @@ // ciała swobodnego #include "mbed.h" +#include "BufferedSerial.h" -Ticker triger1; //przerwanie sterowania silnikiem -Ticker triger2; //przerwanie wysyłania danych +Ticker triger1; //interrupt. No. 1 +Ticker triger2; //interrupt No. 2 -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 +int motor_PWM_period_us = 500; //period of PWM signal in mikroseconds + // 3200 kroków to pełny kąt +int EXC_angle = 1600/2/4; //360 stopni to 3200 krok. przy mkrok. = 1.8/16 dzielic przez 2 +//float switch_dir_time=(float)((float)EXC_angle/500.0)*((float)motor_PWM_period_us/1000.0); float switch_dir_time=(float)((float)EXC_angle/500.0)*((float)motor_PWM_period_us/1000.0); +//float switch_dir_time = 1; +float sampling_time = 0.005; +int samples_in_period = int(switch_dir_time/sampling_time); int zero_analog_IN_0 = 0; int zero_analog_IN_1 = 0; +float timet = 0; DigitalOut direction(PTC7); // zmiana wartości logicznej na wyjściu PTC7 powoduje zmianę kieruneku obrotów -DigitalOut zezwolenie(PTE2); // zezwolenie na start +DigitalOut enable_driver(PTE2); // zezwolenie na start 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) + // PTB1 - sygnał odwrócony +AnalogIn analog_IN_1(PTB2); // odczyt napięcia z wejścia analogowego 1 (kąt obrotu ciała swobodnego) + // PTB3 - sygnał odwrócony PwmOut motor(PTA5); // sygnał PWM do sterowania sterownikiem silnika krokowego -Serial pc(USBTX,USBRX); // komunikacja z PC +//Serial pc(USBTX,USBRX); // komunikacja z PC +BufferedSerial pc(USBTX,USBRX); +char buffer[24]; 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 @@ -38,32 +49,44 @@ void task1() { myled = !myled; direction = !direction; + //pc.printf("%.2f\t%d\n\r", timet, int(direction)); } void task2() { - get_voltage_in(analog_IN_0, zero_analog_IN_0); - get_voltage_in(analog_IN_1, zero_analog_IN_1); - pc.printf("%.8f\t%.3f\t%.3f\n", switch_dir_time, get_voltage_in(analog_IN_0, zero_analog_IN_0), get_voltage_in(analog_IN_1, zero_analog_IN_1)); -} + //get_voltage_in(analog_IN_0, zero_analog_IN_0); + //get_voltage_in(analog_IN_1, zero_analog_IN_1); + //pc.printf("%.2f\t%.2f\t%.2f\n\r", timet, get_voltage_in(analog_IN_1, zero_analog_IN_1), get_voltage_in(analog_IN_0, zero_analog_IN_0)); + //pc.printf("%.2f\n%.2f\n%.2f\n", timet, get_voltage_in(analog_IN_1, zero_analog_IN_1), get_voltage_in(analog_IN_0, zero_analog_IN_0)); + + sprintf((char*)buffer, "%.2f %.2f\n", get_voltage_in(analog_IN_1, zero_analog_IN_1), get_voltage_in(analog_IN_0, zero_analog_IN_0)); + pc.printf(buffer); + + + timet += sampling_time; +} int main() { pc.baud(115200); // największa szybkość standardowa, jaką można zadać to 19200 // im większa prędkość transmisji tym mniejsze czasy wysyłania- więcej niż 115200 nie osiągalne // dla 115200 mamy mniejsze czasy wysyłania (możemy wysyłać częściej- co 10ms) - zezwolenie = 1; //zezwolenie na start sterownika silnika krokowego + enable_driver = 1; // enable signal to allow the driver for work zero_analog_IN_0 = analog_IN_0.read(); - zero_analog_IN_1 = analog_IN_1.read(); - wait(5); //czas na ustawienia początkowe 5 sek. + zero_analog_IN_1 = analog_IN_1.read(); + //pc.printf("Switch direction time: %.6f\n\r", switch_dir_time); + //pc.printf("Samples in period: %d\n\r", samples_in_period); + //pc.printf("Sampling time: %.6f\n\r", sampling_time); + wait(6); //czas na ustawienia początkowe 10 sek. motor.period_us(motor_PWM_period_us); - motor = 0.5; // wypełnienie PWM sygnału CLK - - wait(switch_dir_time/2); // położenie zerowe silnika do ustalenia zer czujników + motor = 0.5; // duty cycle of the PWM signal + timet = 0.0; + //wait(switch_dir_time/2); // położenie zerowe silnika do ustalenia zer czujników + //wait_ms(1800); direction = !direction; // i uruchomienie silnika - - triger2.attach(&task2, 3); + switch_dir_time = 0.9; + triger2.attach(&task2, sampling_time); triger1.attach(&task1, switch_dir_time); while (true) { - wait(10); // zajęcie sterownika, żeby się nie zawiesił- tak było w manualu + wait(10); // zajęcie sterownika, zabezpieczenie przed zawieszeniem pracy sterownika } } \ No newline at end of file