Создание собственной системы стабилизации
Ну что, S.Bus в новой версии явно не зря
Мда… осталось только придумать как переключать входы ШИМ/ППМ/СБУС, вернее ШИМ/ППМ пока стандартным способом (перемычка на 2-3 канале), ну а СБУС? Теоретически можно автоматом, по наличию пакетов с корректной контрольной суммой.
Не могу найти…, кто то по моему здесь говорил что GPS SIM68 пробовал.(?)… Вопросик бы ему задать…
У меня стоит на коптере.
У меня стоит на коптере.
Сам паял??
Угу.
Угу
Вот и я спаял, вроде все по “книжке” , а он запускается -через раз на третий- , может секрет какой есть ?
С питанием играл, “RESET” нажимал … не пойму закономерность не-запуска, прям засада какая то…
У меня модуль SIM68R. Проблем не замечено с запуском. Правда настройки не сохраняются и существует только 2 прошивки на фиксированные скорости 9600 и 115200. У вас батарейка подключена?
батарейка подключена?
У меня (sim68 без R), про батарейку в даташите явно не указано, всю обвязку сделал по “фирменной схеме” (ды там и обвязки то почти нет 😃)… и в инете особо примеров примения нет 😦
Могу ошибаться но у меня без батарейки кажись тоже плохо работало.
многие модели без батареи очень плохо запускаются. если не нужна - то хотя-бы диод+резистор на 4.7-10к к ножке кинуть
осталось только придумать как переключать входы ШИМ/ППМ/СБУС,
Вообщем придумал:
ШИМ - без перемычек;
ППМ - перемычка 2-3, 1 канал ППМСУМ;
СБУС - перемычка 1-2.
Перемычка проверяется 1 раз при сбросе.
1 канал ППМСУМ;
4-й канал (по табличке на плате - + 4 в ряд) удобнее 😃
4-й канал (по табличке на плате - + 4 в ряд) удобнее
А… ну да!😃 ППМ - перемычка 2-4, 1 канал ППМСУМ;
Я вот думаю, а на СБУС надо переназначение каналов делать? Или они в таком же порядке как в ППМ идут?
А… ну да! ППМ - перемычка 2-4, 1 канал ППМСУМ;
нет!!! перемычка 1-2, 4-й канал ППМСУМ (это если из таблички), 2-3 СБУС
табличка снизу платы…
а на схеме вход 6 ППМСУММ, перемычки 9,7,5, я забыл просто переименовать, в обратном порядке все…
как и здесь у меня было
static const uint16_t multiPPM[] = {
PWM6 | TYPE_IP, // PPM input 6-й для проца, 4-й для пользователя (считать человеку легче слева направо)
PWM9 | TYPE_M,
PWM10 | TYPE_M,
PWM11 | TYPE_M,
PWM12 | TYPE_M,
PWM13 | TYPE_M,
PWM14 | TYPE_M,
PWM15 | TYPE_M,
PWM16 | TYPE_M,
PWM17 | TYPE_S,
PWM18 | TYPE_S,
PWM19 | TYPE_S,
PWM20 | TYPE_S,
0xFFFF
};
static const uint16_t multiPWM[] = {
PWM1 | TYPE_IW, // input #1
PWM2 | TYPE_IW,
PWM3 | TYPE_IW,
PWM4 | TYPE_IW,
PWM5 | TYPE_IW,
PWM6 | TYPE_IW,
PWM7 | TYPE_IW,
PWM8 | TYPE_IW, // input #8
PWM9 | TYPE_M,
PWM10 | TYPE_M,
PWM11 | TYPE_M,
PWM12 | TYPE_M,
PWM13 | TYPE_M,
PWM14 | TYPE_M,
PWM15 | TYPE_M,
PWM16 | TYPE_M,
PWM17 | TYPE_S,
PWM18 | TYPE_S,
PWM19 | TYPE_S,
PWM20 | TYPE_S,
0xFFFF
};
Нужна ваша помощь. Мне для осд нужно чтобы Arducopter сбрасывал следующие сообщения:
#define MAVLINK_MSG_ID_HEARTBEAT 0
#define MAVLINK_MSG_ID_SYS_STATUS 1
#define MAVLINK_MSG_ID_GPS_RAW_INT 24
#define MAVLINK_MSG_ID_VFR_HUD 74
#define MAVLINK_MSG_ID_ATTITUDE 30
#define MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT 62
#define MAVLINK_MSG_ID_MISSION_CURRENT 42
#define MAVLINK_MSG_ID_RC_CHANNELS_RAW 35
Не могу догнать что нужно сделать что бы “мозги” арду начали отсылать эти данные.
Нужна ваша помощь. Мне для осд нужно чтобы Arducopter сбрасывал следующие сообщения:
Алексей, я в самом коде АПМ совсем не лазил, я занимался портом РТОС Нутекс по запуск АПМ на плате F4BY, поэтому квалифицированно помочь не могу.
Вроде как в libraries\GCS_MAVLink\include\mavlink\v1.0\common\mavlink_msg_attitude.h есть прототипы функций, вызываются они из ArduCopter\GCS_Mavlink.pde
в принципе тот же 6000 только в меньшем корпусе, единственный смысл если корпуса с 9250 одинаковые, то можно заложить (купить) потом поменять микрухи…
Не могу догнать что нужно сделать что бы “мозги” арду начали отсылать эти данные.
HEARTBEAT отсылается всегда (вроде раз в секунду). Остальное надо запрашивать. Проще всего посмотреть код того же MinimOSD. По сути, вы запрашиваете такие то данные и говорите, что надо их отправлять с частотой 10HZ, дальше данные будут капать с указанной частотой.
Скоро мозг взорвется.
Посмотрел что шлет ArduCamOSD в контроллер при старте. Получил:
// STX | HEADER | DATA | CRC |
unsigned char strInit0[] = {0xFE, 0x06, 0x00, 0x0C, 0x01, 0x42, 0x02, 0x00, 0x01, 0x01, 0x01, 0x01, 0xD7, 0xD3};
unsigned char strInit1[] = {0xFE, 0x06, 0x01, 0x0C, 0x01, 0x42, 0x02, 0x00, 0x01, 0x01, 0x02, 0x01, 0x22, 0x69};
unsigned char strInit2[] = {0xFE, 0x06, 0x02, 0x0C, 0x01, 0x42, 0x05, 0x00, 0x01, 0x01, 0x03, 0x01, 0x55, 0x0A};
unsigned char strInit3[] = {0xFE, 0x06, 0x03, 0x0C, 0x01, 0x42, 0x02, 0x00, 0x01, 0x01, 0x06, 0x01, 0x61, 0xA1};
unsigned char strInit4[] = {0xFE, 0x06, 0x04, 0x0C, 0x01, 0x42, 0x05, 0x00, 0x01, 0x01, 0x0A, 0x01, 0x3C, 0x63};
unsigned char strInit5[] = {0xFE, 0x06, 0x05, 0x0C, 0x01, 0x42, 0x02, 0x00, 0x01, 0x01, 0x0B, 0x01, 0x69, 0xAB};
Выдрал код подсчета контрольной суммы с ArduCamOSD
void _crc_accumulate(unsigned char data, unsigned short *crcAccum)
{
unsigned char tmp;
tmp = data ^ (unsigned char)(*crcAccum &0xff);
tmp ^= (tmp<<4);
*crcAccum = (*crcAccum>>8) ^ (tmp<<8) ^ (tmp <<3) ^ (tmp>>4);
}
//====================================================================================================
void _crc_init(uint16_t* crcAccum)
{
*crcAccum = X25_INIT_CRC;
}
//====================================================================================================
unsigned short _crc_calculate(unsigned char* pBuffer, unsigned short length)
{
unsigned short crcTmp;
_crc_init(&crcTmp);
while (length--) {
_crc_accumulate(*pBuffer++, &crcTmp);
}
return crcTmp;
}
Считаю CRC16 для 0x06, 0x00, 0x0C, 0x01, 0x42, 0x02, 0x00, 0x01, 0x01, 0x01, 0x01 и у меня нифига не получается 0xD7, 0xD3.
То ли лыжи не едут то ли я что то не понимаю.😵
в принципе тот же 6000 только в меньшем корпусе, единственный смысл если корпуса с 9250 одинаковые, то можно заложить (купить) потом поменять микрухи…
шумы сравниете и поймете что это не 6000 это хуже.