Nawigacja
QRV SAT
Nawigacja
sterownik rotora K3NG
Linki :
Opis funkcji
Strona g³ówna sterownika
siedlisko ¼róde³, zawsze aktualne
Ów sterownik z³o¿y³em z chiñskich czê¶ci jako Arduino Mega. Sterowanie silnikiem DC poprzez mostek H, sterowanie kierunkiem anteny poprzez klawisze i rotory encoder. Informacja zwrotna o po³o¿eniu anteny to przynajmniej na razie kontaktron z wiruj±cym magnesem
w celu wyeliminowania efektu drgania styków mo¿na zastosowaæ 1 z sposobow eliminacji w wersji sprzetowej:
dodatkowo nale¿y w oprogramowaniu K3NG zrobiæ zmiany aby drganie styków wyeliminowaæ tak¿e programowo. I o ile w sterowaniu EL takie procedura jest dopisana to do sterowania AZ pulse nie ma.Wymagane zmiany to :
plik rotator_settings.h
#define EL_POSITION_PULSE_DEBOUNCE 500 // in ms
zmieniamy na :
#define AZ_POSITION_PULSE_DEBOUNCE 500 // in ms
#define EL_POSITION_PULSE_DEBOUNCE 500 // in ms
plik rotator_features.h
#define OPTION_EL_PULSE_DEBOUNCE
zmieniamy na :
#define OPTION_AZ_PULSE_DEBOUNCE
#define OPTION_EL_PULSE_DEBOUNCE
plik k3ng_rotator_controller.ino
#ifdef FEATURE_AZ_POSITION_PULSE_INPUT
volatile float az_position_pulse_input_azimuth = 0;
volatile byte last_known_az_state = 0;
#endif // FEATURE_AZ_POSITION_PULSE_INPUT
zmieniamy na :
#ifdef FEATURE_AZ_POSITION_PULSE_INPUT
volatile float az_position_pulse_input_azimuth = 0;
volatile byte last_known_az_state = 0;
#ifdef OPTION_AZ_PULSE_DEBOUNCE
unsigned long last_az_pulse_debounce = 0;
#endif //OPTION_AZ_PULSE_DEBOUNCE
#endif // FEATURE_AZ_POSITION_PULSE_INPUT
plik k3ng_rotator_controller.ino
// --------------------------------------------------------------
// if (current_az_state() == ROTATING_CW) {
// az_position_pulse_input_azimuth += AZ_POSITION_PULSE_DEG_PER_PULSE;
// last_known_az_state = ROTATING_CW;
// } else {
// if (current_az_state() == ROTATING_CCW) {
// az_position_pulse_input_azimuth -= AZ_POSITION_PULSE_DEG_PER_PULSE;
// last_known_az_state = ROTATING_CCW;
// } else {
// #ifndef OPTION_PULSE_IGNORE_AMBIGUOUS_PULSES
// if (last_known_az_state == ROTATING_CW) {
// az_position_pulse_input_azimuth += AZ_POSITION_PULSE_DEG_PER_PULSE;
// } else {
// if (last_known_az_state == ROTATING_CCW) {
// az_position_pulse_input_azimuth -= AZ_POSITION_PULSE_DEG_PER_PULSE;
// }
// }
// #endif // OPTION_PULSE_IGNORE_AMBIGUOUS_PULSES
// #ifdef DEBUG_POSITION_PULSE_INPUT
// az_pulse_counter_ambiguous++;
// #endif // DEBUG_POSITION_PULSE_INPUT
// }
// }
zmieniamy na :
// -----------------DEBOUNCE AZ----------------------------------
#ifdef OPTION_AZ_PULSE_DEBOUNCE //---------------------------------------------
if ((millis()-last_az_pulse_debounce) > AZ_POSITION_PULSE_DEBOUNCE) {
if (current_az_state() == ROTATING_CW) {
az_position_pulse_input_azimuth += AZ_POSITION_PULSE_DEG_PER_PULSE;
last_known_az_state = ROTATING_CW;
} else {
if (current_az_state() == ROTATING_CCW) {
az_position_pulse_input_azimuth -= AZ_POSITION_PULSE_DEG_PER_PULSE;
last_known_az_state = ROTATING_CCW;
} else {
#ifndef OPTION_PULSE_IGNORE_AMBIGUOUS_PULSES
if (last_known_az_state == ROTATING_CW) {
az_position_pulse_input_azimuth += AZ_POSITION_PULSE_DEG_PER_PULSE;
} else {
if (last_known_az_state == ROTATING_CCW) {
az_position_pulse_input_azimuth -= AZ_POSITION_PULSE_DEG_PER_PULSE;
}
}
#endif // OPTION_PULSE_IGNORE_AMBIGUOUS_PULSES
#ifdef DEBUG_POSITION_PULSE_INPUT
az_pulse_counter_ambiguous++;
#endif // DEBUG_POSITION_PULSE_INPUT
}
}
last_az_pulse_debounce = millis();
}
#else //OPTION_AZ_PULSE_DEBOUNCE -----------------------
if (current_az_state() == ROTATING_CW) {
az_position_pulse_input_azimuth += AZ_POSITION_PULSE_DEG_PER_PULSE;
last_known_az_state = ROTATING_CW;
} else {
if (current_az_state() == ROTATING_CCW) {
az_position_pulse_input_azimuth -= AZ_POSITION_PULSE_DEG_PER_PULSE;
last_known_az_state = ROTATING_CCW;
} else {
#ifndef OPTION_PULSE_IGNORE_AMBIGUOUS_PULSES
if (last_known_az_state == ROTATING_CW) {
az_position_pulse_input_azimuth += AZ_POSITION_PULSE_DEG_PER_PULSE;
} else {
if (last_known_az_state == ROTATING_CCW) {
az_position_pulse_input_azimuth -= AZ_POSITION_PULSE_DEG_PER_PULSE;
}
}
#endif // OPTION_PULSE_IGNORE_AMBIGUOUS_PULSES
#ifdef DEBUG_POSITION_PULSE_INPUT
az_pulse_counter_ambiguous++;
#endif // DEBUG_POSITION_PULSE_INPUT
}
}
#endif //OPTION_AZ_PULSE_DEBOUNCE -----------------------
to na tyle w temacie po angielsku nazywaj±c "Debouncing problem"
Cos tu na pewno jeszcze wysmaruje bo jakie¶ zmiany bêd± w oprogramowaniu