OSD на ATmega1281

msv

Могу предположить, у вас на плате сенсоров попутаны оси акселя и гироскопа… Сравните с расположением микросхем на плате на которую дал ссылку выше Сергей.
В принципе лечится программно, но как это сделать мне удаленно- надо хорошо подумать…

Вахтанг:

Этот не подойдет.

Z-состояние конечно не нужно, но то что они:
“5-volt tolerant inputs/outputs, for interfacing with 5-volt logic”
“Direct interface with TTL levels”
мне показалось достаточно, что бы использовать в качестве преобразователя уровней в сторону 5->3.3В. Ну а обратно можно и напрямую включить…
PS Эх… у того же продовца, у которого чисто микруху заказал, оказывается уже есть все готовое. Надо было неспешить, поискать и не маяться с печаткой и выбором ПУ… 😦

Иван
msv:

В принципе лечится программно, но как это сделать мне удаленно- надо хорошо подумать…

со мной же прокатило:)) могу посодействоваль в лечении бага - но для начала нужна фотка проблемного комплекта

korall
Иван:

какой у вас комплект? можно фото того что у вас? лично у меня с иму проблем не было кроме тех которое я сам внёс и сам же поправил

ubd:

А плату датчиков, ту купили? Дайте ссылку какую плату купили.

Фото того что у меня
брал сдесь dx.com/…/gy-85-6dof-9dof-imu-sensor-module-for-ard…

ubd:

Вот такая инструкция по настройке есть? :

Это читал, методика настройки в моем случае не совсем понятно как лечить дрейф, можно было бы методом тыка подобрать если бы были видны положительные изменения, а в моем случаи их нет и вращение всегда в одну сторону.

msv:

Могу предположить, у вас на плате сенсоров попутаны оси акселя и гироскопа… Сравните с расположением микросхем на плате на которую дал ссылку выше Сергей. В принципе лечится программно, но как это сделать мне удаленно- надо хорошо подумать…

На вид платы абсолютно идентичные, оси должны совпадать.
Я еще в сентебре пытался собрать старый вариант IMU немного на другой плате (теже датчики но без компаса),закоментировав пару строк в исходниках где идет обращение к компасу, и была таже проблема квадрат точно также крутился и решив что мой “скил” программиста не достаточно высок для такого тюнинга, бросил это дело и заказал правильную на вид плату сенсоров что бы обойтись без импровизаций с моей стороны. Не помогло:( .

Назрел еще такой вопросик, в проге imu_test при нажатии кнопки Trend появляется окно с тремя типа графиками, у меня они пустые, что это? так и должно быть?

ubd

Тренд работает когда пройдёт инициализация ИМУ. У вас инициализация не проходит.

Может проц поменять? Раз с той и с этой платой датчиков крутится моделька. А проц то один.
Такое ощущение что наводиться что то на АЦП…

Я сделал три экземпляра иму, и все работали одинаково, ни у одной не крутилась моделька. Она крутится только по азимуту, т.е. по компасу, но медленно. КАК бы компас всё ровно не используется, на это можно забить.

msv

Да, на вид платка правильная…
Попробуйте такой test_imu.
Добавил чекбокс “Accel test”. При включении “Debug mode” и этой галочки расчет ориентации будет только на основе акселя. Те. модель должна показывать ориентацию по крену и тангажу без всяких уплываний.

korall
ubd:

Может проц поменять? Раз с той и с этой платой датчиков крутится моделька. А проц то один. Такое ощущение что наводиться что то на АЦП…

старая версия была сделана на макетке соответственно там и проц(еще из старых партий без буквы А) и кварц и сама плата были другими, питается все это у меня от USB порта ноутбука, но пробовал и от акумулятора через КРЕНку,по тыкал осцилографам в места питания сенсоров и проца,возбуждений и генераций вроде не обнаружил.

msv:

Попробуйте такой test_imu.

Вот как то так:

Попробовал дла проверки прицепить эти сенсоры к MultiWii, так там все с ними работает.

Ничего не понимаю ,чертовщина какая то:wacko:

msv

Явно с осями какая-то путаница… Сергей а прошивку сами компилировали или готовую заливали?
Попробуйте эту.
Если ничего не измениться, добавлю вывод данных акселя, будем разбираться…

korall

Те что на видео залиты готовые. Сам пробовал компилировать старую версию ,все работало одинаково.

msv:

Попробуйте эту. Если ничего не измениться, добавлю вывод данных акселя, будем разбираться…

нет никаких изменений.

msv

Ок. Продолжаем разговор…
Грузите это: test_imu.
Добавил вывод акселя по осям.
В горизонте должны быть цифры: 0, 0, 100.
Нос- широкая сторона платы с разъемами, если смотрим с хвоста на нос правый крен: 0,100,0
Кабрирование 90град: 100, 0, 0.

korall

Верх платы сенсоры вверху?

В горизонте : -126, -20, 630
Правый крен:-126, -136, 530
Левый крен: -130, 91, 530
Кабрирование: -240, -22, 530
Пикирование: -10, -20, 520
в горизонте кверх ногами: -126, -25, 420
Это вот с этой прошивкой

msv:

Попробуйте эту.

msv

Да, сенсоры вверху.
Готов сдаться…
Вверх ногами в горизонте?

korall

отредактировал предыдущий пост добавил показания вверх ногами.
По тесту вроде как оси правильно расположены, только показания смещены от нуля сильно по X и Z.
Может можно в настройки добавить параметр смещения (типа ручной коректеровки нуля) ?

А вот сдаватся не надо, на Вас вся надежда

Вот в доках на ADXL 345 что то про смещение:

это не оно случаем?

Получше рассмотрел свои цифры ,оказалось что ось Y в инверсии еще в добавок.

korall

Добавил в код
if(err) return err;
err=TWI_SendByte(ADXL345_ADDRESS<<1, 0x1e, 0x4f); //Х_offset
if(err) return err;
err=TWI_SendByte(ADXL345_ADDRESS<<1, 0x1f, 0x10); //Y_offset
if(err) return err;
err=TWI_SendByte(ADXL345_ADDRESS<<1, 0x20, 0x80); //Z_offset

по Z не хватает расхода чтобы дотянуть до нуля 😦
и незнаю как инвертировать ось Y

теперь в тесте стало так :
В горизонте : 0, 0, 430
Правый крен:0, -100, 320
Левый крен: 0, 110, 320
Кабрирование: -110, 0, 320
Пикирование:110, 0, 320
в горизонте кверх ногами: 0, 0, 220

Иван

на тесте с мультиком - компас адекватно реагирует?. есть ли варианты в ближайшем доступе другой платки с этими же датчиками? просто, насколько я помню, когда я свою иму паял у меня гир повёрнут по часовой стрелке на 90 гр. и вроде адекват был… может непропай на плате? по ножкам прерываний например?

msv

Иван, тут имхо все чудесатее… Данные то с акселя явно читаются (т.е. по железу претензий не может быть)… Только почему то с жутким смещением, да еще одна ось с инверсией…
Сергей, в файле sensors.c можно переписать функцию


#define ADX345_OFFSET_X 0 //Задать смещение!!
#define ADX345_OFFSET_Y 0 //Задать смещение!!
#define ADX345_OFFSET_Z 0 //Задать смещение!!
u_char ADXL345_GetData(void)
{
float fv;
u_char err;
s_int buff[3];

err=TWI_RecData(ADXL345_ADDRESS<<1, 0x32, (u_char *)buff, 6);
if(err) return err;
fv=(float)buff[0];
gSensorData.Accel[0]=(fv/gCnfData.K_AccelGravity)-ADX345_OFFSET_X;
fv=(float)buff[1];
gSensorData.Accel[1]=-((fv/gCnfData.K_AccelGravity)-ADX345_OFFSET_Y); // invert Y!!!!
fv=(float)buff[2];
gSensorData.Accel[2]=(fv/gCnfData.K_AccelGravity)-ADX345_OFFSET_Z;
return 0;
}

Но это все какие-то странные костыли…
ЗЫ Креном вправо я назвал поворот по часовой…

korall

Сергей если можно выложите пожалуйста крайний исходник IMU, я то старый какой то ковыряю ,он не совсем корректно с прогой test_imu работает (только с галкой дебаг)

msv:

ЗЫ Креном вправо я назвал поворот по часовой…

Совершенно верно я так и понял

Иван

c чего взяться тут инверсии? если поумочанию сенсоры стоят правильно. помоегу тут кто-то наплате глючит вопрос только кто… может в меге фьюзы не все стоят, может аксель глючный попался? (я свой по торопыжкински даже переполюсовал как то выжил… ) лезть сразу в код при условии что у всех он работает исправно по-моему это последнее дело…

msv

Ок: imu souce.
Там только надо поменять настройку UART, у меня нестандартный кварц.
В режиме дебаг с платы иму передаются исходные данные с сенсоров, расчет ориентации делает сам test_imu.
Иначе плата иму выдает уже рассчитанные углы ориентации и данные о значениях непосредственно с датчиков недоступны… Те. может эти исходники и не нужны…

ubd

Да какой кварц у вас? Я выкладывал прошику которая работает на 16мгц, и программа ТестИМУ тоже была заточена под этот кварц, т.к. передача данных на другой скорости. В общем в архиве было всё под 16 мгц.
В посту 1081, прошивка и программа тест работает на 16 мгц 100 пудов!
rcopen.com/forum/f8/topic162911/1081

Иван

получил у себя нечто похожее с Korall на стадии калибровки после включения питания, если выждать - положить на стол плату иму до получения статус ОК всё пучком:)

korall
ubd:

Да какой кварц у вас? Я выкладывал прошику которая работает на 16мгц, и программа ТестИМУ тоже была заточена под этот кварц, т.к. передача данных на другой скорости. В общем в архиве было всё под 16 мгц. В посту 1081, прошивка и программа тест работает на 16 мгц 100 пудов!

Кварц 16 0000 ,я перепробовал все выложеные в этой ветки прошивки и проги test_imu и их комбинации ,те проши что под кривой кварц сыпят всякий мусор в окне Монитор. я их сразу отмел.Собственно комплект из Вашего архива это было последнее после чего я понял что у меня чтото работает не так (не проходит калибровка)

msv:

В режиме дебаг с платы иму передаются исходные данные с сенсоров, расчет ориентации делает сам test_imu. Иначе плата иму выдает уже рассчитанные углы ориентации и данные о значениях непосредственно с датчиков недоступны…

Может конечно в теории так и должно быть но по факту некоторые ранние версии test_imu полноценно работают только с ранними версиями прошивки, а с новыми начинают крутить квадрат только с галкой дебаг и при этом не читаются и не пишутся настройки,но в общем то теперь это уже не важно.

Похоже уже виден свет в конце тонеля , внес в код такие изменения :

if(err) return err;
err=TWI_SendByte(ADXL345_ADDRESS<<1, 0x1e, 0x4f); //Х_offset
if(err) return err;
err=TWI_SendByte(ADXL345_ADDRESS<<1, 0x1f, 0x10); //Y_offset
if(err) return err;
err=TWI_SendByte(ADXL345_ADDRESS<<1, 0x20, 0xf1); //Z_offset

return err;
}
//---------------------------------------------------------------------------------------------------
#define ADX345_OFFSET_X 0 //Задать смещение!!
#define ADX345_OFFSET_Y 0 //Задать смещение!!
#define ADX345_OFFSET_Z 5 //Задать смещение!!

u_char ADXL345_GetData(void)
{
float fv;
u_char err;
s_int buff[3];

err=TWI_RecData(ADXL345_ADDRESS<<1, 0x32, (u_char *)buff, 6);
if(err) return err;
fv=(float)buff[0];
gSensorData.Accel[0]=-((fv/gCnfData.K_AccelGravity)-ADX345_OFFSET_X); // invert X!!!
fv=(float)buff[1];
gSensorData.Accel[1]=-((fv/gCnfData.K_AccelGravity)-ADX345_OFFSET_Y); // invert Y!!!
fv=(float)buff[2];
gSensorData.Accel[2]=(fv/gCnfData.K_AccelGravity)-ADX345_OFFSET_Z;
return 0;
}

И УРА квадрат перестал плыть и ИМУ стала проходить калибровку, только теперь квадрат в режиме Accsel test наклоняется правильно , а в стандартном инвертированно по крену и тангажу ,а по курсу правильно.
Сергей msv подскажите где теперь это можно в коде подправить или достаточно просто развернуть плату на 180 покурсу (широкая сторона с разъемом станет хвостом)?

Иван:

получил у себя нечто похожее с Korall на стадии калибровки после включения питания, если выждать - положить на стол плату иму до получения статус ОК всё пучком

я часа 2 ждал ,не помогло