Телеметрия (часть 1)
на AREF ничего не кидал, а надо было? Кинул напряжение со стабилизатора на AVCC и землю на AGND и кондёром их соединил чтобы помехи скинуть. Вот думою правильно сделал или нет 😃 , я ведь только учусь.
Частоту АЦП лучше не завышать без необходимости, в Атмеговском даташите написано, что чем больше частота, тем больше шумов. У меня частота равна базовым 16 МГц делить на 128 по-моему. АЦП в 10-битном режиме используется, каждый канал АЦП опрашивается с 64-кратным оверсэмплингом, и поверх этого еще для 1-го и 2-го канала, где висят датчики давления для скорости-высоты, делается скользящее окно шириной 8 пачек. Сейчас 8, а в готовых прошивках в блоге было 16.
Да, AREF я задал равным AVCC, т.е. 5 в с линейного стабилизатора.
Сейчас только вот с америкосии вернулся, временной сдвиг из-за часовых поясов в норму придет, добью всё то, что планировал - осталось только анализ PPM сделать.
на AREF ничего не кидал, а надо было? Кинул напряжение со стабилизатора на AVCC и землю на AGND и кондёром их соединил чтобы помехи скинуть. Вот думою правильно сделал или нет 😃 , я ведь только учусь.
Ref, это опорное напряжение. Относительно его АЦП и мериет.
У АВР доступно 3 источника, выбираемых программно - внутренний на 2,56 вольта, внешний, подключённый к ARef и Avcc. В любом из трёх случаев кондёр на 0,1 мкФ от лапки Aref до земли должен иметь место быть.
Разумеется, ИОНы можно менять в процессе работы из программы, изменяя конфигурационные биты.
Если вы обмеряете датчики давления, которые ratiometric по своей национальности, то следует запитать их от того же напряжения, что идёт на AVcc и в качестве ИОН тоже установить AVcc.
А вот мерить напряжения аккумов лучше относительно внутреннего ИОНа, предварительно согнав диапазон напряжений аккумулятора к входному диапазону АЦП (0…2,56 в данном случае).
А вообще, почти всё по АЦП тут: dikoy44.narod.ru/projects/Beginners.htm
Начиная с пункта 2.
Сейчас только вот с америкосии вернулся, временной сдвиг из-за часовых поясов в норму придет, добью всё то, что планировал - осталось только анализ PPM сделать.
Какого рода анализ? Если перехват, то уже сделано. Правда, по внешним INT. Для м8 предпочтительней PCINT использовать ИМХО, хоть и более заморочно.
Спасибо за ответы, попробую как Вы написали. Только один вопрос касающийся 10-битным режимом АЦП, чтото не могу найти этого в датащите, как я понял это зависит от способа считывания регистров ADCL и ADCH, но я работаю через codeVisionAVR и там помошник генерит код и он упорно предлагает использовать 2байтный регистр ADCW. Как лучше получать данные с АЦП? Плюс вычитал что рекомендуют брать несколько показаний и потом усреднять их.
>Если перехват, то уже сделано. Правда, по внешним INT.
Я не могу использовать прерывания для этого. Во-первых, оба внешних уже заняты сигналами с лм1881, а во-вторых, обработка прерывания при его возникновении в произвольный момент поломает вывод на экран.
По поводу внутреннего опорного источника, то он у этмела от 2.3 до 2.7 вольта с неизвестным дрейфом.
Использовать его как-то можно, если только откалибровать.
Проще всего по встроенному термометру.
По делу.
- Заказал и частично стал приходить вертолет раптор 550 . Жена сказала, что мелкий ребенок должен под моим руководством сделать ЕГО! Чтоб у него было дело.
- Она же выяснила, что вешают фотоаппарат и фотографируют. Так что нарисовалась еще задача приделывания фотоаппарата. Она тут любит фотографировать.
- Прочитав Ваши тут дела про телеметрию ВРОДЕ как понятно, что надо сделать .
- платку приема сигнала с приемника
— прием и обработка 7 шим сигналов
— выдача этих сигналов через изоляторы на рулевые машинки и двигатель
— приделывание всяческих датчиков, которые необходимы, а также кнопок, ручек и светодиодов
— вставление в видеосигнал получившейся телеметрической информации
— сопряжение с другими платками - платку, которая считывает информацию и управляет мощным двигателем. Самая простая платка, единственно датчик тока 150 А.
- сопряжение с управленим фотоаппарата , тут самое сложное приделать механику хотя бы в одном направлении…
- Тут тов. из Новомосковска хочет поработать и организовать автоматическое пилотирование ( если это кому-то надо )
- эти платки можно сделать как слэйв и пусть там управляет как хочет (например, разобрать КПК и приделать от него последовательный канал - останется написать приложение ).
Ув. бойцы ЛЕТАТЕЛИ!!
Нельзя ли высказаться по всем этим платкам, как вы это понимаете, а Ваш покорный слуга готов их понаделать, естественно согласовав с Вами, и довести их совместно до рабочего состояния. Тут упоминали каких-то папарациев, т.е. типа этого. И волки сыты и овцы целы.
Всё что посоветовали изучил но чтото так и не понял как повысить точность, прилагаю куски кода
так настроено
#define ADC_VREF_TYPE 0xC0
....
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84;
так я получаю данные с порта АЦП
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
здесь обрабатываю полученные данные. по сути получаю некую цифру типа 43, естественно умножаю на 10 и получаю 430 тоесть при выводе 4.30, а хочется до сотых чтото типо 4.35, но этой пятерки неоткуда взяться 😦
val_bat = read_adc(3);
totalvolt = val_bat * 10;
volt1_1=floor(totalvolt/100);
volt1_2=floor((totalvolt/10)-((floor(totalvolt/100)*10)));
volt1_3=floor((totalvolt)-((floor(totalvolt/10)*10)));
Плюс вычитал что рекомендуют брать несколько показаний и потом усреднять их.
Лучше таки скользящее среднее. Как сделать, я писал выше.
>Если перехват, то уже сделано. Правда, по внешним INT.
Я не могу использовать прерывания для этого. Во-первых, оба внешних уже заняты сигналами с лм1881, а во-вторых, обработка прерывания при его возникновении в произвольный момент поломает вывод на экран.
У PCINT приоритет сильно меньше INTx, при одновременном ударе первым обработается INT. Во вторых, в PCINT можно только запоминать значение таймера, ставить флаг, а обрабатывать в основном цикле - так у меня сделано. Только я ещё перенастраиваю INT на подъём/спад, чтобы мерить периоды единичек. В PCINT придётся ещё ловить состояние на лапе, но на асме это можно написать весьма компактно - 16 тиков на вход/выход и 20-30 тиков на обработку. В 100 мкС уложиться запросто можно.
Кузнецов
По поводу внутреннего опорного источника, то он у этмела от 2.3 до 2.7 вольта с неизвестным дрейфом.
Для 8-10 бит его вполне достаочно, напряжения мерить. А датчики - они мосты. Для их обмера ИОН даже вреден.
Использовать его как-то можно, если только откалибровать.
Проще всего по встроенному термометру.
И где в атмелах термометр? 😃
- Прочитав Ваши тут дела про телеметрию ВРОДЕ как понятно, что надо сделать .
- платку приема сигнала с приемника
Только если делать автопилот.
— прием и обработка 7 шим сигналов
А зачем 7?..
— выдача этих сигналов через изоляторы на рулевые машинки и двигатель
Изолятор не нужен, атмел и так может.
- Тут тов. из Новомосковска хочет поработать и организовать автоматическое пилотирование ( если это кому-то надо )
Как я понял - не надо… А так, вот ссылка на то, что наваяно пока: www.narod.ru/guestbook/?owner=13456664
Если есть желание, закажите пирометры (нужна кредитка) и контроллер, а я допишу софт. Тестить у меня нет времени и возможности (программисту проще филонить на работе программируя, чем паяя 😒 а дома других дел достаточно).
Всё что посоветовали изучил но чтото так и не понял как повысить точность, прилагаю куски кода
Камень то какой хоть?
Для м8:
// ADC initialization
// ADC Clock frequency: 125,000 kHz
// ADC Voltage Reference: Int., cap. on AREF
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x87;
// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
Ключевая фраза: ADC Voltage Reference: Int., cap. on AREF
Возвращает код от 0 до 1023. В вольтЫ переводится последством деления полного входного диапазона в в вольтах на текущий код. А входной диапазон равен опорному напряжению.
То есть, если пользовать внутренний ИОН, входной диапазон будет:
2,56/1023 = N = разрешение АЦП в вольтах.
N*code = те вольтЫ, что у нас на входе.
Очевидно, что чем уже входной диапазон, тем выше разрешение АЦП в этом диапазоне. Не забываем, что 1-2 младших разряда будут шуметь, то есть цифирки будут дрожать на величину одной-двух N.
Пример: от АЦП получили код 812 (оно же 1100101100 ).
Пересчитываем в вольты: (2,56/1023)*812=2,031 V плюс-минус 0,005 V.
По этому, обычно, числа округляют до сотых, чтобы не смотреть на бесполезно пляшушие тысячные и т.д.
Посоветуйте где можно купить датчики давления, чтото найти не могу, в наличие есть в чип и дипе но какието MPXA6115A6U PBF, тоесть с PBF и цена у них сразу в 2 раза дороже 😵
Посоветуйте где можно купить датчики давления, чтото найти не могу, в наличие есть в чип и дипе но какието MPXA6115A6U PBF, тоесть с PBF и цена у них сразу в 2 раза дороже 😵
это безплюмбумные.
фух, разобрался с напряжометром. Дело было не в бабине, просто я тук, тук. Вобщем инструмент в программе codeVisionAVR который генерит предварительный код вставил мне блок который устанавливает внутренне сопротивление на DDRС, соответственно показания резко уменьшились, долго искал я где грабли, но всётаки нашел 😛 . А вообще люблю такие косяки, помогают углубится в изучение доков 😁 .
Народ, опишите плиз как вы подключаете приёмник к телеметрии. Сделал как всё немцы описали www.mikrokopter.de/ucwiki/RX-7-SYNTH-IPD Проверил вольтметром работает. Подрубил к входу АЦП, а он там как начел скакать, выводил чисто значения регистра, скакал от 32 до 665. Как понял что там идёт сигнал, просто его мощность меняется. Что посоветуете сделать?
Народ, что скажете про данный девайс? www.st.com/stonline/products/…/10221.pdf . Незнаю, не работал с такими и подводных камней не знаю, но так логически обдумав понимаю что можно как просто линию ускорения рисовать, так и попытаться линию горизонта вывести.
Народ, что скажете про данный девайс? www.st.com/stonline/products/…/10221.pdf . Незнаю, не работал с такими и подводных камней не знаю, но так логически обдумав понимаю что можно как просто линию ускорения рисовать, так и попытаться линию горизонта вывести.
Линия горизонта акселем не выведется. Как ни крути… Гироскопы нужны, и полноценная БСО с трёхэтажной математикой.
Наконец-то сделал захват PPM сигнала.
Разрешение используемого для этого таймера составляет 0.5 мкс, то есть, в стандартный диапазон PPM 1…2 мс укладывается 2000 отсчетов.
Взял приемник ИГВА для опытов, запитав его пятью вольтами от линейного стабилизатора платы телеметрии.
Итог:
В идеальных условиях длительность канального импульса в среднем положении ручки составляет 1504 мкс, при этом величина шума составляет 1…2 мкс.
Отхожу на 5 метров со сложенной антенной передатчика, шумы растут до 50…100 мкс.
Отхожу еще на 5 метров - шумы на уровне 500…1000 мкс. Помещение у нас шумное в плане радиопомех, так что далеко уходить не надо 😃
В общем, категорический зачот. Спасибо РД00 за идею с ICP. Математику я уже сам без проблем сделаю 😃
Изменений в плате телеметрии не требуется. Всё, что нужно, это подключить стандартный сервовый провод к плате телеметрии в 2 точках - земля и сигнал PPM. Обновление в блоге выложу как только закончу с математикой.
smalltim,
некие проблемы с ЛС (вначале ушло полсообщения, затем кончился ящик на вашей стороне). Там было написано : а) за идею с ICP спаибо явно не мне, поскольку я не знаю, что это такое 😃, б) да, это обычный КМОПовский вход, и беспокоиться о номинале резистора нужно, только если напряжение BEC превышает напряжение питания МК более чем на 0.5 В. В любом случае единицы кОм - нормальный выбор.
Вопрос знатокам РРМ: канальные импульсы идут подряд, по разным каналам, так? Или ШИМ импульсы возникают на всех выходах приёмника одновременно?
То бишь, условно, так:
_/\_/\_ к1
_/\_/\_ к2
_/\_/\_ к3
Или так:
_/\_/\_ к1
\_/\_/\_ к2
/\_/\_/\_ к3
??
Нет слов. тов. из Новомосковска.
“Кумпель” для чего нужен?, или, как видится , остались одни “ВОЗВРАТЫ КОДОВ”?
1.Аппаратура радиуправления где??? НА ЛЕТАЮЩЕМ объекте, далеко и мало электричества.
2. Ясно, что используется ОДИН радиоканал, а там как можно меньше деталей.
3. Значит и проводок от радиоприемника всего ОДИН!!
4. По одному проводочку РАЗУМНОЕ число каналов управления получается на ОДНОЙ микросхеме за 60 копеек , называется - СЧЕТЧИК с дешифратором 561ие?? какая-то и RC-цепочке для сброса оного счетчика и ВСЕ!!
Далее вопрос!
Как же на выходе этого счетчика расположены “ВОЗВРАТЫ КОДОВ PCM управления ШИМ канала”
------
так:
_/\_/\_ к1
_/\_/\_ к2
_/\_/\_ к3
Или так:
_/\_/\_ к1
\_/\_/\_ к2
/\_/\_/\_ к3
------
Второй вариант.
Есть же статьи тут же, рядом:
www.rcdesign.ru/articles/radio/ppm_pcm
www.rcdesign.ru/articles/radio/tx_intro
www.rcdesign.ru/…/micro_receiver_for_parkflyer
Да, вычистил ящик для ЛС, прошу прощения у тех, кому не удалось отписать в ЛС.
_/\_/\_ к1
\_/\_/\_ к2
/\_/\_/\_ к3
------Второй вариант.
Угу, спасибо. Статьи читал, от сюда и вопросы возникли. В PCM, говорят, все ШИМы идут синхронно. Типа, есть и РРМ такого рода. Не на счётчике 561 серии (слава Богу, что за рубежом давно забыли, что это такое), а на МК, с перехватом длины сообщения в прерывании и генерацией синхронных посылок…
Вот и уточнил.
А задача та же - распихать прерывания.
Кстати, вопрос ко всем сочувствующим.
Пирометры работают на равность засветок, сооттветственно при полёте “брюхом вверх” с т.зрения автопилота всё будет ништяк 😃
То есть нужен ГРУБЫЙ датчик вертикали.
Можно поставить акселерометр и смотреть на вектор g. Это логично, но дорого и сложно (не каждый припаяет BGA корпус акселя). Посему пока остановился на тупом “журавлике” из контактной проволочки и грузика. При горизонтальном полёте контакт разомкнут, при перевёрнутом - замкнут. Одно плохо - если тряханёт, датчик может замкнуться. Конечно, с этим можно бороться цифровыми методами, но кослыть обеспечен. Контакт, который нечувствителен к тряске, грезится громоздким и тяжёлым…
Если есть идеи простого датчика положения, прошу в студию.
[quote=Dikoy;773263]
Пирометры работают на равность засветок, сооттветственно при полёте “брюхом вверх” с т.зрения автопилота всё будет ништяк 😃
Тот, кто это Вам сказал- очень злой и глупый: автопилот на пирометрах вытаскивает самолет из любого положения- достаточно бросить ручки и дать ему 100% свободу 😃
Так что “проволочка с контактом”- точно не нужна.