FRDM_wahadlo_torsyjne

Dependencies:   mbed BufferedSerial

Fork of FRDM_wahadlo_torsyjne by Wojciech M

Revision:
13:8810ad3ccc04
Parent:
12:103f3fbeab78
Child:
14:93a9776b5dee
--- a/main.cpp	Sat Jun 14 11:52:02 2014 +0000
+++ b/main.cpp	Sat Jun 14 13:42:17 2014 +0000
@@ -1,10 +1,22 @@
+//Program zmodyfikowany. Instrukcja obsługi:
+//Po włączeniu zasilania sterownika SMC (26V) i podłączeniu przewodu USB silnik zostaje zablokowany (ciężko go ruszyć)
+// w celu ustawienia punktu początkowego trzymamy przycisk RESET na płytce FRDM (silnik obraca się łatwo)
+// po ustawieniu punktu początkowego puszczamy przycisk RESET
+// sterownik inicjalizuje program, zapisuje położenia zerowe czujników
+// po odliczeniu 5 sekund wykonuje procedurę startową (przekręca silnik o połowę ustawionego zakresu i 
+// zmienia stan wyjścia direction
+// następnie wykonywane są przerwania pomiaru i sterowania
+//
+// na oscyloskopie widać, że wysyłanie danych pomiarowych nie wpływa na sterowanie silnikiem (wyjście direction) i sygnał PWM
+//
+// dołączenie dodatkowego kanału dla górnego czujnika nic nieda, ponieważ sygnał jest odwrócony w fazie o 180 stopni, 
+// a nie przesunięty w fazie- nie da się na jego podstawie ustlić kierunku obrotu ani osiągnięcia pełnego obrotu 
+// ciała swobodnego
+
 #include "mbed.h"
-#include "TSISensor.h"
-//#include "Timer.h"
 
 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 EXC_angle = 3200/4;                                     //360 stopni to 3200 krok. przy mkrok. = 1.8/16
@@ -12,17 +24,16 @@
 int zero_analog_IN_0 = 0;
 int zero_analog_IN_1 = 0;
  
-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;
+DigitalOut direction(PTC7);                                 // zmiana wartości logicznej na wyjściu PTC7 powoduje zmianę kieruneku obrotów
+DigitalOut zezwolenie(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)
+PwmOut motor(PTA5);                                         // sygnał PWM do sterowania sterownikiem silnika krokowego
+Serial pc(USBTX,USBRX);                                     // komunikacja z PC
 
 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() { 
         myled = !myled;
@@ -36,20 +47,23 @@
 } 
 
 int main() {    
-    motor.period_us(motor_PWM_period_us);
-    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
+    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                                                        
     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.   
+    wait(5);                                                //czas na ustawienia początkowe 5 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
+    direction = !direction;                                 // i uruchomienie silnika
+    
     triger2.attach(&task2, 0.02);
     triger1.attach(&task1, switch_dir_time);  
 
     while (true) {
-//        if (tsi.readPercentage() < 0.5)
-//            motor = 0.5;
-//        else motor = 0.0;
-        wait(10);     // "nic nierobienie, żeby się nie zawiesił"  
+        wait(10);                                           // zajęcie sterownika, żeby się nie zawiesił- tak było w manualu
     }
 }
\ No newline at end of file