FRDM_wahadlo_torsyjne

Dependencies:   mbed BufferedSerial

Fork of FRDM_wahadlo_torsyjne by Wojciech M

Committer:
wojtekmir
Date:
Sat Jun 14 11:15:33 2014 +0000
Revision:
11:b3bd4b86f914
Parent:
10:497e9a0da7d6
Child:
12:103f3fbeab78
Poprawione przerwania

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
wojtekmir 11:b3bd4b86f914 5 Ticker triger1; //przerwanie sterowania silnikiem
wojtekmir 11:b3bd4b86f914 6 Ticker triger2; //przerwanie wysyłania danych
wojtekmir 11:b3bd4b86f914 7 TSISensor tsi; //sensor dotykowy
wojtekmir 10:497e9a0da7d6 8
wojtekmir 11:b3bd4b86f914 9 int motor_PWM_period_us = 200; //okres sygnału PWM (w mikrosekundach) wyzwalającego kolejny krok silnika
wojtekmir 11:b3bd4b86f914 10 int EXC_angle = 3200/4; //360 stopni to 3200 krok. przy mkrok. = 1.8/16
wojtekmir 11:b3bd4b86f914 11 float switch_dir_time=(float)((float)EXC_angle/500.0)*((float)motor_PWM_period_us/1000.0);
wojtekmir 11:b3bd4b86f914 12 //czas po któym następuje zmiana obrotów (żeby nie liczyć po każdej zmianie kierunku w pętli)
wojtekmir 11:b3bd4b86f914 13 int DIR_switched = 0;
wojtekmir 10:497e9a0da7d6 14 int SWITCH_DIR = EXC_angle;
wojtekmir 10:497e9a0da7d6 15
wojtekmir 11:b3bd4b86f914 16 DigitalOut direction(PTC7); //zmiana wartości logicznej na wyjściu PTC7 powoduje zmianę kieruneku obrotów
wojtekmir 11:b3bd4b86f914 17 DigitalOut myled(LED_GREEN); //dioda zielona sygnalizuje zmianę kierunku obrotów
wojtekmir 11:b3bd4b86f914 18 AnalogIn analog_IN_0(PTB0); //odczyt napięcia z wejścia analogowego 0 (kąt obrotu kolumny)
wojtekmir 11:b3bd4b86f914 19 AnalogIn analog_IN_1(PTB1); //odczyt napięcia z wejścia analogowego 1 (kąt obrotu ciała swobodnego)
wojtekmir 11:b3bd4b86f914 20 PwmOut motor(PTA5); //sygnał PWM do sterowania sterownikiem silnika krokowego
wojtekmir 11:b3bd4b86f914 21 Serial pc(USBTX,USBRX); //komunikacja z PC
Pawel_13 8:434d613f0929 22
Pawel_13 9:3540ad710232 23 Timer timer;
Pawel_13 9:3540ad710232 24
Pawel_13 8:434d613f0929 25 float get_voltage_in(AnalogIn analog_in, float zero_analog_in) {
wojtekmir 11:b3bd4b86f914 26 return (analog_in.read() - zero_analog_in) * 2.9035; //przesunięcie do zera i skalowanie napiecia do zakresu
Pawel_13 3:2ba53b9a499a 27 }
wojtekmir 10:497e9a0da7d6 28 void task1() {
wojtekmir 10:497e9a0da7d6 29 myled = !myled;
wojtekmir 10:497e9a0da7d6 30 direction = !direction;
wojtekmir 10:497e9a0da7d6 31 }
Pawel_13 3:2ba53b9a499a 32
wojtekmir 10:497e9a0da7d6 33 void task2() {
wojtekmir 10:497e9a0da7d6 34 int zero_analog_IN_0 = analog_IN_0.read();
wojtekmir 10:497e9a0da7d6 35 int zero_analog_IN_1 = analog_IN_1.read();
wojtekmir 10:497e9a0da7d6 36
wojtekmir 10:497e9a0da7d6 37 get_voltage_in(analog_IN_0, zero_analog_IN_0);
wojtekmir 10:497e9a0da7d6 38 pc.printf("%.3f\t\n", get_voltage_in(analog_IN_0, zero_analog_IN_0));
wojtekmir 10:497e9a0da7d6 39 }
Pawel_13 8:434d613f0929 40
Pawel_13 8:434d613f0929 41 int main() {
Pawel_13 6:9414a292d7f2 42 motor.period_us(motor_PWM_period_us);
wojtekmir 11:b3bd4b86f914 43 motor = 0.5; // wypełnienie PWM sygnału CLK
wojtekmir 11:b3bd4b86f914 44 pc.baud(115200); // największa szybkość standardowa, jaką można zadać to 19200
wojtekmir 11:b3bd4b86f914 45 //dla 115200 mamy mniejsze czasy wysyłania (możemy wysyłać częściej- co 10ms
wojtekmir 11:b3bd4b86f914 46 //int zero_analog_IN_0 = analog_IN_0.read();
wojtekmir 11:b3bd4b86f914 47 //int zero_analog_IN_1 = analog_IN_1.read();
wojtekmir 11:b3bd4b86f914 48 wait(5); //czas na ustawienia początkowe 5 sek.
wojtekmir 11:b3bd4b86f914 49 triger2.attach(&task2, 0.02);
wojtekmir 11:b3bd4b86f914 50 triger1.attach(&task1, switch_dir_time);
wojtekmir 10:497e9a0da7d6 51
Pawel_13 8:434d613f0929 52 while (true) {
wojtekmir 10:497e9a0da7d6 53 wait(10); // "nic nierobienie, żeby się nie zawiesił"
wojtekmir 1:a4f9276a0f35 54 }
wojtekmir 11:b3bd4b86f914 55 }