FRDM_wahadlo_torsyjne

Dependencies:   mbed BufferedSerial

Fork of FRDM_wahadlo_torsyjne by Wojciech M

Committer:
Pawel_13
Date:
Thu Jun 12 09:07:39 2014 +0000
Revision:
9:3540ad710232
Parent:
8:434d613f0929
Child:
10:497e9a0da7d6
okres 200 us oraz 3200/2 dobrze sie sprawdza

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