FY-20A/FY-21AP - Катайский трёхосевой стаб на MEMS гирах и акселерометрах + OSD и автопилот

igoralekseevru
baychi:

Там же написано: 453j - это 450 кОм, точность 10%. Но для надежности, замерьте тестером. 😃

У меня так. И в инструкции - так.

Картинку привел от балды по внешним признакам конструктиву - проблема в том, что буквы даже с лупой не могу разобрать =( но за наводку спасибо, не знал что это такая маркировка, попробую лупу помощнее, тестер застрял на почте =)

baychi
igoralekseevru:

Картинку привел от балды

Найдите фотки фишки в теме, там вроде видна маркировка.

igoralekseevru
baychi:

Найдите фотки фишки в теме, там вроде видна маркировка.

Цифры 5 и 3 левый верхний и правый верхний углы. Внизу или 0 0 или о о или 0 с. В непонятках от такой маркировки
Серия судя по всему 3313 bourns trimpot

Сергей_Вертолетов

Игорь, я попробую узнать номера деталюшек, но скорее всего вам придется отправить девайс производителю для замены. Это очень недорого, просто и не так долго, как кажется. Не раз отправлял и в Китай и в США, все ок.

baychi
igoralekseevru:

Фишка 30-я

На фотках от Сергея Вертолетова видны только 2 цифры 5 и 3. По ним ничего сказать нельзя.
ИМХО проще все-же измерить тестером (секундное дело, неужели ни у кого рядом нет?). И точный номинал не принципиален, если вместо 10 кОм будет от 5 до 22-х, работать будет так-же.

igoralekseevru
Сергей_Вертолетов:

Игорь, я попробую узнать номера деталюшек, но скорее всего вам придется отправить девайс производителю для замены. Это очень недорого, просто и не так долго, как кажется. Не раз отправлял и в Китай и в США, все ок.

спасибо, узнал 5 кОм, нашел в Москве по 50р (в чип и дипе 200!)
буду перепаивать, надеюсь руки не сильно кривые и справлюсь с SMD монтажом, заодно перепаяю дип на 4 (я случайно один переключатель срезал отверткой когда выставлял горизонт)

Wasja

Пришло мое время. Вчера у нас настало лето и время полетов. Заготовил я прогу новописанную под FY-21AP чтобы и телеметрию читала и команды раздавала, самолет двухметровый, чтобы летал и не падал и поехал на поле все это тестировать. Ну значит, взлет, набор на круге по команде с компа, все координаты, скорости красиво пишет, настало время полета по точке (в FY-21 есть ОДНА точка) ну жму координаты деревянного камня, самолет отвечает что уже летит, обвел значит красной рамкой, все как дома на GPS симуляторе и (тут половина форума говорит, что горизонт встал колом, а самолет морковкой, как же) и полетел так бодренько в сторону (Китая?) 70 градусов по компасу (точка, ясно дело в другой стороне). Нажал я Return Home - вернулся. Нажал обратно WP - кружит как надо, где его команда застала. Радиус меняет. Высоту меняет.
Дома отсимулировал, получилось: в Северо-Западном полушарии летит на 70, в Юго-Западном куда-то на 250, в Северо-Восточном идет в заданную точку и там кружит, в Юго-Восточном на 250. Пробовал как в GCS 2.2, так и своем софте, поведение одинаково. И при этом еще говорит абсолютно точно координаты заданной точки, то есть ошибка в железяке похоже. Кто-нибудь сталкивался?

baychi
Wasja:

Дома отсимулировал, получилось: в Северо-Западном полушарии летит на 70, в Юго-Западном куда-то на 250, в Северо-Восточном идет в заданную точку и там кружит, в Юго-Восточном на 250. Пробовал как в GCS 2.2, так и своем софте, поведение одинаково. И при этом еще говорит абсолютно точно координаты заданной точки, то есть ошибка в железяке похоже. Кто-нибудь сталкивался?

Странно сие. Ведь в режиме RTH координаты базы просто подставляются как целевая точка. Я когда с FY21AP своей прогой на столе игрался, подставлял точки - она довольно правильно расстояние считатала и прочее. Правда эмулятор GPS не подключал. Может ошибка все-же во вводе WP через GСS? Чтонить с E/W N/S напутано.

PS: Проверять заново не буду, так как с Фишкой - заваязал. 😃

Wasja

В том-то и дело, что в протоколе точка RTH высчитывается только самим железом по первой минуте после получения спутников и она не может быть изменена с компа. Точка циркуляции при старте соответствующего режима тоже вычисляется железом по текущей координате самолета. Ее как раз и меняет софт чтобы получить функцию “полет к точке” (причем только в режиме циркуляции). Так вот в моем полушарии - Северо-Западном он эту точку меняет на заданную, а летит четко на направление 70 (причем поведение совершенно сходное как в GCS, так и у меня), в российскоеврокитайском Северо-Восточном все в порядке. Боюсь что и мне завязывать придется.

type_2

вот и я себе прикупил 21ap

а не расскажет кто как ее режимы на 3х режимный тумблер повесить? аппаратура - футаба 7с
ни разу не пользовася этим переключателем вообще и не знаю даже в какой канал что втыкать и что выбирать :\

Юрий_Захаров

Алексей, напишите, если что-то нештатно пойдет. Вы ведь приобрели недавно, может уже что-то улучшили производители в последних выпусках.

type_2

у меня процесс долгий. к лету может соберу.
пока просто пощелкал тумблером. увидел что “что-то” переключается, покрутил ручку, увидел что режимы меняются, покачал сам модуль, увидел что сервы работают.
пока все 😃

да и как я узнаю что что-то изменилось. предыдущих версий я не видел

Юрий_Захаров

Если будет всё работать хорошо, вы сообщите и мы все будем знать. Много в этом устройстве было непонято, по-разному оно работало, хотя так не должно быть.

smalltim
Wasja:

Дома отсимулировал, получилось: в Северо-Западном полушарии летит на 70, в Юго-Западном куда-то на 250, в Северо-Восточном идет в заданную точку и там кружит, в Юго-Восточном на 250. Пробовал как в GCS 2.2, так и своем софте, поведение одинаково. И при этом еще говорит абсолютно точно координаты заданной точки, то есть ошибка в железяке похоже. Кто-нибудь сталкивался?

При переходе через экватор и через гринвич в южное и в западное полушарие надо на борту знаки перед числами широты и долготы менять на отрицательные для вычисления азимута на точку. ГПС-то не выдает отрицательные числа координат, он выдает N/S и W/E и положительные числа.
Похоже, они это не сделали.

baychi
smalltim:

При переходе через экватор и через гринвич в южное и в западное полушарие надо на борту знаки перед числами широты и долготы менять на отрицательные для вычисления азимута на точку.

В протоколе, который принимает и передает Фишка GPS координаты кодируются как:
struct GPS_coord { // Координаты GPS
Word curLat; // широта град
Word curLatFrac; // широта доли градусов
Word curLong; // долгота град
Word curLongFrac; // широта доли градусов
};

Сама Фишка, запомнив координаты базы, делает RTH нормально - проверено неоднократно.

Так что ИМХО дело тут в наземке, как она преобразует текст в эту структуру.
Я делал так:

// Преобразования GPS кординат
void GPS_coord::toText(char *str) // преобразовать в текст
{
int g1,m1,g2,m2;
double lat=(swapW(curLat)&0x7ffff); // в минутах
double lon=(swapW(curLong)&0x7ffff);

char la=‘N’,ln=‘E’;
if(curLat & 128) la=‘S’;
if(curLong & 128) ln=‘W’;

g1=int(lat/60); g2=int(lon/60); // переведем в градусы
m1=fmod(lat,60); m2=fmod(lon,60); // выделим минуты
lat=swapW(curLatFrac)*0.006; lon=swapW(curLongFrac)*0.006; // секунды и их доли
sprintf(str,“%3d°%02d’%04.1f’‘%c;%3d°%02d’%04.1f’'%c”,g1,m1,lat,la,g2,m2,lon,ln);
}

int GPS_coord::fromText(char *str) // преобразовать из текста
{
double lat=0,lon=0;
char la=‘N’,ln=‘E’;
Word w;
char *cp;
int g1=0,m1=0,g2=0,m2=0;

sscanf(str,“%d”,&g1);
cp=strchr(str,‘°’); if(!cp) return 0;
sscanf(cp+1,“%d”,&m1);
cp=strchr(cp,‘\’‘); if(!cp) return 0;
lat=atof(cp+1);
cp=strchr(cp+1,’\‘’); if(!cp) return 0;
if(cp[1] != ‘\’‘) return 0;
la=cp[2];
cp=strchr(cp+1,’;‘); if(!cp) return 0;
sscanf(cp+1,“%d”,&g2);
cp=strchr(cp+1,‘°’); if(!cp) return 0;
sscanf(cp+1,“%d”,&m2);
cp=strchr(cp,’\‘’); if(!cp) return 0;
lon=atof(cp+1);
cp=strchr(cp+1,‘\’‘); if(!cp) return 0;
if(cp[1] != ‘\’’) return 0;
ln=cp[2];
w=lat/0.006; curLatFrac=swapW(w);
w=g1*60+m1; curLat=swapW(w);
w=lon/0.006; curLongFrac=swapW(w);
w=g2*60+m2; curLong=swapW(w);
if(la == ‘S’) curLat |=128;
if(la == ‘W’) curLong |=128;
return 1;
}

PS: swapW() - маняет байтики местами, так как на STM-ке порядок не тот, что у Интеля. 😃

Wasja
baychi:

PS: swapW() - маняет байтики местами, так как на STM-ке порядок не тот, что у Интеля.

Ух ты! С этого момента поподробней (я в Си не очень): когда я меняю Waipoint, я посылаю в порт такую команду:
FyCommand = {&HA5, &H5A, китайцу помолимся
12, это сколько скажу total data length
&HC2, это команда на изменение точки

latitude dat(2), dat(3), dat(4), dat(5),

longitude dat(6), dat(7), dat(8), dat(9),

(12 + &HC2 + dat(2) + dat(3) + dat(4) + dat(5) + dat(6) + dat(7) + dat(8) + dat(9)) Mod 256, &HAA} контрольная сумма, которую он не считает, конец

оператор mod это остаток от деления

'East longitude (это проходит отлично)

x = целые минуты
dat(6) = (x - x Mod 256) / 256
dat(7) = x Mod 256

y = десятитысячные минуты
dat(8) = (y - y Mod 256) / 256
dat(9) = y Mod 256

'west longitude (а в этом случае он возвращает в потоке телеметрии правильное значение заданной точки и летит на 70 потому и думаю, что это железяка - хотя когда она сама себе задает точку циркуляции или дома, все в полном порядке).

x = целые минуты
dat(6) = (x - x Mod 256 + &H8000) / 256
dat(7) = (x + &H8000) Mod 256

y = десятитысячные минуты
dat(8) = (y - y Mod 256) / 256
dat(9) = y Mod 256

Какие байты менять? И почему тогда она возвращает правильное значение (равно как и я читаю все координаты с телеметрии без проблем с теми же формулами)?

baychi
Wasja:

Какие байты менять?

Думаю, ошибка в dat(2) и dat(6) - там в старших битах кодируется полушарие и запад/восток.
Логика простая:

char la=‘N’,ln=‘E’;
if(dat(2) & 128) la=‘S’ ( else ‘N’😉
if(dat(6) & 128) ln=‘W’; (else ‘E’).
Не знаю как для Испании, а для Москвы надо N и E (то есть 0-е старшие биты). 😃
Ан нет - у Вас там W, следовательно это:

Wasja:

dat(6) = (x - x Mod 256 + &H8000) / 256

Правильно. (Хотел посоветовать убрать + &H8000).

PS: Что это за язык?