FRDM_wahadlo_torsyjne

Dependencies:   mbed BufferedSerial

Fork of FRDM_wahadlo_torsyjne by Wojciech M

Committer:
Pawel_13
Date:
Tue Jun 10 15:32:03 2014 +0000
Revision:
8:434d613f0929
Parent:
6:9414a292d7f2
Child:
9:3540ad710232
Pozosta?my do jutra przy tej wersji. Przy tej szybko?ci pomiaru zapis do portu szeregowego spowalnia jej wykonanie (trwa zbyt d?ugo).

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wojtekmir 1:a4f9276a0f35 1 #include "mbed.h"
Pawel_13 8:434d613f0929 2 #include "TSISensor.h"
wojtekmir 1:a4f9276a0f35 3
Pawel_13 8:434d613f0929 4 int motor_PWM_period_us = 100; //okres sygnału PWM (w mikrosekundach) wyzwalającego kolejny krok silnika
wojtekmir 1:a4f9276a0f35 5
Pawel_13 8:434d613f0929 6 DigitalOut direction(PTC7); //zmiana wartości logicznej na wyjściu PTC7 powoduje zmianę kieruneku obrotów
Pawel_13 8:434d613f0929 7 DigitalOut myled(LED_GREEN); //dioda zielona sygnalizuje zmianę kierunku obrotów
Pawel_13 8:434d613f0929 8
Pawel_13 8:434d613f0929 9 AnalogIn analog_IN_0(PTB0); //odczyt napięć z wejść analogowych (kąty obrotu)
Pawel_13 8:434d613f0929 10 AnalogIn analog_IN_1(PTB1);
Pawel_13 3:2ba53b9a499a 11
wojtekmir 2:78a032749524 12 PwmOut motor(PTA5); //sygnał PWM do sterowania sterownikiem silnika krokowego
Pawel_13 8:434d613f0929 13 Serial pc(USBTX,USBRX); //komunikacja z PC
wojtekmir 1:a4f9276a0f35 14
Pawel_13 8:434d613f0929 15 TSISensor tsi;
Pawel_13 8:434d613f0929 16
Pawel_13 8:434d613f0929 17 float get_voltage_in(AnalogIn analog_in, float zero_analog_in) {
Pawel_13 8:434d613f0929 18 return (analog_in.read() - zero_analog_in) * 2.9035; // przesunięcie do zera i skalowanie napiecia do zakresu
Pawel_13 3:2ba53b9a499a 19 }
Pawel_13 3:2ba53b9a499a 20
Pawel_13 8:434d613f0929 21
Pawel_13 8:434d613f0929 22 int main() {
Pawel_13 6:9414a292d7f2 23 motor.period_us(motor_PWM_period_us);
Pawel_13 8:434d613f0929 24 motor = 0.0;
Pawel_13 8:434d613f0929 25 pc.baud(19200); // największa szybkość standardowa, jaką można zadać
Pawel_13 5:1e2e73ac4bed 26
Pawel_13 3:2ba53b9a499a 27 int i_start = 0;
Pawel_13 8:434d613f0929 28 int EXC_angle = 3200/3; //360 stopni / 1
Pawel_13 8:434d613f0929 29 int DIR_switched = 0;
Pawel_13 8:434d613f0929 30 int SWITCH_DIR = EXC_angle;
Pawel_13 8:434d613f0929 31
Pawel_13 8:434d613f0929 32 wait(15); //czas na ustawienia początkowe 15 sek.
wojtekmir 1:a4f9276a0f35 33
Pawel_13 8:434d613f0929 34 int zero_analog_IN_0 = analog_IN_0.read();
Pawel_13 8:434d613f0929 35 int zero_analog_IN_1 = analog_IN_1.read();
Pawel_13 8:434d613f0929 36
Pawel_13 8:434d613f0929 37 while (true) {
Pawel_13 8:434d613f0929 38 if (tsi.readPercentage() < 0.5)
Pawel_13 8:434d613f0929 39 motor = 0.5;
Pawel_13 8:434d613f0929 40 else motor = 0.0; // silnik zatrzyma się po dotknięciu prawej strony potencjometru
Pawel_13 8:434d613f0929 41
Pawel_13 8:434d613f0929 42 // pc.printf("%.2f\n", get_voltage_in(analog_IN_0, zero_analog_IN_0)); // zbyt długo wstrzymuje procedurę
Pawel_13 3:2ba53b9a499a 43
Pawel_13 5:1e2e73ac4bed 44 i_start += 1;
Pawel_13 3:2ba53b9a499a 45 if (i_start == SWITCH_DIR) {
Pawel_13 5:1e2e73ac4bed 46 i_start = 0;
Pawel_13 3:2ba53b9a499a 47 myled = !myled;
Pawel_13 5:1e2e73ac4bed 48 direction = !direction;
Pawel_13 8:434d613f0929 49 if (DIR_switched == 0) {
Pawel_13 8:434d613f0929 50 if (SWITCH_DIR == EXC_angle) {
Pawel_13 8:434d613f0929 51 SWITCH_DIR = 2*EXC_angle;
Pawel_13 8:434d613f0929 52 DIR_switched = 1;
Pawel_13 8:434d613f0929 53 }
Pawel_13 3:2ba53b9a499a 54 }
Pawel_13 8:434d613f0929 55 }
Pawel_13 8:434d613f0929 56 wait_us(motor_PWM_period_us);
wojtekmir 1:a4f9276a0f35 57 }
Pawel_13 8:434d613f0929 58 }