FRDM_wahadlo_torsyjne

Dependencies:   mbed BufferedSerial

Fork of FRDM_wahadlo_torsyjne by Wojciech M

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