FRDM_wahadlo_torsyjne

Dependencies:   mbed BufferedSerial

Fork of FRDM_wahadlo_torsyjne by Wojciech M

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