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

ReGet
maloii:

А можеш готовую прошивку дать посмотреть?

смотри личные сообщения

maloii
ReGet:

смотри личные сообщения

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

SGordon

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

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С, соответственно показания резко уменьшились, долго искал я где грабли, но всётаки нашел 😛 . А вообще люблю такие косяки, помогают углубится в изучение доков 😁 .