naza2frsky - адаптер смартпорта для FrSky за 3$

AndrewV

Если кто нибудь будет осваивать выше указанный датчик напряжения и тока (я взял такой на бэнгуде) у него есть один значительный недостаток - реализация датчика тока.
Шунт применяемый в датчике имеет сопротивление 0,0005 Ом, т.е. 0,5 милиОма. Монитор датчика TI INA169 (обозначение на SMD как A69) имеет формулу выходного напряжения Iшунта*Rшунта*Rусиления/1000кОм, по сути коэффициент усиления равен 3, так как штатно установлен резистор 3кОм. Т.е. при 100А через шунт, мы увидим падение напряжения 0,05В и соответственно 150мВ на входе нашей атмеги, она меньше 30 мВ вообще не видит. Т.е. начало диапазона будет 20А. Меня это не устроило. Заменил R усиления на первую попавшуюся 47,3кОм. Замена на фото, та что криво припаяна. паял обычным паяльником, без пасты, поэтому так, но все работает. Теперь коэффициент усиления около 47, т.е. при 10А мы имеем около 200 мВ, а при 100А больше 2В. Это гораздо лучше подходит для проекта naza2frsky. Конечно есть побочный эфект, как мне показалось немного скачут показания на малых токах из за низкого входного сопротивления атмеги при выборке аналогового порта. Для надежности впаял сдвоенный операционный усилитель в режиме повторителя LM358 (SMD, выпаял с какой то платы) (на втором фото, правда он уже в термоусадке). У него входной ток 2нА и он не влияет на измерительную цепь. Все работает хорошо. Так что датчик за 7долларов вполне нормальный.

alezz
AndrewV:

у него есть один значительный недостаток - реализация датчика тока

делитель на входе атмеги стоит, если да то какой? Очень подозрительная информация, ибо в спеках такого (визуально) датчика черным по белому пишут:

Features:
·Input voltage: 6~28V (support 30V)
·Max current sensing: 90A
·Voltage and current measurement configured for 5V ADC

т.е. при токе 90А на выходе должно быть 5В, а ни как не менее 150мВ

AndrewV
alezz:

делитель на входе атмеги стоит, если да то какой? Очень подозрительная информация, ибо в спеках такого (визуально) датчика черным по белому пишут:

т.е. при токе 90А на выходе должно быть 5В, а ни как не менее 150мВ

Все правильно. Делителя нет. Сажусь на a1, a2. Внутри датчика bec 5В.
При полностью заряженной 4S сигнал с выхода датчика напряжения 1,64 В. Внутри датчика делитель на 10 скорее всего. А вот по току я ничего не увидел сразу. Думал что спалил. Пробовал наоборот включать. Но все дома с токами до 10 ампер. Потом стал разбирать схему ну и разобрался. Если есть сомнения откройте даташит от Техас инструмента на ina169. Бывает ещё похожий, но там жёлтого цвета деталь около шунта. Может там другая история или шунт побольше.

AndrewV
AndrewV:

имеет формулу выходного напряжения Iшунта*Rшунта*Rусиления/1000кОм.

Извиняюсь, делить на 1кОм

Вторая разновидность датчика имеет в цепи управления усилением ina169 резистор в 110 ком (на фото рядом с ёмкостью). Т.е выходное напряжение до 5В при 100А. Все как в спецификации.

Sorcer
AndrewV:

Вторая разновидность датчика имеет в цепи управления усилением

Можно чуть попроще объяснить, тот что у меня на скриншоте #465 мерить правильно до 100А не будет, как понимаю? а нужно было брать с жёлтым резистором тот что выше на картинке?

AndrewV
Sorcer:

Можно чуть попроще объяснить, тот что у меня на скриншоте #465 мерить правильно до 100А не будет, как понимаю? а нужно было брать с жёлтым резистором тот что выше на картинке?

да, но по сути они одинаковые, просто к 1-му надо паяльник приложить. замените резистор как у меня на картинке в посте rcopen.com/forum/f123/topic386079/475
и все будет работать. Резистор подбирайте исходя из ваших потребностей. Хотите на выходе максимум 5В - 110кОм, 2,5В - 47 кОм.
Работы на 10 минут.

Sorcer
AndrewV:

да, но по сути они одинаковые, просто к 1-му надо паяльник приложить.

тфу… эт не моей скрин, там выкладывал с линиями питания.
У меня вот такая, по совету Алексея - www.ebay.com/itm/…/181485306857
В описание - Max current sensing: 90A -
И тут вроде есть резистор этот.

alezz
Sorcer:

У меня вот такая

должна работать безо всяких модификаций, если (вдруг) не работает то можно смело предъявлять претензии китайцу т.к. в описании написано “Voltage and current measurement configured for 5V ADC” и требовать замену. Но обычно китайцам нет ни какого резона высылать то что не соответствует описанию, а точнее банально неисправно, при пиковой нагрузке в 100А выдавать напряжение 150мВ это неисправность. Думаю вышеописанный случай или очень редкое исключение или чья-то ошибка

Sorcer
alezz:

Но обычно китайцам нет ни какого резона высылать то что не соответствует описанию

А вот на этом, как раз, половина китайцев бизнес и строят. И ещё как высылают.

alezz:

при пиковой нагрузке в 100А выдавать напряжение 150мВ

150мВ эт не у меня было, а у Андрея. И там всё норм, т.к. у него другая плата…

alezz
Sorcer:

А вот на этом, как раз, половина китайцев бизнес и строят. И ещё как высылают.

глянул, у меня с 2008 года около 200 покупок на ебей (70-80% китайцы), штук 30 на ХК, рцтаймер, бангуд и т.д. Чтобы откровенно обманули, не было ни разу, единичный брак или не получение было, но все решалось или возвратом денег или бесплатно высылали замену. Единственная проблема в случае форсмажора, все это происходит оочеееень долго, хотя тут основная вина на почте лежит, но все 100% проблемных покупок решались в мою пользу а не в пользу китайца

AndrewV
Sorcer:

тфу… эт не моей скрин, там выкладывал с линиями питания.
У меня вот такая, по совету Алексея - www.ebay.com/itm/…/181485306857
В описание - Max current sensing: 90A -
И тут вроде есть резистор этот.

Красной стрелкой вы указывает на монитор шунта ina169 www.ti.com/lit/pdf/sbos181 Резистор маленький выше, через 1 деталь, на нём надпись неразборчиво видна. Суть одна, в этих датчиках размер резистора в килоомах по сути и есть коэффициент усиления.

Рассмотрел. У вас он обозначен 05D это 110кОм. Это хороший вариант. При 90А - 5В

alezz:

глянул, у меня с 2008 года около 200 покупок на ебей (70-80% китайцы), штук 30 на ХК, рцтаймер, бангуд и т.д. Чтобы откровенно обманули, не было ни разу, единичный брак или не получение было, но все решалось или возвратом денег или бесплатно высылали замену. Единственная проблема в случае форсмажора, все это происходит оочеееень долго, хотя тут основная вина на почте лежит, но все 100% проблемных покупок решались в мою пользу а не в пользу китайца

Да я напишу бенгуду про брак, но мне легче поправить чем ждать новый, нашёл несколько случаев с аналогичной проблемой, разобрался и подумал стоит предупредить. А так, Китай. Что делать, я и движки научился благодаря китайцам мотать ))

10 days later
Morfey

Помогите разобраться, хочу прикрутить побаночный контроль напряжения, для этого взял версию для АРМ, раскомментил строки:

#define USE_SINGLE_CELL_MONITOR
#define USE_AP_VOLTAGE_BATTERY_FROM_SINGLE_CELL_MONITOR // use this only with enabled USE_SINGLE_CELL_MONITOR
#ifdef USE_SINGLE_CELL_MONITOR

Тут написал три банки:

#define MAXCELLS 3

И подправил делители:

 238.547031716,
  116.553595658,
  77.750655456,
  0.0,
  0.0,
  0.0,,
  0.0, // diverders 7-12 not defined because my network includes only 6 voltage dividers
  

Соответственно собрал резистивный делитель, и подал на входы ардуино А0-А2 (На выходах с делителя ~ 2.8 - 3,2в). Ардуино шлет данные в смарт порт, таранис видит датчики, но напряжение на банках видеть отказывается.
Пробовал разные версии MavLink_FrSkySPort, брал тут и на git.

Что я забыл?

alezz
Morfey:

Что я забыл?

Залить в таранис OpenTX 2.1.х (если еще не залит), зайти на вкладку телеметрии и настроить свои датчики, для примера смотри RxBt.

Делители в скетче в этом случае править особого смысла нет, все делается через вкладку телеметрии хотя и хуже не будет

Morfey
alezz:

Залить в таранис OpenTX 2.1.х (если еще не залит), зайти на вкладку телеметрии и настроить свои датчики, для примера смотри RxBt.

У меня вообще не отображается датчик который должен отображать напряжение.
В 2,1, как я понимаю надо делать так: создаешь виртуальный датчик calculated | cell, а дальше в cell sensor выбираешь источник. Но у меня в источниках пусто.
А в 2,0 в параметрах cell и cells показывают только range который задал.

Вот такие датчики у меня выводятся:

В naza2frsky все работает, правда там делал напряжение всего акка.

alezz
Morfey:

У меня вообще не отображается датчик который должен отображать напряжение

В naza2frsky все работает, правда там делал напряжение всего акка.

ну раз датчик не видно, получается что ардуино либо НЕ шлет данные в смарт порт, либо шлет в неправильном формате. Учитывая что “в naza2frsky все работает” осталась мелочь - определить что в скетче для АРМ не правильно, сравнив оба скетча 😉

Morfey
alezz:

ну раз датчик не видно, получается что ардуино либо НЕ шлет данные в смарт порт, либо шлет в неправильном формате.

Ардуина данные шлет, проверял, а вот почему она не шлет именно напряжение, понят не смог, ибо знаний по этому вопросу ноль.

alezz:

Учитывая что “в naza2frsky все работает” осталась мелочь - определить что в скетче для АРМ не правильно, сравнив оба скетча

А сравнивать бесполезно, ибо в твоем скетче не прикручен побаночный вывод напряжения.

alezz:

осталась мелочь - определить что в скетче для АРМ не правильно

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

alezz
Morfey:

ибо знаний по этому вопросу ноль. А сравнивать бесполезно, ибо в твоем скетче не прикручен побаночный вывод напряжения.

ну наверное НЕ ноль если удалось прикрутить к naza2frsky вывод напряжения, который он изначально НЕ делается. Для начала точно так же в АРМ версии попытаться выводить общее напряжение (напряжение одной банки) как это сделано в naza2frsky ибо искомая строка тебе уже известна.

Morfey
alezz:

ну наверное НЕ ноль если удалось прикрутить к naza2frsky вывод напряжения, который он изначально НЕ делается.

Просто внимательно прочитал тему и делал по твоему описанию. Так же удалось таким же методом прикрутить три банки к naza2frsky, но это больше смахивает на колхоз. (И такое будет нормально работать только в opentx 2.1, как я понимаю)

alezz:

Для начала точно так же в АРМ версии попытаться выводить общее напряжение (напряжение одной банки) как это сделано в naza2frsky ибо искомая строка тебе уже известна.

Сейчас буду пробовать.

alezz:

ну наверное НЕ ноль если удалось прикрутить к naza2frsky вывод напряжения, который он изначально НЕ делается.

Просто внимательно прочитал тему и делал по твоему описанию. Так же удалось таким же методом прикрутить три банки к naza2frsky, но это больше смахивает на колхоз. (И такое будет нормально работать только в opentx 2.1, как я понимаю)

alezz:

Для начала точно так же в АРМ версии попытаться выводить общее напряжение (напряжение одной банки) как это сделано в naza2frsky ибо искомая строка тебе уже известна.

Сейчас буду пробовать.

Попробовал в MavLink_FrSkySPort заменить

FrSkySPort_SendPackage(FR_ID_A3_FIRST, handle_A2_A3_value((ap_roll_angle+180)/scalefactor));

на

FrSkySPort_SendPackage(FR_ID_A3_FIRST, analogRead(A0));

Получил в телеметрии датчика “А3” число, не зависящее от поданного напряжения на вход А0. (Так что “в лоб”, как в naza2frsky не получилось).

А если такую же операцию проделать, но написать так:

FrSkySPort_SendPackage(FR_ID_CELLS, analogRead(A1));

То хоть в телеметрии начинает отображаться датчик “Cels”, правда вместо значений там “—”.

alezz
Morfey:

Попробовал в MavLink_FrSkySPort заменить

FrSkySPort_SendPackage(FR_ID_A3_FIRST, handle_A2_A3_value((ap_roll_angle+180)/scalefactor));

на

FrSkySPort_SendPackage(FR_ID_A3_FIRST, analogRead(A0));

Получил в телеметрии датчика “А3” число, не зависящее от поданного напряжения на вход А0. (Так что “в лоб”, как в naza2frsky не получилось).

Ну давай разбираться дальше, то ли разрядность FR_ID_A3_FIRST в телеметрии не правильное, то ли analogRead не работает (например нет напряжения на входе). Вот инфа по analogRead arduino.ru/Reference/AnalogRead
т.е. функция выдает значения от 0 до 1023. Поэтому пробуем сначала например FrSkySPort_SendPackage(FR_ID_A3_FIRST, 500); потом FrSkySPort_SendPackage(FR_ID_A3_FIRST, 1000); а потом запредельное FrSkySPort_SendPackage(FR_ID_A3_FIRST, 10000); и смотрим что получаем по телеметрии. Исходя из полученных результатов делаем выводы 😉

Morfey
alezz:

Поэтому пробуем сначала например FrSkySPort_SendPackage(FR_ID_A3_FIRST, 500); потом FrSkySPort_SendPackage(FR_ID_A3_FIRST, 1000); а потом запредельное FrSkySPort_SendPackage(FR_ID_A3_FIRST, 10000); и смотрим что получаем по телеметрии. Исходя из полученных результатов делаем выводы

В первом случае телеметрия дает 5.0, второй 10.0 и последний 100.0.
Как я понимаю почему то не считываются данные с входов A0-A2

alezz
Morfey:

Как я понимаю почему то не считываются данные с входов A0-A2

ну вот, так и до истины добраться не долго 😃 Либо нет напряжения на входах (например подтянул вход к земле низкоомным сопротивлением), либо оно слишком большое (подтянул вход к плюсу, а не минусу), либо AnalogReference неправильно настроен arduino.ru/Reference/AnalogReference, либо увы выгорели входы A0-A2 (например подал напряжение больше 5В). Может есть какие еще варианты, это то что сразу в голову пришло.