Специальные цены   новые товары
+ Ответить в теме
Страница 158 из 327 ПерваяПервая ... 148 156 157 158 159 160 168 ... ПоследняяПоследняя
Показано с 6,281 по 6,320 из 13065

MultiWii

Тема раздела Коптеры. Комплектующие, сборка, настройка. в категории Квадрокоптеры и мультироторы; Сообщение от Flutter Чет-то как-то аж передернуло. И ява говно и гуи говно ( ну и Билл Гейтс тоже). А ...

  1. #6281

    Регистрация
    19.11.2007
    Адрес
    Москва,Красногорск,Судогда
    Возраст
    36
    Сообщений
    658
    Записей в дневнике
    5
    Цитата Сообщение от Flutter Посмотреть сообщение
    Чет-то как-то аж передернуло.И ява говно и гуи говно ( ну и Билл Гейтс тоже). А чего ж сам не напишешь?
    Может, лучше вообще систему 13 нелинейных дифуров считать на канцелярских счетах?
    Насчёт Явы могу говорить много и с удовольствием Самого меня Бог миловал на ней что-либо писать, но было время когда общался много с людьми, кто был с ней связан. Если в двух словах, то - плюс: платформо-независимость, минусы: тормоза, и хваленое управление пямятью, на помент 7-летней давности, толком не работало. Хорошо запомнил пример загубленного очень крупного проекта, когда вздумали написанное переписать на Java - переписали за месяц, отлаживали пол-года, после чего стало понятно, что нормально оно работать не будет, но уже поздно что-то менять. Насколько знаю - до сих пор трахаются... Обратно переписывать уже времени нет, - куча всего уже добавлено.

    А было бы как прежде, 20 лет, и никаких семейных обязательств - и конфигуратор бы переписал за недельку
    P.S. В целом кстати - знал бы, что столько времени с кодом MultiWii провожусь, - надо было сразу свой порт писать... (не на базе кода MultiWii, Боже его упаси..)

  2.  
  3. #6282

    Регистрация
    27.02.2010
    Адрес
    Лес под спб
    Возраст
    60
    Сообщений
    608
    Насчет переписывания GUI поддерживаю. У самого периодически возникают проблемы. Ну и выделил бы недельку. Потестируем вместе.

  4. #6283

    Регистрация
    18.04.2012
    Адрес
    Магнитогорск
    Возраст
    66
    Сообщений
    32
    Цитата Сообщение от filimon Посмотреть сообщение
    Ребята помогите. Собрал MultiWii на базе Arduino Mega 2560. В программированиия я не специалист, только пытаюсь разобраться. Проблема такая – сгорел выходной транзистор порта №06 (спалил нечаянно). Порт не работает. Но есть свободный порт №12 (вроде нигде не задействован) . Надо перенаправить туда сигнал управления двигателем. Искал в скетче v. 2.1 привязку выходных портов к двигателям, но так толком и не понял, где это и как это сделать. Если знаете, то подскажите, как это сделать. Жалко выбрасывать Ардуинку! Заранее благодарю!
    Порт у Ардуины восстановил следующим образом:
    Напряжением 10 вольт пробил сгоревший выходной транзистор порта. После этого выходное сопротивление порта стало около 1000Ом (было 75 Ом). Осцилограф показал наличие на нем выходного сигнала, но в 10 раз меньше по амплитуде, чем нормалный. Сделал маленькую печатку схемы компаратора на операционном усилителе. Сигнал усилился до амплитуды питания (5 вольт). После подключения мотора все заработало как положено!
    Единственный неопределенный момент - надежность микроконтроллера, но время покажет. Так, что есть положительный опыт лечения таких неисправностей.

  5. #6284

    Регистрация
    03.12.2006
    Адрес
    Москва
    Возраст
    38
    Сообщений
    1,145
    А смысл переписывать Мультивийный конфигуратор на ЯВА? Есть прекрасный и более функциональный аналог в виде ВинГуи.Показывает все тоже самое и даже больше)))

  6.  
  7. #6285

    Регистрация
    19.11.2007
    Адрес
    Москва,Красногорск,Судогда
    Возраст
    36
    Сообщений
    658
    Записей в дневнике
    5
    Цитата Сообщение от soliada Посмотреть сообщение
    А смысл переписывать Мультивийный конфигуратор на ЯВА? Есть прекрасный и более функциональный аналог в виде ВинГуи.Показывает все тоже самое и даже больше)))
    Видимо GUI это не самое слабое место MultiWii. Самое слабое - это документация на Multiwii Например я первый раз услышал об этом конфигураторе.
    Если кому интересно - вот что имелось в виду.

    P.S. Охрененнейшая штука!!
    _____________________________________________________________
    Сегодня был первый пробный облет летающего крыла под управлением MultiWii. В принципе неплохо, но есть пару неясностей, которые возможно проистекают от отсутствия у меня опыта:
    1. Такое ощущение, что работают только гиры, и никакой попытки удержания горизонта с помощью акселя. Что интересно - в течение пары часов экспериментов, пару раз каким-то образом вроде удавалось добиться какой-то вялой попытки чтобы контроллер начал не только отрабатывать мгновенные воздействия гирами, но и стабилизироваться по горизонту. Но так и не понял логики когда оно вдруг стабилизируется а когда нет. (также не очень ясно, как отрегулировать силу стабилизации. Я добился только отклонения элевонов на 3-5% в крайних наклонах ЛК, что, как мне показалось, очень мало)
    2. На каком выходе искать сигнал для двигателя? (экспериментальным путем нашёл каналы для Серв, но для двигателя не нашёл) - вопрос наверное к тем, кто общался именно с конфигурацией для ЛК
    Последний раз редактировалось dROb; 14.10.2012 в 20:12.

  8. #6286

    Регистрация
    03.12.2006
    Адрес
    Москва
    Возраст
    38
    Сообщений
    1,145
    Вроде как для ЛК канал газа берется напрямую от приемника.Сервопривода вывод А0-левый, А1-правый.
    В файле конфиг есть настройка расходов и реверса для сервоприводов.

  9. #6287

    Регистрация
    12.09.2012
    Адрес
    Киев
    Возраст
    43
    Сообщений
    101
    Цитата Сообщение от dROb Посмотреть сообщение
    Например я первый раз услышал об этом конфигураторе.
    Если кому интересно - вот что имелось в виду.

    P.S. Охрененнейшая штука!!
    у меня винда 64-разрядная , NET framework 2.0 не хочет ставить, а без него эта софтина не хочет работать.
    опишите пожалуйста, в чем особенность этой штуки, чтоб наверняка мне сообразить, нужно ли ставить 32-х разрядную винду иль нет.

  10.  
  11. #6288

    Регистрация
    19.11.2007
    Адрес
    Москва,Красногорск,Судогда
    Возраст
    36
    Сообщений
    658
    Записей в дневнике
    5
    Цитата Сообщение от soliada Посмотреть сообщение
    Вроде как для ЛК канал газа берется напрямую от приемника.Сервопривода вывод А0-левый, А1-правый.
    В файле конфиг есть настройка расходов и реверса для сервоприводов.
    В принципе так я и летал, и быть может так и продолжу, но немного смущает, что например всё же отдельный ползунок для Мотора, в GUI присутствует (например если Арм не выполнен - то ползунок на нуле, что в общем то логично и слегка полезно), то есть мотором платка как бы управляет, но непонятно куда данные от него кладёт...
    Расходы и реверсы нашёл, спасибо!

    Цитата Сообщение от soliada Посмотреть сообщение
    Вроде как для ЛК канал газа берется напрямую от приемника.Сервопривода вывод А0-левый, А1-правый.
    В файле конфиг есть настройка расходов и реверса для сервоприводов.
    В принципе так я и летал, и быть может так и продолжу, но немного смущает, что например всё же отдельный ползунок для Мотора, в GUI присутствует (например если Арм не выполнен - то ползунок на нуле, что в общем то логично и слегка полезно), то есть мотором платка как бы управляет, но непонятно куда данные от него кладёт...
    Расходы и реверсы нашёл, спасибо!

    Цитата Сообщение от Olegsi Посмотреть сообщение
    у меня винда 64-разрядная , NET framework 2.0 не хочет ставить, а без него эта софтина не хочет работать.
    опишите пожалуйста, в чем особенность этой штуки, чтоб наверняка мне сообразить, нужно ли ставить 32-х разрядную винду иль нет.
    Вот вам пару скриншотов
    Нажмите на изображение для увеличения
Название: MWI_WIN1.jpg
Просмотров: 65
Размер:	42.9 Кб
ID:	703441
    Нажмите на изображение для увеличения
Название: MWI_WIN2.jpg
Просмотров: 62
Размер:	43.8 Кб
ID:	703442
    Для меня однозначные плюсы следующие:
    - прога отлично работает на обоих моих компах, в отличие от родной утилиты, которая на обоих толком не работает
    - юзабилити на высоте!
    - ну и функций вроде поболее, хотя детально не разбирался
    Последний раз редактировалось dROb; 14.10.2012 в 22:07.

  12. #6289

    Регистрация
    03.12.2006
    Адрес
    Москва
    Возраст
    38
    Сообщений
    1,145
    Цитата Сообщение от dROb Посмотреть сообщение
    то есть мотором платка как бы управляет, но непонятно куда данные от него кладёт...
    Хм,интересно.
    А арминг можно сделать только при горизонтальном положении крыла или из любого? Как я понял,то для самолетного режима,при условии что есть акселерометр,запуск системы возможен только в горизонтальном положении,и логично предположить,что мотор тоже куда-то подключается...
    Может поспрашивать про это в самолетной ветке,там вроде даже такая тема была.

  13. #6290

    Регистрация
    19.11.2007
    Адрес
    Москва,Красногорск,Судогда
    Возраст
    36
    Сообщений
    658
    Записей в дневнике
    5
    Цитата Сообщение от soliada Посмотреть сообщение
    Хм,интересно.
    А арминг можно сделать только при горизонтальном положении крыла или из любого? Как я понял,то для самолетного режима,при условии что есть акселерометр,запуск системы возможен только в горизонтальном положении,и логично предположить,что мотор тоже куда-то подключается...
    Может поспрашивать про это в самолетной ветке,там вроде даже такая тема была.
    Да, арминг только из горизонтального положения (вырвал себе все волосы сегодня на поле, пока до меня не дошло ) - в самолётной ветке действительно надо поспрашивать!

  14. #6291

    Регистрация
    13.03.2011
    Адрес
    Montreal, Canada
    Возраст
    38
    Сообщений
    2,291
    Записей в дневнике
    19
    Цитата Сообщение от dROb Посмотреть сообщение
    Java - кривое гуано
    Цитата Сообщение от dROb Посмотреть сообщение
    Насчёт Явы могу говорить много и с удовольствием Самого меня Бог миловал на ней что-либо писать
    вот странные люди!! я вот с 2001-го сижу на java и доволен... а то гаУно, гаУно... криво можно и на аСме написать
    за свою практику поимел 100500 проектов... ни разу не завалили по перфомансу... java всего лишь средство к цели, а кривые руки могут сделать стрААжные вещи

    Цитата Сообщение от filimon Посмотреть сообщение
    Порт у Ардуины восстановил следующим образом
    приятно читать проф-е посты!

    Цитата Сообщение от soliada Посмотреть сообщение
    А смысл переписывать Мультивийный конфигуратор на ЯВА?
    был и на java проект... на свингах... не в курсе жив ли http://www.multiwii.com/wiki/index.p...g_for_multiwii
    Цитата Сообщение от dROb Посмотреть сообщение
    Самое слабое - это документация на Multiwii
    исправляются потиху
    http://www.multiwii.com/wiki/index.p...ecial:AllPages
    Последний раз редактировалось mahowik; 15.10.2012 в 01:54.

  15. #6292

    Регистрация
    23.02.2012
    Адрес
    Msk
    Возраст
    40
    Сообщений
    214
    Записей в дневнике
    11
    Цитата Сообщение от dROb Посмотреть сообщение
    Я тоже думал что дело в Java, даже не в разных её версиях, а в том, что просто Java - кривое гуано
    Но держу пари, что наш случай - это кривые руки того, кто писал конфигуратор. Он совершенно не оптимизирован, ни для слабых, ни для слишком мощных компьютеров.
    дык вы исходник-то гляньте. Оно не писано на яве, а нарисовано на processing. Скорее тогда дело в processing

    Цитата Сообщение от mahowik Посмотреть сообщение
    ни разу не завалили по перфомансу...
    Угу, просто требования к железу в два раза выше - всего то -)

  16. #6293

    Регистрация
    29.09.2010
    Адрес
    г.Торжок
    Возраст
    46
    Сообщений
    2,310
    Доброго всем дня! Подскажите, пожалуйста, начинающему пилоту квадрокоптера вот что: освоил полет на древней платке от HK - самая первая, которая была в продаже КК. Нужно двигать дальше. На НК в наличии есть такой мультивий. Информации по нему на форуме не нашел, да и на НК информация скудная. Может кто объяснить понятно и просто - стоит ли его заказывать, на что он способен, слишком ли он отличается от AIO?
    Последний раз редактировалось OK-40; 15.10.2012 в 10:49.

  17. #6294

    Регистрация
    19.11.2007
    Адрес
    Москва,Красногорск,Судогда
    Возраст
    36
    Сообщений
    658
    Записей в дневнике
    5
    [QUOTE=Sevick;3692363]дык вы исходник-то гляньте. Оно не писано на яве, а нарисовано на processing. Скорее тогда дело в processing
    Ммм, да, видел я и исходник на Processing, и вроде какие-то исходники и пакеты Java. В общем надо признать что я решительно ничего в этом не понимаю

    Кстати, нутром чую - проблема в том, что программа при инициализации openGL запрашивает какую-то крутую возможность (например какие-нибудь шейдеры 4.0), а её в слабых компьютерах нету. После чего OpenGL переходит в Software рендеринг, и все жутко лагает. Например у меня ноут и домашний комп очень похожи в целом, но на ноуте скорость работы GUI - в 100 раз меньше. Кто разбирается - проверьте пожалуйста. (я залез внутрь и к удивлению обнаружил что инициализация OpenGL - одной строчкой без всяких опций)

    Цитата Сообщение от OK-40 Посмотреть сообщение
    Доброго всем дня! Подскажите, пожалуйста, начинающему пилоту квадрокоптера вот что: освоил полет на древней платке от HK - самая первая, которая была в продаже КК. Нужно двигать дальше. На НК в наличии есть такой мультивий, этот. Информации по нему на форуме не нашел, да и на НК информация скудная. Может кто объяснить понятно и просто - стоит ли его заказывать, на что он способен, слишком ли он отличается от AIO?
    Ссылка у вас битая. Но судя по всему - я как раз получил три дня назад эту платку. На квадрике не гонял, но так, на столе - весьма неплохо, все необходимое в наличии. Всё работает, за исключением странноватого временного бага с BMP085 вчера. Но в целом - недурно.

  18. #6295

    Регистрация
    29.09.2010
    Адрес
    г.Торжок
    Возраст
    46
    Сообщений
    2,310
    Цитата Сообщение от dROb Посмотреть сообщение
    Но в целом - недурно.
    Спасибо, ссылку исправил.

    Можно ли на этой платке использовать режим Care Free и что для этого нужно!

  19. #6296

    Регистрация
    07.04.2012
    Адрес
    Брянск
    Возраст
    29
    Сообщений
    1,675
    Записей в дневнике
    6
    Цитата Сообщение от Olegsi Посмотреть сообщение
    у меня винда 64-разрядная , NET framework 2.0 не хочет ставить, а без него эта софтина не хочет работать.
    у меня 7-ка 64 разрядная, все работает отлично - просто ставте то что на гуглокоде вместе с вингуи лежит

  20. #6297

    Регистрация
    23.02.2012
    Адрес
    Msk
    Возраст
    40
    Сообщений
    214
    Записей в дневнике
    11
    Скорее в разных версиях processing разная кривость Serial.. Но лень.....

  21. #6298

    Регистрация
    07.01.2010
    Адрес
    Камышлов, Свердловской обл
    Возраст
    40
    Сообщений
    3,756
    Цитата Сообщение от OK-40 Посмотреть сообщение
    Можно ли на этой платке использовать режим Care Free и что для этого нужно!
    Да. Нужен рабочий и откалиброванный компас (HMC5883L Magnetometer)

  22. #6299

    Регистрация
    29.09.2010
    Адрес
    г.Торжок
    Возраст
    46
    Сообщений
    2,310
    Цитата Сообщение от devv Посмотреть сообщение
    Да. Нужен рабочий и откалиброванный компас (HMC5883L Magnetometer)
    Не совсем понимаю, что значит нужен? Разве его нет на плате?

    Features:
    • SMD component design with Atmega328P
    • ITG3205 Triple Axis Gyro
    • BMA180 Accelerometer
    • BMP085 Barometer
    • HMC5883L Magnetometer
    • Servo output for camera pitch and roll control
    • Separate 3.3v regulated power supply for the sensors
    • On board logic level converter

  23. #6300

    Регистрация
    07.01.2010
    Адрес
    Камышлов, Свердловской обл
    Возраст
    40
    Сообщений
    3,756
    В курсе что он там есть.
    Но китайцы они такие. Были случаи когда что то из элементов на контроллерах для коптеров не работало как задумывалось и планировалось.
    Еще компас может работать (из за особенностей ваше конструкции/рамы) плохо (наводки от силовой части и т.д.).

  24. #6301

    Регистрация
    29.09.2010
    Адрес
    г.Торжок
    Возраст
    46
    Сообщений
    2,310
    Цитата Сообщение от devv Посмотреть сообщение
    Но китайцы они такие. Были случаи когда что то из элементов на контроллерах для коптеров не работало как задумывалось и планировалось.
    Вот оно как... Может быть, Евгений, и не в тему, но прошу посоветовать платку Wii (дешево и сердито), для новичка в коптероводстве с отсутствием (хотя бы в первое время) танцев вокруг нее. А то чем больше читаешь ветки, тем наваристее каша в голове

  25. #6302

    Регистрация
    07.01.2010
    Адрес
    Камышлов, Свердловской обл
    Возраст
    40
    Сообщений
    3,756
    Нормальный у вас вариант. Адекватная цена. Всё есть
    Берите.

  26. #6303

    Регистрация
    27.02.2010
    Адрес
    Лес под спб
    Возраст
    60
    Сообщений
    608
    Абсолютно поддерживаю. Но все-равно, разбираться придется долго. Это не то. что. купил и полетел. НО результат того стоит.
    Что-то я не в ту тему. Имелось в видуhttp://dx.com/p/crius-all-in-one-pro...-149346?item=2

  27. #6304

    Регистрация
    04.08.2012
    Адрес
    Бруклин, США
    Возраст
    45
    Сообщений
    435
    Требуется консультация человека, разбирающегося в программировании...

    Занимаюсь разработкой очередного подвеса для камеры со степмоторами вместо сервомашинок, использующего мультивий SE в качестве собственных мозгов. Механическая часть практически доведена, степперы работают прекрасно (при 200 шагах на оборот и микростеппинге 1/16 получается такое разрешение и такая скорость, что сервы плачут от зависти). В связи с кардинально изменившейся функциональностью платы, код пытаюсь написать практически с нуля, но с использованием готовых библиотек для общения с MPU6050 по шине I2C (ибо являюсь дремучим чайником в смысле понимания и использования серийных протоколов).

    Уперся в скорость получения данных с MPU 6050. Требуется получать СЫРЫЕ данные с гироскопов и акселей, всего по двум осям (x,y). По моим подсчетам, скорость сэмплирования с использованием вот этого скетча, который сразу получает данные с гир и акселей по всем трем осям, получается чуть больше 500 раз в секунду. Если читать данные отдельно с гироскопов и отдельно с акселей, скорость получается примерно 900hz, но это усложняет цикл и сбивает тайминги. Что я ни делал, какие параметры ни менял через библиотеку, изменений скорости не заметил никаких. По данным производителя, MPU 6050 способен отдавать данные со скоростью 8000hz для гироскопов и 1000hz для акселей. Можно ли хотя бы приблизиться к таким цифрам, если да, то как? Начинаю подозревать, что затык в стандартной ардуиновской библиотеке Wire, но не уверен. Кто-нибудь может подсказать, куда копать?

    P.S. Идеально было бы посмотреть на какой-нибудь простой кусок кода, выдающий данные быстрее...

  28. #6305

    Регистрация
    13.03.2011
    Адрес
    Montreal, Canada
    Возраст
    38
    Сообщений
    2,291
    Записей в дневнике
    19
    Цитата Сообщение от Gene Посмотреть сообщение
    Требуется консультация человека, разбирающегося в программировании...

    Занимаюсь разработкой очередного подвеса для камеры со степмоторами вместо сервомашинок, использующего мультивий SE в качестве собственных мозгов. Механическая часть практически доведена, степперы работают прекрасно (при 200 шагах на оборот и микростеппинге 1/16 получается такое разрешение и такая скорость, что сервы плачут от зависти). В связи с кардинально изменившейся функциональностью платы, код пытаюсь написать практически с нуля, но с использованием готовых библиотек для общения с MPU6050 по шине I2C (ибо являюсь дремучим чайником в смысле понимания и использования серийных протоколов).

    Уперся в скорость получения данных с MPU 6050. Требуется получать СЫРЫЕ данные с гироскопов и акселей, всего по двум осям (x,y). По моим подсчетам, скорость сэмплирования с использованием вот этого скетча, который сразу получает данные с гир и акселей по всем трем осям, получается чуть больше 500 раз в секунду. Если читать данные отдельно с гироскопов и отдельно с акселей, скорость получается примерно 900hz, но это усложняет цикл и сбивает тайминги. Что я ни делал, какие параметры ни менял через библиотеку, изменений скорости не заметил никаких. По данным производителя, MPU 6050 способен отдавать данные со скоростью 8000hz для гироскопов и 1000hz для акселей. Можно ли хотя бы приблизиться к таким цифрам, если да, то как? Начинаю подозревать, что затык в стандартной ардуиновской библиотеке Wire, но не уверен. Кто-нибудь может подсказать, куда копать?

    P.S. Идеально было бы посмотреть на какой-нибудь простой кусок кода, выдающий данные быстрее...
    Эксперименты всегда хорошо, но реально для достойной стабилизации самплинг в 200-300гц с головой и для защиты от вибраций на гиру нч фильтр внутренний 42гц ставится... драйвер для 6050 и иму можно взять из сор сов вия соот-но...

  29. #6306

    Регистрация
    07.04.2012
    Адрес
    Саратов
    Возраст
    28
    Сообщений
    395
    Посоветуйте пожалуйста продвинутые мозги, ищу замену назе, что бы жпс был + много функций (т.к это хобби, хочу расширять возможности платы). Есть небольшие навыки в программировании, хочется порытся в прошивке, паять расширительные модули.

    Приметил плату, есть аналоги олион, в чем разница ? Тут писалось про Atmega2560, она не универсальна ?

  30. #6307

    Регистрация
    07.08.2009
    Адрес
    Азов
    Возраст
    32
    Сообщений
    2,467
    Записей в дневнике
    4
    Цитата Сообщение от Radio Посмотреть сообщение
    Посоветуйте пожалуйста продвинутые мозги, ищу замену назе, что бы жпс был + много функций
    Это только закрытые проекты,кто ж вам исходники даст.

    Цитата Сообщение от Radio Посмотреть сообщение
    Приметил плату, есть аналоги олион, в чем разница ?
    Дешево и сердито обычный мультивий и думаю давно уже за вас все разработали и продвинули энтузиасты такие как Саша (mahowik) за что ему респект огромный

    Цитата Сообщение от Radio Посмотреть сообщение
    есть аналоги олион, в чем разница
    Вот на этом наверно ваш интузиазм закончится
    Начинайте отсюда

  31. #6308

    Регистрация
    04.08.2012
    Адрес
    Бруклин, США
    Возраст
    45
    Сообщений
    435
    Цитата Сообщение от mahowik Посмотреть сообщение
    Эксперименты всегда хорошо, но реально для достойной стабилизации самплинг в 200-300гц с головой и для защиты от вибраций на гиру нч фильтр внутренний 42гц ставится...
    НЧ фильтр работает, это проверено... Скорость сэмплирования желательно сделать больше именно из-за количества степов, это сильно упростит код и упростит настройку драйвера степпера -- иначе для скорости придется постоянно переключать степпинг, а это чревато вибрациями. Я его отладил именно для 1/16, и это потребовало даже некоторой перепайки. Ну по крайней мере было бы ОЧЕНЬ желательно увеличить сэмплинг. С обычными сервами такой проблемы конечно даже не возникло бы, но со степперами другое дело...

    драйвер для 6050 и иму можно взять из сор сов вия соот-но...
    Так вроде бы там эта же библиотека и используется, нет? Александр, Вы специалист, Вы можете сказать, с какой примерно частотой производится сэмплирование в стандартном софте мультивия? Если с такой же, как у меня так может и копать не нужно...

  32. #6309

    Регистрация
    13.03.2011
    Адрес
    Montreal, Canada
    Возраст
    38
    Сообщений
    2,291
    Записей в дневнике
    19
    Цитата Сообщение от Gene Посмотреть сообщение
    с какой примерно частотой производится сэмплирование в стандартном софте мультивия?
    примерно через 2-5мс, в зависимости от навески... т.е. 200-500гц...

  33. #6310

    Регистрация
    04.08.2012
    Адрес
    Бруклин, США
    Возраст
    45
    Сообщений
    435
    Цитата Сообщение от mahowik Посмотреть сообщение
    примерно через 2-5мс, в зависимости от навески... т.е. 200-500гц...
    Получается столько же, значит, смысла копать нет. Попробую в таком случае обойти библиотеку и читать нужные данные непосредственно из регистров...

  34. #6311

    Регистрация
    13.03.2011
    Адрес
    Montreal, Canada
    Возраст
    38
    Сообщений
    2,291
    Записей в дневнике
    19
    в Sensors.ino есть все что надо и I2C драйвер и драйвер mpu6050... все в одном и без либ

  35. #6312

    Регистрация
    04.08.2012
    Адрес
    Бруклин, США
    Возраст
    45
    Сообщений
    435
    Цитата Сообщение от mahowik Посмотреть сообщение
    в Sensors.ino есть все что надо и I2C драйвер и драйвер mpu6050... все в одном и без либ
    Возможно я тупой, но не смог разобраться в коде Один кусок кода тянет за собой другой, и так до бесконечности... до конца цепочки я добраться не смог. все что мне нужно -- считать значение регистра....

  36. #6313

    Регистрация
    07.04.2012
    Адрес
    Брянск
    Возраст
    29
    Сообщений
    1,675
    Записей в дневнике
    6
    Цитата Сообщение от Gene Посмотреть сообщение
    Скорость сэмплирования желательно сделать больше именно из-за количества степов, это сильно упростит код и упростит настройку драйвера степпера
    возьмите хмегу - там аппаратная поддержка 2 шаговых/трехфазных моторов, да и цикл более шустрый получается

    Цитата Сообщение от Gene Посмотреть сообщение
    но не смог разобраться в коде Один кусок кода тянет за собой другой, и так до бесконечности...
    там весь код в шапке сенсор.ино, все остальное чего оно хочет - в основном переменные определенные в мультивий.ино и дефайны из деф.н и сонфиг.н

  37. #6314

    Регистрация
    04.08.2012
    Адрес
    Бруклин, США
    Возраст
    45
    Сообщений
    435
    Цитата Сообщение от mataor Посмотреть сообщение
    возьмите хмегу - там аппаратная поддержка 2 шаговых/трехфазных моторов, да и цикл более шустрый получается
    Возможно в след. версии

    там весь код в шапке сенсор.ино, все остальное чего оно хочет - в основном переменные определенные в мультивий.ино и дефайны из деф.н и сонфиг.н
    Я как Остап Бендер, только он играл в шахматы, а я программирую второй раз в жизни Не для моего нетренированного мозга разбираться в этом. Код я воспринимаю и имею шанс понять, только когда вижу его целиком перед глазами. Когда он начинает разбегаться по всяческим инклюдам и дефайнам, пиши пропало, нить потеряна -- могу только собезьянничать, не понимая что происходит на самом деле.

  38. #6315

    Регистрация
    07.04.2012
    Адрес
    Брянск
    Возраст
    29
    Сообщений
    1,675
    Записей в дневнике
    6
    хм... ну вообще если нужно чисто и2с и получить 6 данных с датчиков то тебе нужно:
    1) определится с переменными, со знаками и направлениями
    Код:
    uint8_t rawADC[6];
    static int16_t  gyroADC[3],accADC[3];
    #define MPU6050_ADDRESS     0x68
    #define MPU6050
    #define ACC_ORIENTATION(Y, X, Z)  {accADC[ROLL]  = -Y; accADC[PITCH]  = -X; accADC[YAW]  =  Z;}
    #define GYRO_ORIENTATION(Y, X, Z) {gyroADC[ROLL] =  X; gyroADC[PITCH] = -Y; gyroADC[YAW] = -Z;}
    2) взять основные ф-ции и2с
    Код:
    // ************************************************************************************************************
    // I2C general functions
    // ************************************************************************************************************
    
    void i2c_init(void) {
      #if defined(INTERNAL_I2C_PULLUPS)
        I2C_PULLUPS_ENABLE
      #else
        I2C_PULLUPS_DISABLE
      #endif
      TWSR = 0;                                    // no prescaler => prescaler = 1
      TWBR = ((F_CPU / I2C_SPEED) - 16) / 2;   // change the I2C clock rate
      TWCR = 1<<TWEN;                              // enable twi module, no interrupt
    }
    
    void i2c_rep_start(uint8_t address) {
      TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN) ; // send REPEAT START condition
      waitTransmissionI2C();                       // wait until transmission completed
      TWDR = address;                              // send device address
      TWCR = (1<<TWINT) | (1<<TWEN);
      waitTransmissionI2C();                       // wail until transmission completed
    }
    
    void i2c_stop(void) {
      TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWSTO);
      //  while(TWCR & (1<<TWSTO));                // <- can produce a blocking state with some WMP clones
    }
    
    void i2c_write(uint8_t data ) {	
      TWDR = data;                                 // send data to the previously addressed device
      TWCR = (1<<TWINT) | (1<<TWEN);
      waitTransmissionI2C();
    }
    
    uint8_t i2c_read(uint8_t ack) {
      TWCR = (1<<TWINT) | (1<<TWEN) | (ack? (1<<TWEA) : 0);
      waitTransmissionI2C();
      uint8_t r = TWDR;
      if (!ack) i2c_stop();
      return r;
    }
    
    uint8_t i2c_readAck() {
      return i2c_read(1);
    }
    
    uint8_t i2c_readNak(void) {
      return i2c_read(0);
    }
    
    void waitTransmissionI2C() {
      uint16_t count = 255;
      while (!(TWCR & (1<<TWINT))) {
        count--;
        if (count==0) {              //we are in a blocking state => we don't insist
          TWCR = 0;                  //and we force a reset on TWINT register
          neutralizeTime = micros(); //we take a timestamp here to neutralize the value during a short delay
          i2c_errors_count++;
          break;
        }
      }
    }
    
    size_t i2c_read_to_buf(uint8_t add, void *buf, size_t size) {
      i2c_rep_start((add<<1) | 1);	// I2C read direction
      size_t bytes_read = 0;
      uint8_t *b = (uint8_t*)buf;
      while (size--) {
        /* acknowledge all but the final byte */
        *b++ = i2c_read(size > 0);
        /* TODO catch I2C errors here and abort */
        bytes_read++;
      }
      return bytes_read;
    }
    
    size_t i2c_read_reg_to_buf(uint8_t add, uint8_t reg, void *buf, size_t size) {
      i2c_rep_start(add<<1); // I2C write direction
      i2c_write(reg);        // register selection
      return i2c_read_to_buf(add, buf, size);
    }
    
    /* transform a series of bytes from big endian to little
       endian and vice versa. */
    void swap_endianness(void *buf, size_t size) {
      /* we swap in-place, so we only have to
      * place _one_ element on a temporary tray
      */
      uint8_t tray;
      uint8_t *from;
      uint8_t *to;
      /* keep swapping until the pointers have assed each other */
      for (from = (uint8_t*)buf, to = &from; from < to; from++, to--) {
        tray = *from;
        *from = *to;
        *to = tray;
      }
    }
    
    void i2c_getSixRawADC(uint8_t add, uint8_t reg) {
      i2c_read_reg_to_buf(add, reg, &rawADC, 6);
    }
    
    void i2c_writeReg(uint8_t add, uint8_t reg, uint8_t val) {
      i2c_rep_start(add<<1); // I2C write direction
      i2c_write(reg);        // register selection
      i2c_write(val);        // value to write in register
      i2c_stop();
    }
    
    uint8_t i2c_readReg(uint8_t add, uint8_t reg) {
      uint8_t val;
      i2c_read_reg_to_buf(add, reg, &val, 1);
      return val;
    }
    3) получить данные по акселю и гире
    Код:
    // ************************************************************************************************************
    // I2C Gyroscope and Accelerometer MPU6050
    // ************************************************************************************************************
    #if defined(MPU6050)
    
    void Gyro_init() {
      TWBR = ((F_CPU / 400000L) - 16) / 2; // change the I2C clock rate to 400kHz
      i2c_writeReg(MPU6050_ADDRESS, 0x6B, 0x80);             //PWR_MGMT_1    -- DEVICE_RESET 1
      delay(5);
      i2c_writeReg(MPU6050_ADDRESS, 0x6B, 0x03);             //PWR_MGMT_1    -- SLEEP 0; CYCLE 0; TEMP_DIS 0; CLKSEL 3 (PLL with Z Gyro reference)
      i2c_writeReg(MPU6050_ADDRESS, 0x1A, MPU6050_DLPF_CFG); //CONFIG        -- EXT_SYNC_SET 0 (disable input pin for data sync) ; default DLPF_CFG = 0 => ACC bandwidth = 260Hz  GYRO bandwidth = 256Hz)
      i2c_writeReg(MPU6050_ADDRESS, 0x1B, 0x18);             //GYRO_CONFIG   -- FS_SEL = 3: Full scale set to 2000 deg/sec
      // enable I2C bypass for AUX I2C
      #if defined(MAG)
        i2c_writeReg(MPU6050_ADDRESS, 0x37, 0x02);           //INT_PIN_CFG   -- INT_LEVEL=0 ; INT_OPEN=0 ; LATCH_INT_EN=0 ; INT_RD_CLEAR=0 ; FSYNC_INT_LEVEL=0 ; FSYNC_INT_EN=0 ; I2C_BYPASS_EN=1 ; CLKOUT_EN=0
      #endif
    }
    
    void Gyro_getADC () {
      i2c_getSixRawADC(MPU6050_ADDRESS, 0x43);
      GYRO_ORIENTATION( ((rawADC[0]<<8) | rawADC[1])/4 , // range: +/- 8192; +/- 2000 deg/sec
    	            ((rawADC[2]<<8) | rawADC[3])/4 ,
    	            ((rawADC[4]<<8) | rawADC[5])/4 );
      GYRO_Common();
    }
    
    void ACC_init () {
      i2c_writeReg(MPU6050_ADDRESS, 0x1C, 0x10);             //ACCEL_CONFIG  -- AFS_SEL=2 (Full Scale = +/-8G)  ; ACCELL_HPF=0   //note something is wrong in the spec.
      //note: something seems to be wrong in the spec here. With AFS=2 1G = 4096 but according to my measurement: 1G=2048 (and 2048/8 = 256)
      //confirmed here: http://www.multiwii.com/forum/viewtopic.php?f=8&t=1080&start=10#p7480
      #if defined(FREEIMUv04)
        acc_1G = 255;
      #else
        acc_1G = 512;
      #endif
    
      #if defined(MPU6050_I2C_AUX_MASTER)
        //at this stage, the MAG is configured via the original MAG init function in I2C bypass mode
        //now we configure MPU as a I2C Master device to handle the MAG via the I2C AUX port (done here for HMC5883)
        i2c_writeReg(MPU6050_ADDRESS, 0x6A, 0b00100000);       //USER_CTRL     -- DMP_EN=0 ; FIFO_EN=0 ; I2C_MST_EN=1 (I2C master mode) ; I2C_IF_DIS=0 ; FIFO_RESET=0 ; I2C_MST_RESET=0 ; SIG_COND_RESET=0
        i2c_writeReg(MPU6050_ADDRESS, 0x37, 0x00);             //INT_PIN_CFG   -- INT_LEVEL=0 ; INT_OPEN=0 ; LATCH_INT_EN=0 ; INT_RD_CLEAR=0 ; FSYNC_INT_LEVEL=0 ; FSYNC_INT_EN=0 ; I2C_BYPASS_EN=0 ; CLKOUT_EN=0
        i2c_writeReg(MPU6050_ADDRESS, 0x24, 0x0D);             //I2C_MST_CTRL  -- MULT_MST_EN=0 ; WAIT_FOR_ES=0 ; SLV_3_FIFO_EN=0 ; I2C_MST_P_NSR=0 ; I2C_MST_CLK=13 (I2C slave speed bus = 400kHz)
        i2c_writeReg(MPU6050_ADDRESS, 0x25, 0x80|MAG_ADDRESS);//I2C_SLV0_ADDR -- I2C_SLV4_RW=1 (read operation) ; I2C_SLV4_ADDR=MAG_ADDRESS
        i2c_writeReg(MPU6050_ADDRESS, 0x26, MAG_DATA_REGISTER);//I2C_SLV0_REG  -- 6 data bytes of MAG are stored in 6 registers. First register address is MAG_DATA_REGISTER
        i2c_writeReg(MPU6050_ADDRESS, 0x27, 0x86);             //I2C_SLV0_CTRL -- I2C_SLV0_EN=1 ; I2C_SLV0_BYTE_SW=0 ; I2C_SLV0_REG_DIS=0 ; I2C_SLV0_GRP=0 ; I2C_SLV0_LEN=3 (3x2 bytes)
      #endif
    }
    
    void ACC_getADC () {
      i2c_getSixRawADC(MPU6050_ADDRESS, 0x3B);
      ACC_ORIENTATION( ((rawADC[0]<<8) | rawADC[1])/8 ,
                       ((rawADC[2]<<8) | rawADC[3])/8 ,
                       ((rawADC[4]<<8) | rawADC[5])/8 );
      ACC_Common();
    }
    GYRO_Common и ACC_Common ф-ции переделать под себя будет чуть геморойнее - они используют больше переменных из других файлов проэкта

  39. #6316

    Регистрация
    04.08.2012
    Адрес
    Бруклин, США
    Возраст
    45
    Сообщений
    435
    Наверное я изначально неправильно сформулировал задачу. Мне не столько нужно повысить именно СКОРОСТЬ сэмплирования, сколько иметь возможность вставить куски кода по управлению степпером в самые "долгоиграющие" циклы. Проблема состояла в том чтобы найти эти самые циклы (особенно там, где считываются данные с MPU6050) и наглядно разместить их в своем скетче. кроме того, желательно было не тратить время на обработку лишних данных, касающихся оси z.

    Вот что у меня пока получилось:


    Код:
     
    .....
    //получаем x,y с гир и акселей
    getMotion4my(&ax, &ay, &gx, &gy);
    .....
    void getMotion4my(int16_t* ax, int16_t* ay, int16_t* gx, int16_t* gy) {
     
    int8_t count = 0;
    uint16_t timeout = 1000;
    uint8_t data[12];
    Wire.beginTransmission(0x68); 
    Wire.write(0x3B); 
    Wire.endTransmission();
    Wire.beginTransmission(0x68);
    Wire.requestFrom(0x68, 12);
    uint32_t t1 = millis();
    for (; Wire.available() && (timeout == 0 || millis() - t1 < timeout); count++) {
    data[count] = Wire.read();
     
    //здесь попробую воткнуть управление степперами
     
    }
    if (timeout > 0 && millis() - t1 >= timeout && count < 12) count = -1; // timeout
    Wire.endTransmission();
    *ax = (((int16_t)data[0]) << 8) | data[1];
    *ay = (((int16_t)data[2]) << 8) | data[3];
    *gx = (((int16_t)data[8]) << 8) | data[9];
    *gy = (((int16_t)data[10]) << 8) | data[11]; 
    }
    Скорость считки в голом виде примерно 580hz. Собственно, если заработает, мне этого будет достаточно...

  40. #6317

    Регистрация
    07.04.2012
    Адрес
    Брянск
    Возраст
    29
    Сообщений
    1,675
    Записей в дневнике
    6
    слушай... а зачем тебе в код втыкать? почему таймеры не хочеш задействовать с нужной частотой, по таймеру прерывание с циклом управления ШД, а потом меняй частоту таймера/отрубай в тех местах где тебе нужно? для примера управление моторками именно так и осуществлено - на таймере генерим ШИМ а когда нужно меняем значение

    П.С. немного не в тему но - http://kit-e.ru/articles/micro/2008_5_80.php тут есть про AWeX технологию у хмег
    Последний раз редактировалось mataor; 16.10.2012 в 13:52.

  41. #6318

    Регистрация
    04.08.2012
    Адрес
    Бруклин, США
    Возраст
    45
    Сообщений
    435
    слушай... а зачем тебе в код втыкать?
    Просто любопытно. Да и тренировка головы. Тоже своего рода моделирование. А то все вокруг меня все давно программисты, а я как будто только с дерева слез

    почему таймеры не хочеш задействовать с нужной частотой, по таймеру прерывание с циклом управления ШД, а потом меняй частоту таймера/отрубай в тех местах где тебе нужно?
    Не не хочу, а просто пока не сообразил Так и попробую сделать. Вообще на прерывания хотел подвесить читку PWM, но наверное можно и то и другое

  42. #6319

    Регистрация
    07.04.2012
    Адрес
    Брянск
    Возраст
    29
    Сообщений
    1,675
    Записей в дневнике
    6
    Цитата Сообщение от Gene Посмотреть сообщение
    Вообще на прерывания хотел подвесить читку PWM, но наверное можно и то и другое
    вообщет прерывания бывают разных несвязанных типов - от входа, от таймера, от уарта, от TWI (i2c) и проч... в данном случае ты путаеш прерывания со входа с прерыванием по переполнению таймера.
    Главное не забывать, что код в прерывании должен быть минимальным и выполнятся макс быстро, чтобы не тормозить прочие прерывания (например в ардуино подсчет времени осуществляется тоже с помощью 0-го таймера и состоит из инкременирования переменной)

  43. #6320

    Регистрация
    04.08.2012
    Адрес
    Бруклин, США
    Возраст
    45
    Сообщений
    435
    вообщет прерывания бывают разных несвязанных типов - от входа, от таймера, от уарта, от TWI (i2c) и проч... в данном случае ты путаеш прерывания со входа с прерыванием по переполнению таймера.
    Я их не путаю, я просто с ними незнаком. Вообще все это железо для меня новость. Что ты хочешь, я только неделю назад первую ардуину купил

    Главное не забывать, что код в прерывании должен быть минимальным и выполнятся макс быстро
    Это я к счастью помню! (еще с тех древних времен, когда писал на ассемблере под Z80) Если удастся задать прерывание с промежутком в миллисекунду или меньше, то не придется трогать шаг степпера, и весь код будет в три строки с целыми числами.

+ Ответить в теме

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения