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

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В). Может есть какие еще варианты, это то что сразу в голову пришло.

Morfey

Сейчас еще раз проверил, при таком виде:

FrSkySPort_SendPackage(FR_ID_A3_FIRST, analogRead(A0));

В телеметрию приходит фиксированное значение 10,23.

alezz:

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

Ничего не меняя в схемотехнике, прошиваю ту же ардуину naza2frsky и все работает.

Делитель делал по схеме:

alezz:

AnalogReference неправильно настроен arduino.ru/Reference/AnalogReference,

Поменяв AnalogReference на DEFAULT заработала

FrSkySPort_SendPackage(FR_ID_A3_FIRST, analogRead(A0));

Но побаночно все ровно молчит.

alezz
Morfey:

Но побаночно все ровно молчит.

а на А0 сейчас вся батарея или первая банка? Какие напряжения на входах А0-А2?

Morfey
alezz:

а на А0 сейчас вся батарея или первая банка?

Первая банка

alezz:

Какие напряжения на входах А0-А2?

где то в районе 2.8 - 3,2

alezz

напряжение нормальное, т.е. одна банка есть нужно еще две? Предлагаю к заработавшей

FrSkySPort_SendPackage(FR_ID_A3_FIRST, analogRead(A0));

добавить еще например

FrSkySPort_SendPackage(FR_ID_T1, analogRead(A1));
FrSkySPort_SendPackage(FR_ID_T2, analogRead(A2));

т.е. использовать Т1 и Т2

Morfey
alezz:

т.е. использовать Т1 и Т2

уже сделал:

Morfey:

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

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

alezz
Morfey:

я пытаюсь понять

Удачи! Главное заработало, колхоз не колхоз не суть важно, за сим удаляюсь 😃 Я думаю что проблему искать нужно где-то здесь в математике:

handle_A2_A3_value((ap_roll_angle+180)/scalefactor)

название переменной ap_roll_angle и константа 180 (очень похоже на градусы) для измерения постоянного напряжения как минимум настораживает

Morfey
alezz:

Удачи! Главное заработало, колхоз не колхоз не суть важно, за сим удаляюсь

Спасибо за помощь, буду пока так пользоваться, и может чего то накопаю )))

alezz:

Я думаю что проблему искать нужно где-то здесь в математике: handle_A2_A3_value((ap_roll_angle+180)/scalefactor) название переменной ap_roll_angle и константа 180 (очень похоже на градусы) для измерения постоянного напряжения как минимум настораживает

Не, в а2 и а3 они выводят совсем другое:

A2              ( HDOP value * 25 - 8 bit resolution)
A3              ( Roll angle from -Pi to +Pi radians, converted to a value between 0 and 1024)
A4              ( Pitch angle from -Pi/2 to +Pi/2 radians, converted to a value between 0 and 1024)

А вольтаж должен выводится через cells и cell:

Cell            ( Voltage of Cell=Cells/(Number of cells). [V])
Cells           ( Voltage from LiPo [V] )
1 month later
Morfey

И снова здравствуйте!
Тут получил датчик тока, и соответственно прикрутил его к naza2frsky, все ок, работает.
А теперь вопрос, как показания с этого датчика дублировать на mininazaOSD?
Если тупо подключаю в параллель, показания пропадают и там и там.
В голову пришло только что бы ардуинка дублировала показания с датчика на какой нибудь свободный порт, но мозгов на это пока не хватило.

alezz

мне кажется чтобы не городить огород с обменом данных между ардуинками, самый простой способ это сделать повторитель напряжения на операционном усилителе как предложил на предыдущей странице AndrewV rcopen.com/forum/f123/topic386079/475

Morfey

Спасибо, попробую так сделать.

Morfey

Спаял сегодня усилитель на lm358, и все заработало, теперь нету просадки при подключении к датчику одновременно naza2frsky и OSD.
Правда не обошлось без потерь, в ходе настроек похоже спалил мультиметр, перестал он корректно показывать силу тока (((