Телеметрия (часть 1)
Фильтр там - плоская пластина, углы преломления не роляют.
А вот у меня на Изике нет элеронов, я хочу автопилот с виражами 😃
Ну, вы, батенька, слишком много кушать 😃 ИМХО сначала просто бы горизонт удержать…
Про фильтр - я непного не о том. fizika.asvu.ru/page.php?id=100
Возьмем две прямоугольные пластинки из турмалина, вырезанные так, что одна из сторон прямоугольника совпадает с направлением оптической оси кристалла, и наложим их так, чтобы их оси совпадали по направлению. Пропустим через сложенную пару пластинок узкий пучок света от фонаря. Начнем поворачивать одну из пластинок вокруг пучка, оставляя другую неподвижной. Мы обнаружим, что след пучка ослабевает, и когда пластинка повернется на 90% он совсем исчезнет. При дальнейшем повороте пластинки проходящий пучок вновь начнет усиливаться и дойдет до прежней интенсивности, когда пластинка повернется на 180°.
Впрочем, одна пластинка такой эффект не даст, то есть нелинейность засветки врдли является следствием прохождения кристаллической решётки.
Гуру, а как лучше организовать опрос магнитометров?
Сет-ресет-меряем?
Или сет-меряем-ресет-меряем и Vout=(Vset-Vreset)/2 ?С какой частотой достаточно будет делать сет-ресет? 1 Гц? 0.1Гц? Один раз после включения?
Отправил исходник.
Правильно “Или сет-меряем-ресет-меряем и Vout=(Vset-Vreset)/2”, причём на один канал, причём постоянно.
Опрашивать можно как угодно часто, главное чтобы магнитометр не перегрелся - токи SET/reset там нехилые… У меня стоит 4 раза в секунду. Когда автопилот пеглючило, было около 100 раз в секунду. Жужжал как шмель, но выжил 😃
Вообще, он забавно тикает при разряде.
Можно конечно SET/RESET делать раз в секунду, а мерить чаще, но ничего кроме некой экономии электричества не получим…
Ну, там все не так просто: www.nxp.com/acrobat_download/applicationnotes/AN00022_COMPASS.pdf
Это KMZ, я от них отказался - магнит срывало 😃
А у Тимофея HMC, насколько я знаю…
HMC у меня, HMC…
Только это, господа, натуральное *лядство. Рисую схему, развожу плату. Интересуюсь корпусами датчиков. И что?
Все чипы в паябельных корпусах стоят раза в 2-3 дороже, чем какой-нибудь *лядский LCC16 размером 3х3мм. И как это прикажете паять?
Склоняюсь к варианту 3 отдельных датчиков в SIP8 корпусах. Пусть будет дороже, но зато хотя бы осуществимо.
Тим, ты ссылочку дай на дешевые, но мелкие датчики, а мы поглядим.
Может нараз и запаяем. 😁
Вот вся линейка:
www.ssec.honeywell.com/magnetic/products.html
Вот документ по серии 105x - она в России самая дешевая:
www.ssec.honeywell.com/magnetic/…/HMC105X.pdf
У двухосевого 1052 сравните корпус 10-pin MSOP и 16-pin LCC на странице 5.
И посмотрите 1-осевой 1051Z в корпусе 8-pin SIP на странице 4, который я собираюсь использовать, ибо 10-pin MSOP нигде на складах нет (cм efind.ru), а 16-pin LCC - кошмар.
Тим! Если у корпусов 16LCC сбоку есть хоть небольшая площадка от вывода который на брюхе, то припаять можно. Если нет, то тогда только феном.
Пока вот что получается:
Стабилизатор питания +5В еще не прикручен, память еще не прикручена, питание памяти +3.3В тоже не прикручено.
Еще надо 2 кнопочки, 2 светодиодика. Ну и еще вход GPS да разъем SPI для общения с платой телеметрии.
Сделал схему немного более читаемой:
Ой, в цепи ресета фигня нарисована, не обращайте внимания. Отосплюсь - поправлю, будет как положено и еще плюс кнопочка 😃
По поводу того, как привязан PPM, входы с пирометровых голов и с магнитометров - поругайте, если не лень 😃
А мне надо очень хорошо подумать, как строить программу чтобы корректно выходной PPM формировать, без задержек и прочая, а то сервы будут дрожать. Раньше я почему-то об этом не подумал.
А у Атмег прерывания реентерабельные? Т.е. что будет, если стукнет прерывание пока я обрабатываю другое прерывание? Подозреваю, что ничего страшного не произойдет, но все тайминги на моей совести 😦
У двухосевого 1052 сравните корпус 10-pin MSOP и 16-pin LCC на странице 5.
И посмотрите 1-осевой 1051Z в корпусе 8-pin SIP на странице 4, который я собираюсь использовать, ибо 10-pin MSOP нигде на складах нет (cм efind.ru), а 16-pin LCC - кошмар.
Я паял MSOP, тоже не подарок. А у LCC есть выводы сбоку.
По поводу того, как привязан PPM, входы с пирометровых голов и с магнитометров - поругайте, если не лень 😃
А мне надо очень хорошо подумать, как строить программу чтобы корректно выходной PPM формировать, без задержек и прочая, а то сервы будут дрожать. Раньше я почему-то об этом не подумал.
А у Атмег прерывания реентерабельные? Т.е. что будет, если стукнет прерывание пока я обрабатываю другое прерывание? Подозреваю, что ничего страшного не произойдет, но все тайминги на моей совести 😦
Я вот одного не пойму - ну если всё равно городить внешний ОУ, почему сразу не поставить нормальный АЦП? 😃 Тот же корпус, но нет кучи пассива с пол процентными допусками, который ещё и отстраивать надо. Нету кучи математики для вычисления курса из того г-на, которое получится после усиления ОУ и оцифровкой меговским АЦП. Ну нафига себе проблемы то создавать? 😃
Видимо, тяга к аналогу, это как свинка. Надо один раз переболеть, чтобы потом на всю жизнь иммунитет…
Кстати, купить АЦП ничуть не сложнее, чем этот ОУ.
Прерывания в меге встают в очередь, по приоритетам. Внутри прерывания ничего не происходит, но после выхода из прерывания чип выполнит 1 команду и снова уйдёт в прерывание. Самое приоритетное в очереди.
Таблица приоритетов есть в ДШ.
Проблем с генерацией не будет - регистры таймеров с двойной буферезацией. То есть пока генерится один период ШИм, обновлять регистр можно как хош часто. В качестве нового значения будет принято то, которое было в регистре в момент окончания периода генерации.
Чёта я схему не пойму. А ШИМы там что, не аппаратные? 😃
А у Атмег прерывания реентерабельные? Т.е. что будет, если стукнет прерывание пока я обрабатываю другое прерывание? Подозреваю, что ничего страшного не произойдет, но все тайминги на моей совести 😦
Для нестинга (если Вы это имеете ввиду) у Атмег достаточно после входа в процедуру обработки прерывания установить флаг глобального прерывания (тем самым подтвердить прерывание). В следующем командном цикле может быть принято и обработано следующее прерывание (внутри текущего прерывания).
а, черт!..Полностью согласен! Про нормальный АЦП и по прерываниям. Походу PWM программный-дрожать будет в зависимости от сложности остального софта(подключал в свое время аналоговый стрелочный вариометр к 8051 без PWM- все вылизал, а стрелка дрожит, как осиновый листок). Не связывайся- много бестолкового секса будет 😃 . В приемнике можно- там ниче нет больше. А про выбор процессора, я лучше помолчу…(LPC21… 6 асинхронных каналов, например)…молчу 😵
PWM аппаратный будет, это я протупил просто. Схемку перерисую.
Насчет нормального ацп - мне меговского хватает.
Гуру, не будет наглостью попросить ссылок на доки, где описано, как правильно общаться по SPI между мегами?
Интересует не только передача данных, но и прошивка младшенькой меги силами старшей.
Ну и еще, до кучи, у старшенькой меги на том же SPI внешняя память должна висеть. Как это разрулить?
Раз набрался смелости, вот еще вопрос: а не сможет ли кто-нибудь за разумные деньги в несколько дней сделать пару печатных плат?
Заказывать на заводе - долго и дорого, да и надо-то пока только дорожки с одной стороны и никаких отверстий. Паять всё соплями к at90usbkey - неохота. И без этого есть что на нем поотлаживать 😃
Ну вот, грабли! Вилы! 😮 Ну вот, будем протокол придумывать! SPI- сдвиговый рег. обычный. В данной апп. OSD- мастер, вывод делать в кадровом прерывании, например, дополнительное прерывание вводить нельзя- будут строки выпадать, или сдвигаться, из- за очереди прерываний, а так, все ручками… Хотите ARINC-4xx освоить в “свободное” время 😛 ?? Для прошивки Мег, использую мегалоад- ниче удобнее не пробовал- автоопределение, по сбросу. Можно переписать на любой физ. интерфейс, а основную делать прозрачной, во время прошивки. Но, ARM7 имеют на борту заводской лоадер и оригинальные процедуры входа… SAM7S- USBloader, и всего 48 пинов! О чем еще мечтать?! вот под что плату нада делать, а не возиться с протоколом и читать всякую ересь 😉 !
Atmel’s AT91SAM7S is a series of low pincount Flash microcontrollers based on the 32-bit ARM
RISC processor. It features a high-speed Flash and an SRAM, a large set of peripherals, including
a USB 2.0 device (except for the AT91SAM7S32 and AT91SAM7S16), and a complete set
of system functions minimizing the number of external components. The device is an ideal
migration path for 8-bit microcontroller users looking for additional performance and extended
memory.
Собственная софтинка для прошивки at90usb128 со штатным бутлоадером через USB у меня уже давно готова. Пересылка данных по USB меге и обратно готова. Не быстро правда, всего 32кБ/сек, но для моих нужд хватит. 2 МБ полетных данных с флеша сольется в компук за минуту.
Нужно только вот дополнительно уметь прошивать мегу8 через SPI силами at90usb128, подключенной к USB. Для удобства обновления прошивок платы телеметрии. Ну да сам разберусь, спасибо.
Количество граблей и прочего шума в теме зашкаливает, теперь буду писать в тему по минимуму.
Если кто-то сможет через недельку помочь с парой опытных экземпляров печатки, не забесплатно, конечно - стукнитесь, пожалуйста, в личку или в почту!
Гуру, не будет наглостью попросить ссылок на доки, где описано, как правильно общаться по SPI между мегами?
Интересует не только передача данных, но и прошивка младшенькой меги силами старшей.
Ну и еще, до кучи, у старшенькой меги на том же SPI внешняя память должна висеть. Как это разрулить?
- Ссылок не дам (atmel.com 😃 ), но могу дать свои рабочие исходники обмена между мегами на C.
- Прошивку ведомой меги силами главной не делал, т.к. у меня в ведомых мегах весьма простые программы сбора данных, которые достаточно было отладить один раз, все навороты в главной.
- С внешней памятью и т.д. на том же SPI никаких проблем, просто выбираешь с кем надо обмениваться сигналами SS и все. Иногда приходится дополнительно перенастраивать CPOL и CPHA.
- Не пробуй сэкономить и отказаться от SS, отличный способ создать себе массу проблем. Мне пришлось потратить кучу времени чтобы данные передавались надежно.
Для нестинга (если Вы это имеете ввиду) у Атмег достаточно после входа в процедуру обработки прерывания установить флаг глобального прерывания (тем самым подтвердить прерывание). В следующем командном цикле может быть принято и обработано следующее прерывание (внутри текущего прерывания).
Тока выйдя из следующего прерывания мы окажемся в текущем прерывании, а дальше куда?
Надо писать код, сохраняюший вектор возврата. А это есть изврат. Гораздо проще написать грамотные прерывания, максимально короткие, чтобы всё успевало выполняться.
Гуру, не будет наглостью попросить ссылок на доки, где описано, как правильно общаться по SPI между мегами?
Интересует не только передача данных, но и прошивка младшенькой меги силами старшей.
Ну и еще, до кучи, у старшенькой меги на том же SPI внешняя память должна висеть. Как это разрулить?Раз набрался смелости, вот еще вопрос: а не сможет ли кто-нибудь за разумные деньги в несколько дней сделать пару печатных плат?
Заказывать на заводе - долго и дорого, да и надо-то пока только дорожки с одной стороны и никаких отверстий. Паять всё соплями к at90usbkey - неохота. И без этого есть что на нем поотлаживать 😃
Прошивка младшей описана в ДШ, в разделе memory programming. А как правильно общаться… Да как хочется, так и общайся 😃 Я для себя выдумал такой протокол:
#[addr][sender][lenght][data]
Адрес получателя, отправителя, длина поля дата и данные. Работает на любом протоколе, в том числе на И2Ц.
Когда чип не выбран лапкой CS, он по спецификации должен держать свои лапы в Z. При программиовании и ресете лапы МК также переходят в Z, по этому следует предусмотреть подтяжку, чтобы память не подгаживала на шину, когда рулящий чип в ауте.
Платы могу сделать бесплатно, вот как доставить? Возможно, на след. неделе буду в Москве, но не факт… Почта недели две идёт.
ПС. Я таки победил пирометры! 😛 Работают!!! Все 4, горизонт видят, всё мериют и вообще работают супер. Пока испытывали только на шесте, но на неделе полетим и запишем в полёте. Но даже на шесте по пирометрам можно было выровнять потожение шеста так, что проверка отвесом показывала 100% совпадение.
Ну вот. С Днём Рождения, блин! 😃 Может сам на себя посмотреть:
С детства роботов люблю!
С “демо” данными:
Что- то типа: “В ШТОПОРЕ”, с маркером автопилота…
Сорри, нет фото-камеры…(OSD 72x192 слева скорость, в центре- курс, справа вертикалка, внизу- скольжение+ контроль скольжения +8 aux индикаторов-%) Ну и не сделать толком больше на Меге ниче- все завязано на строчном прерывании… 😃 ~20kb -opt 3. Про обмен датой:
Самое простое- обмен по SPI. Скажем 32 байта туда<->сюда +1 sync, по одному в конце строчного прерывания- мастером!
Надо писать код, сохраняюший вектор возврата. А это есть изврат.
Всегда считал что он автоматом сохраняется в стеке 😃 а затем извлекается оттуда командой RETI. Просто в стеке окажется два вектора возврата, но и команд RETI будет выполнено две (может и больше уровней вложенности оказаться)
Проверено, работает. Но редко реально нужно.