Телеметрия (часть 1)

smalltim
SGordon:

Наверно это обсуждалось в начале, но все-таки, чем можно заменить датчик высоты MPX4115 . На сайте пишут Not Recommended for New Design … ( меня это не смущает в плане повторения работающей конструкции ) Но хотелось бы из новых … Вроде бы у MPXA6115A6t1 похожие
характеристики? Или что то еще порекомендуете?

Да, насколько я понимаю, 6115 должен прекрасно заменять 4115 😃

foxfly
smalltim:

Да, насколько я понимаю, 6115 должен прекрасно заменять 4115 😃

Правильно! В марке- “115” означает предел давления.
Все остальное- тип корпуса и прочую цоколевку .

ReGet
maloii:

Спасибо за прошивку! Разобрался, в личку можно не отвечать. Но одно Но, символы большие, если взять к примеру прошивку от smalltim то всё маленькое выходит, а в данном варианте большое 😃 . Хотя может я чтото неправильно настроил в компиляторе, поделитесь 😃

Эхх, а я уже почти ответил 😃

Насколько большие? Я делал вот такие electronix.ru/forum/index.php?act=Attach&type=post…
Можете нарисовать буквы любого размера, изменяя шрифт в начале кода

maloii
ReGet:

Эхх, а я уже почти ответил 😃

Насколько большие? Я делал вот такие electronix.ru/forum/index.php?act=Attach&type=post…
Можете нарисовать буквы любого размера, изменяя шрифт в начале кода

Да, у меня такие же получаются, просто по меньще их не сделать. Из-за длины так сказать пикселя, то есть длительность одного сигнала велика получается. В прошивке от smalltim это длина в 2 раза меньще и поэтому он смог сделать буковки меньше. В прошивке smalltim я почти разобрался, он делает всё тоже самое, но из за того что там ассемблер, всё поэкономичней получается, чего в си компилятор наворотил фиг знает 😁 . Ща поразбераюсь, хочу всётаки в Си заставить всё как следует работать, а то не дело на тёте асе писать, гиморно это очень

Dikoy

Vad64
К сожалению, не получится однозначно определять положение. Представим ситуацию, когда одна ось датчика параллельна вектору магниного поля. Две другие оси будут выдавать нули. При этом получается неопределенность - можно вращать модель вокруг первой оси на 360 градусов, а выходы датчиков будут одинаковыми.

+1. Ибо во всех компасах использован акселерометр для определения истинной вертикали по вектору g. Но в полёте это не аксель, а генератор шума 😃 Надо городить полноценную БСО на гироскопах, а это задача иного уровня.

Что касается пирометров. Если на них стоят ИК фильтры на 8-14 мкм, то Солнца они не увидят.

Опять +1. Если б “заинтересесованые” граждане потрудились посмотреть даташиты, то обнаружили бы, что кремниевые ИК фильтры имеют место быть у всех пирометров. А ещё и угол обзора у них разный.
Товарищь видимо пользовал оптический автопилот, а ля PA-2. Того действительно зеркальцем сбить можно.

SGordon:

Вроде бы у MPXA6115A6t1 похожие
характеристики? Или что то еще порекомендуете?

Бери его и не парься. Хороший датчик.

maloii

Народ объясните плиз, как увеличить точность АЦП. Плавно перешел к замеру напряжения на паке и упёрся в то чно у меня шаг изменения до десятки, а я хочу до сотки, вроди и частоту настроил по максимому у АЦП и от стабилизатора напряжения подал напряг на AVCC, даже фильтрующий кондёр поставил на 47мФ перечитал датащит и уже незнаю чего ещё включить, в прошивке smalltim точность до сотых и я так же хочу, но асемблер тяжковато чтото даётся, немогу вкурить как это smalltim добился.

Dikoy
maloii:

Народ объясните плиз, как увеличить точность АЦП. Плавно перешел к замеру напряжения на паке и упёрся в то чно у меня шаг изменения до десятки, а я хочу до сотки, вроди и частоту настроил по максимому у АЦП и от стабилизатора напряжения подал напряг на AVCC, даже фильтрующий кондёр поставил на 47мФ перечитал датащит и уже незнаю чего ещё включить, в прошивке smalltim точность до сотых и я так же хочу, но асемблер тяжковато чтото даётся, немогу вкурить как это smalltim добился.

Входной диапазон АЦП равен Uref/2^n, где n - число разрядов АЦП, Uref - напряжение на входе REF.
Про него, кстати, ни слова. Там что?
И 47 мкФ ей не нужно. Ей лучше микрофарад, но керамику! Причём лучше однослойную. На крайняк - тантал.
В остальном ничего не понял - какие десятки? Какие сотки?..

А… Десятые доли чтоли? С АВРкиным АЦП лучше на этом и остановиться. До сотых оно шумит, хоть и не сильно.
АЦП надыть включить в 10 битный режим, вот и будут сотки. Частота тут непричём (если оверсамплинга не делается). Ну и опору задать хорошую. В м8 внутреннего ИОНа нет, если склероз не изменяет…

maloii

на AREF ничего не кидал, а надо было? Кинул напряжение со стабилизатора на AVCC и землю на AGND и кондёром их соединил чтобы помехи скинуть. Вот думою правильно сделал или нет 😃 , я ведь только учусь.

smalltim

Частоту АЦП лучше не завышать без необходимости, в Атмеговском даташите написано, что чем больше частота, тем больше шумов. У меня частота равна базовым 16 МГц делить на 128 по-моему. АЦП в 10-битном режиме используется, каждый канал АЦП опрашивается с 64-кратным оверсэмплингом, и поверх этого еще для 1-го и 2-го канала, где висят датчики давления для скорости-высоты, делается скользящее окно шириной 8 пачек. Сейчас 8, а в готовых прошивках в блоге было 16.

Да, AREF я задал равным AVCC, т.е. 5 в с линейного стабилизатора.

Сейчас только вот с америкосии вернулся, временной сдвиг из-за часовых поясов в норму придет, добью всё то, что планировал - осталось только анализ PPM сделать.

Dikoy
maloii:

на 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.

smalltim:

Сейчас только вот с америкосии вернулся, временной сдвиг из-за часовых поясов в норму придет, добью всё то, что планировал - осталось только анализ PPM сделать.

Какого рода анализ? Если перехват, то уже сделано. Правда, по внешним INT. Для м8 предпочтительней PCINT использовать ИМХО, хоть и более заморочно.

maloii

Спасибо за ответы, попробую как Вы написали. Только один вопрос касающийся 10-битным режимом АЦП, чтото не могу найти этого в датащите, как я понял это зависит от способа считывания регистров ADCL и ADCH, но я работаю через codeVisionAVR и там помошник генерит код и он упорно предлагает использовать 2байтный регистр ADCW. Как лучше получать данные с АЦП? Плюс вычитал что рекомендуют брать несколько показаний и потом усреднять их.

smalltim

>Если перехват, то уже сделано. Правда, по внешним INT.

Я не могу использовать прерывания для этого. Во-первых, оба внешних уже заняты сигналами с лм1881, а во-вторых, обработка прерывания при его возникновении в произвольный момент поломает вывод на экран.

Кузнецов

По поводу внутреннего опорного источника, то он у этмела от 2.3 до 2.7 вольта с неизвестным дрейфом.
Использовать его как-то можно, если только откалибровать.
Проще всего по встроенному термометру.
По делу.

  1. Заказал и частично стал приходить вертолет раптор 550 . Жена сказала, что мелкий ребенок должен под моим руководством сделать ЕГО! Чтоб у него было дело.
  2. Она же выяснила, что вешают фотоаппарат и фотографируют. Так что нарисовалась еще задача приделывания фотоаппарата. Она тут любит фотографировать.
  3. Прочитав Ваши тут дела про телеметрию ВРОДЕ как понятно, что надо сделать .
  • платку приема сигнала с приемника
    — прием и обработка 7 шим сигналов
    — выдача этих сигналов через изоляторы на рулевые машинки и двигатель
    — приделывание всяческих датчиков, которые необходимы, а также кнопок, ручек и светодиодов
    — вставление в видеосигнал получившейся телеметрической информации
    — сопряжение с другими платками
  • платку, которая считывает информацию и управляет мощным двигателем. Самая простая платка, единственно датчик тока 150 А.
  • сопряжение с управленим фотоаппарата , тут самое сложное приделать механику хотя бы в одном направлении…
  1. Тут тов. из Новомосковска хочет поработать и организовать автоматическое пилотирование ( если это кому-то надо )
  • эти платки можно сделать как слэйв и пусть там управляет как хочет (например, разобрать КПК и приделать от него последовательный канал - останется написать приложение ).
    Ув. бойцы ЛЕТАТЕЛИ!!
    Нельзя ли высказаться по всем этим платкам, как вы это понимаете, а Ваш покорный слуга готов их понаделать, естественно согласовав с Вами, и довести их совместно до рабочего состояния. Тут упоминали каких-то папарациев, т.е. типа этого. И волки сыты и овцы целы.
maloii

Всё что посоветовали изучил но чтото так и не понял как повысить точность, прилагаю куски кода

так настроено

#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)));
Dikoy
maloii:

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

Лучше таки скользящее среднее. Как сделать, я писал выше.

smalltim:

>Если перехват, то уже сделано. Правда, по внешним INT.

Я не могу использовать прерывания для этого. Во-первых, оба внешних уже заняты сигналами с лм1881, а во-вторых, обработка прерывания при его возникновении в произвольный момент поломает вывод на экран.

У PCINT приоритет сильно меньше INTx, при одновременном ударе первым обработается INT. Во вторых, в PCINT можно только запоминать значение таймера, ставить флаг, а обрабатывать в основном цикле - так у меня сделано. Только я ещё перенастраиваю INT на подъём/спад, чтобы мерить периоды единичек. В PCINT придётся ещё ловить состояние на лапе, но на асме это можно написать весьма компактно - 16 тиков на вход/выход и 20-30 тиков на обработку. В 100 мкС уложиться запросто можно.

Кузнецов
По поводу внутреннего опорного источника, то он у этмела от 2.3 до 2.7 вольта с неизвестным дрейфом.

Для 8-10 бит его вполне достаочно, напряжения мерить. А датчики - они мосты. Для их обмера ИОН даже вреден.

Использовать его как-то можно, если только откалибровать.
Проще всего по встроенному термометру.

И где в атмелах термометр? 😃

  1. Прочитав Ваши тут дела про телеметрию ВРОДЕ как понятно, что надо сделать .
  • платку приема сигнала с приемника

Только если делать автопилот.

— прием и обработка 7 шим сигналов

А зачем 7?..

— выдача этих сигналов через изоляторы на рулевые машинки и двигатель

Изолятор не нужен, атмел и так может.

  1. Тут тов. из Новомосковска хочет поработать и организовать автоматическое пилотирование ( если это кому-то надо )

Как я понял - не надо… А так, вот ссылка на то, что наваяно пока: www.narod.ru/guestbook/?owner=13456664
Если есть желание, закажите пирометры (нужна кредитка) и контроллер, а я допишу софт. Тестить у меня нет времени и возможности (программисту проще филонить на работе программируя, чем паяя 😒 а дома других дел достаточно).

maloii:

Всё что посоветовали изучил но чтото так и не понял как повысить точность, прилагаю куски кода

Камень то какой хоть?
Для м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.

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

maloii

Посоветуйте где можно купить датчики давления, чтото найти не могу, в наличие есть в чип и дипе но какието MPXA6115A6U PBF, тоесть с PBF и цена у них сразу в 2 раза дороже 😵

Dikoy
maloii:

Посоветуйте где можно купить датчики давления, чтото найти не могу, в наличие есть в чип и дипе но какието MPXA6115A6U PBF, тоесть с PBF и цена у них сразу в 2 раза дороже 😵

это безплюмбумные.

maloii

фух, разобрался с напряжометром. Дело было не в бабине, просто я тук, тук. Вобщем инструмент в программе codeVisionAVR который генерит предварительный код вставил мне блок который устанавливает внутренне сопротивление на DDRС, соответственно показания резко уменьшились, долго искал я где грабли, но всётаки нашел 😛 . А вообще люблю такие косяки, помогают углубится в изучение доков 😁 .

maloii

Народ, опишите плиз как вы подключаете приёмник к телеметрии. Сделал как всё немцы описали www.mikrokopter.de/ucwiki/RX-7-SYNTH-IPD Проверил вольтметром работает. Подрубил к входу АЦП, а он там как начел скакать, выводил чисто значения регистра, скакал от 32 до 665. Как понял что там идёт сигнал, просто его мощность меняется. Что посоветуете сделать?

maloii

Народ, что скажете про данный девайс? www.st.com/stonline/products/…/10221.pdf . Незнаю, не работал с такими и подводных камней не знаю, но так логически обдумав понимаю что можно как просто линию ускорения рисовать, так и попытаться линию горизонта вывести.

Dikoy
maloii:

Народ, что скажете про данный девайс? www.st.com/stonline/products/…/10221.pdf . Незнаю, не работал с такими и подводных камней не знаю, но так логически обдумав понимаю что можно как просто линию ускорения рисовать, так и попытаться линию горизонта вывести.

Линия горизонта акселем не выведется. Как ни крути… Гироскопы нужны, и полноценная БСО с трёхэтажной математикой.