FRDM_wahadlo_torsyjne
Dependencies: mbed BufferedSerial
Fork of FRDM_wahadlo_torsyjne by
main.cpp
- Committer:
- Pawel_13
- Date:
- 2014-06-12
- Revision:
- 9:3540ad710232
- Parent:
- 8:434d613f0929
- Child:
- 10:497e9a0da7d6
File content as of revision 9:3540ad710232:
#include "mbed.h" #include "TSISensor.h" #include "Timer.h" int motor_PWM_period_us = 200; //okres sygnału PWM (w mikrosekundach) wyzwalającego kolejny krok silnika 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 TSISensor tsi; Timer timer; 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() { motor.period_us(motor_PWM_period_us); motor = 0.0; // wypełnienie PWM sygnału CLK pc.baud(9600); // największa szybkość standardowa, jaką można zadać to 19200 int i_start = 0; int EXC_angle = 3200/4; //360 stopni to 3200 krok. przy mkrok. = 1.8/16 int DIR_switched = 0; int SWITCH_DIR = EXC_angle; wait(15); //czas na ustawienia początkowe 15 sek. int zero_analog_IN_0 = analog_IN_0.read(); int zero_analog_IN_1 = analog_IN_1.read(); timer.start(); int t0, t1; int t0_t1 = 0; while (true) { t0 = timer.read_us(); if (tsi.readPercentage() < 0.5) motor = 0.5; else motor = 0.0; // silnik zatrzyma się po dotknięciu prawej strony potencjometru get_voltage_in(analog_IN_0, zero_analog_IN_0); // pc.printf("%.3f\t%d\n", get_voltage_in(analog_IN_0, zero_analog_IN_0), t0_t1); // zbyt długo trwa - wstrzymuje procedurę i_start += 1; if (i_start == SWITCH_DIR) { i_start = 0; myled = !myled; direction = !direction; if (DIR_switched == 0) { if (SWITCH_DIR == EXC_angle) { SWITCH_DIR = 2*EXC_angle; DIR_switched = 1; } } } t1 = timer.read_us(); t0_t1 = t1 - t0; wait_us(motor_PWM_period_us); } }