QRV SAT

Satelity na których jestem QRV. DeFacto pracuje tylko na analogowych

Sat. SSB/CW
AO-7
FO-29
CAS-4B
EO-88
AO-73
XW-2.....

Sat. FM
SO-50
IO-86
AO-85
AO-91
AO-92

Nawigacja

sterownik rotora K3NG

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:
12


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

X

Email : (mój znak) (małpka) vgj.pl

Flag Counter
Wygenerowano w sekund: 0.01
32,725 unikalne wizyty