Как подключить датчик напряжения и тока к Crius AIOP в MultiWii 2.3, что бы отображался ток.

Исходные данные

OSD прошита KV_Team_dev_r370, мозги - MultiWii_dev_2013_10_20_r1591_pre_2.3

В основу легло сообщение serenya, направившего меня на запись Angelorsk о подключении датчика к мозгам rcopen.com/blogs/83206/16327#comment333 – за что им огромное спасибо.

подключаем pin “V” OSD на pin A0 AIOPIO
подключаем pin “I” OSD на pin A2 AIOPIO
Настраиваем и выставляем корректное напряжение согласно сообщению Андрея Трубникова.
MultiWii должна быть не ниже версии 2.3 – предыдущие версии работать не будут (без правки).
config.h для измерения тока выглядит так
#define POWERMETER_HARD
#define PSENSORNULL
#define PINT2mA 4 // примечание 1 – см.ниже

Правим прошивку OSD, в которой просто не читается значение текущего тока.

OSD\KV_Team_dev_r370 Добавить строки, выделенные красным:

Файл GlobalVariables.h
uint16_t pMeterSum=0;
uint16_t MwRssi=0;
uint16_t MwAmperage=0; // Mwii 2.3 - DenK

файл Serial.ino

if (cmdMSP==MSP_ANALOG)
{
MwVBat=read8();
pMeterSum=read16();
MwRssi = read16();
MwAmperage = read16(); // Mwii 2.3 - DenK
}

файл Screen.ino – заменить void displayAmperage(void) на следующий:

void displayAmperage(void)
{
// Real Ampere is ampere / 10
if (Settings[S_ENABLEADC]) {
ItoaPadded(amperage, screenBuffer, 4, 3); // 99.9 ampere max!
screenBuffer[4] = SYM_AMP;
screenBuffer[5] = 0;
MAX7456_WriteString(screenBuffer,getPosition(amperagePosition));
}
else {
ItoaPadded(MwAmperage, screenBuffer, 4, 3); // add Mwii 2.3 - DenK
screenBuffer[4] = SYM_AMP;
screenBuffer[5] = 0;
MAX7456_WriteString(screenBuffer,getPosition(amperagePosition));
}
}

/* как определяется структура analogв MWii2.3, файл types.h - нас интересует amperage
typedef struct {
uint8_t vbat; // battery voltage in 0.1V steps
uint16_t intPowerMeterSum;
uint16_t rssi; // range: [0;1023]
uint16_t amperage;
} analog_t;
*/

Примечание 1.
В файле MultiWii.cpp вводится поправка примерно таким образом: значение силы тока умножается на pint2ma.
Так как у меня сейчас нет возможности проверить с большими токами, а в области малых значений (единиц) поправка слишком грубая, то я в файле MultiWii.cpp заменил эту строку на следующую:
analog.amperage = powerValue * conf.pint2ma / 10;

Результат: цифры «0.0А» в ОСД ожили и стали показывать что-то, похожее на правду.
Просьба: если вы можете проверить с реальными токами – отпишитесь, я дополню/поправлю свой текст.

  • 4821
Comments
ДенисК

Можно подключить сенсор напряжения и тока напрямую к OSD и включить встроенный АЦП - что бы исключить полетный контроллер, но это уже надо подпаиваться к ножкам 328-й, без микроскопа непросто

crand

А почему показания тока на А2? На А1 нельзя оставить?

crand

Как у Андрея Трубникова.

crand

Ага, вот и проблема. У меня то стоит Mahowik 3.1. А он на основе версии 2.2.
Не получается скомпилировать. Ошибку выдает.

ДенисК
crand;bt110433

Ага, вот и проблема. У меня то стоит Mahowik 3.1. А он на основе версии 2.2.
Не получается скомпилировать. Ошибку выдает.

  1. Если Маховий есть в исходниках - то надо в него добавить ответную часть обработки и выдачи значениия тока - вот подробно расписано, как это сделать (правда, на английском): www.multiwii.com/forum/viewtopic.php?f=8&t=3783

  2. Не получается скомпилировать OSD? А на что ругается?

  3. вывод определяются в config.h -
    #define V_BATPIN A0 // Analog PIN 0 - это вольтметр
    #define PSENSORPIN A2 // Analog PIN 2 - это амперметр

crand

Не компилируется Mahowik.
OSD скомпилировалось, работает, но цифры ампер скачут 0-25,5.

ДенисК
crand;bt110435

Не компилируется Mahowik.
OSD скомпилировалось, работает, но цифры ампер скачут 0-25,5.

А можно расспросить подробнее про Маховик? Читал, что это удачно допиленная Александром прошивка Мультивия за 25 у.е., но в каком виде он её отсылает? В исходниках? Если да, то какие изменения Вы внесли в неё? Какие ошибки пишет при компиляции? Что говорит Александр?

Один раз у меня начали прыгать цифры когда я включил “включить встроенный ADC” - АЦП висит в воздухе, вот и наводится неизвестно что. Хотя мне кажется, что дополненная OSD читает 7 байт вместо 5 (последние 2 - значение тока), а Mwii - до доработки - выдает 5 байт, поэтому остальные 2 байта могут быть чем угодно.

crand

Александру вопрос только задал.
Изменения те, что Вы написали в основном сообщении, но этого явно мало. Вашу ссылку на англоязычный форум посмотрел, но в прошивке Mahowik нашел только 2/3. Одно изменение где делать не нашел.
Буду ждать ответа Александра.

ДенисК
crand;bt110440

Александру вопрос только задал.
Изменения те, что Вы написали в основном сообщении, но этого явно мало. Вашу ссылку на англоязычный форум посмотрел, но в прошивке Mahowik нашел только 2/3. Одно изменение где делать не нашел.
Буду ждать ответа Александра.

yadi.sk/d/dqaeWW3IBXnZv - это скорректированные исходники OSD, которые я скомпилировал и залил себе.

crand

С OSD вопросов нет, проблемы с прошивкой контроллера.

serenya
crand;bt110427

А почему показания тока на А2? На А1 нельзя оставить?

Я пробовал, может где-то ошибка была, не знаю, но у меня не работало. Вернул на А2 и начало работать, правда в попугаях, т.е. порт А1 не измерял напряжение.

serenya
crand;bt110435

Не компилируется Mahowik.

У меня скомпилировалось 3,1 с правкой под ОСД как в вышеуказанном патче, но правильно считать амперы я так и не знаю как. rcopen.com/forum/f123/topic283798/3957

ppzaec

И так вчера закончил подключение и настройку датчика тока к multiwii 2.3
Дачик тока : www.rctimer.com/product-861.html
Плата AIOP: www.rctimer.com/product-765.html

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

С напряжение особых проблем не было, подобрав нужный дифферент все получилось:

#define VBATSCALE 21

Дальше настало время тока. На все догадки и танцы у меня ушло около недели. Самое главное что ни в GUIдля виндовс , ни в GUIдля андройд значения тока ни где не показываются. Показания тока есть только на экране телевизора в OSD!!!

Открыв строчку тока получил следующее

#define POWERMETER_HARD
#define PSENSORNULL 510
#define PINT2mA 132

Сначала надо настроить PSENSORNULL510, я пытался ставить разные значения от 1 до 600, но результат был всегда один и тот же, ноль никогда не получался и значение были всегда хаотично разные и при увеличении тока цифры «прыгали» как в большую сторону так и в меньшую.
Потом уже не понимая что делать решил шаманить со строчкой в multiwii (вкладка multiwii.cpp)

analog.amperage = powerValue * conf.pint2ma;

Как было написано в самом начале значение тока не можно, а нужно поделить на 10, вот так

analog.amperage = powerValue * conf.pint2ma / 10

После этого значение тока превратились, в какое подобие нормальных информативных чисел. Далее с помощью PSENSORNULL выставляем значение тока в ноль. Я не стал выставлять его в ноль, а померев амперметром, выставил реальные значения «холостого хода», у меня это было 0,2А, у меня получилось это значение равное 1.

#define PSENSORNULL 1

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

analog.amperage = powerValue * conf.pint2ma / 10

иполучилследующее

analog.amperage = powerValue * conf.pint2ma / 236

После этого ток показывал значение с точностью до 0,1А
Теперь остается выставить значение #definePINT2mA и дело сделано. Мое значение:

#definePINT2mA 225.

Удачи в настройке и полетах!!!