Калибровка ATMEGA168 + BQ77PL900

Обсуждаем контроллеры компании Atmel.
Ответить
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса

Сообщение clawham »

Здравствуйте!
Делаю платку-балансировщик.

Нужно мерять ячейки и мерять точно!
Применяю фронтенд BQ77PL900.

у неё внутри комутатор, кондер, операционник -повторитель и операционник-диференциальный.

Мега168 на внутренней опоре 1.1 вольт.

требуется как-то просчитать калибровки.
По даташиту не получается - нужно мерять 1.6 вольта. а у меня потолок 1.1 и это хорошо ибо напруга на выходе меняется от 0.975 до нуля. разрешение 10 бит

Для батареи 4.050 вольт получаются следующие значения на выходе BQ:
CAL0 = 0.364 вольт
CAL1 = 0.975 вольт
CAL2 = 0.829 вольт
CAL3 = 1.167 вольт
CAL4 = 0.600 вольт
CAL5 = 0.827 вольт
CAL6 = 0.599 вольт
CAL7 = 0.745 вольт

Напряжение ячейки считается как 0,975 - (Vbatt * 0.15)
НО в этой формуле есть неизвестные:
есть потеря примерно 1 милливольта на переносе с кондера на выход(семпл холд)
есть ошибка геина 0.15.. тоесть 4.05 меряется через семпл холд и теряет чтото, потом умножается на 0.15 +-1% . Потом полученное напряжение вычитается из опоры 0.975 которая тоже имеет +-1%

Вот и вопрос - как имея результаты измерения всех этих калибровок рассчитать реальное напряжение на батарее?

Сейчас я беру 0,975 делю на Сал1 - получаю коэффициент соответствия моего АЦП. ведь в меге опора вообще никакая (коэфф1)

потом читаю калибровку 4 и 6 через поправочный кожффициент коэфф1 чтоб получить потерю на семпл холд части.

дальше Кал1 минус кал4 - получаю 2.5 вольта которые умножили на какой-то коффициент(на него потом и напряжение батареи умножать будут) - получаю коэфф2.

ну и потом уже читаю Кал0 * на коэфф1 , прибавляю потерю на семпл холд схеме. Беру Сал1 умноженный на коэфф 1, отнимаю пролученное в начале и потом все это делю на коэфф2.

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

вот пример 5 банок
Реальные напряжения: 4,050 4,115 4,042 4,065
СпойлерCells voltage: 4.062600 4.119300 4.039400 4.060200 0.003700 0.003300 0.003200 0.003300 0.003800 5.434200
Cells voltage: 4.062800 4.120000 4.040300 4.061700 0.004300 0.004000 0.003200 0.003600 0.003800 5.438600
Cells voltage: 4.063000 4.119700 4.040000 4.061100 0.003900 0.003800 0.003900 0.004600 0.003200 5.434000
Cells voltage: 4.061600 4.119600 4.040500 4.061300 0.004300 0.004500 0.003400 0.003900 0.004100 5.437500
Cells voltage: 4.062500 4.119000 4.040400 4.061000 0.002500 0.003000 0.003200 0.004000 0.002500 5.434000
Cells voltage: 4.061700 4.118900 4.040500 4.060900 0.003900 0.003600 0.003500 0.003300 0.003600 5.438800
Cells voltage: 4.062400 4.119400 4.040600 4.061200 0.003000 0.004700 0.004600 0.004300 0.003300 5.433800
Cells voltage: 4.062200 4.119500 4.040100 4.060700 0.003700 0.002900 0.004100 0.003400 0.004100 5.439500
Cells voltage: 4.062000 4.118700 4.040200 4.060700 0.004600 0.003900 0.003200 0.003800 0.004100 5.435700
Cells voltage: 4.062200 4.119300 4.040700 4.061400 0.004100 0.003900 0.003200 0.003400 0.004200 5.438600
Cells voltage: 4.062000 4.119000 4.040500 4.061500 0.004000 0.004200 0.003700 0.003400 0.003600 5.433500
Cells voltage: 4.061500 4.118800 4.040700 4.061000 0.002400 0.003400 0.003700 0.003100 0.003700 5.437600
Cells voltage: 4.062000 4.120000 4.041100 4.061200 0.003000 0.003200 0.003200 0.004400 0.004300 5.434600
Cells voltage: 4.062200 4.119400 4.040500 4.061400 0.004500 0.003400 0.003900 0.003200 0.004100 5.439300
Cells voltage: 4.062500 4.119400 4.040400 4.059800 0.004100 0.003600 0.004300 0.003800 0.003900 5.434800
Cells voltage: 4.063100 4.119900 4.040800 4.060800 0.003800 0.004700 0.004900 0.003900 0.003700 5.438500
Cells voltage: 4.061500 4.119100 4.040400 4.061400 0.002900 0.003900 0.002700 0.004300 0.002500 5.435600
Cells voltage: 4.062200 4.118900 4.040300 4.060800 0.003900 0.004300 0.004200 0.004400 0.003000 5.437500
Cells voltage: 4.062500 4.119800 4.039900 4.060400 0.003900 0.004700 0.004000 0.003400 0.003400 5.433700
Cells voltage: 4.062500 4.120000 4.040500 4.061300 0.004700 0.004300 0.004300 0.004100 0.004200 5.435200
Cells voltage: 4.062300 4.119800 4.041500 4.061200 0.004200 0.004100 0.004100 0.004600 0.005000 5.434900
Cells voltage: 4.062400 4.120000 4.040500 4.061000 0.005000 0.004300 0.003800 0.003500 0.003700 5.438400
Cells voltage: 4.062400 4.118800 4.040400 4.060500 0.003000 0.003900 0.004200 0.003400 0.003400 5.433800
Cells voltage: 4.062500 4.120400 4.040800 4.061000 0.003600 0.003700 0.004100 0.004100 0.004300 5.438100
Cells voltage: 4.061900 4.119400 4.041500 4.061400 0.003800 0.002700 0.004100 0.004100 0.003200 5.434900
Cells voltage: 4.061600 4.118900 4.040300 4.061400 0.002900 0.003700 0.004500 0.002300 0.003100 5.437300
Cells voltage: 4.061700 4.118900 4.040300 4.061400 0.003200 0.004100 0.003800 0.003600 0.003900 5.433100
Cells voltage: 4.062500 4.119400 4.040200 4.061100 0.003600 0.003500 0.004100 0.003900 0.004000 5.437000
Cells voltage: 4.062000 4.119300 4.040500 4.061700 0.004500 0.003500 0.004300 0.004000 0.003400 5.434400
Cells voltage: 4.061800 4.119000 4.040300 4.061400 0.004100 0.004900 0.003400 0.004300 0.004000 5.437900
Cells voltage: 4.062200 4.119400 4.040500 4.061200 0.004300 0.004800 0.004800 0.004800 0.003900 5.434100
та же опора 0.975 так и получается по тестеру...тоесть опора в BQ77 и тестер оттарированы хорошо. Теперь как-то надо опорой BQ оттарировать атмегу. Как это правильно сделать?

Код: Выделить всё

// читаем все калиброви
    bqWriteReg(0x05, 0b00010000);
    CurrDelay();
    Cal1 = ADCRead(ADCVPort);
...
// прочитали - считаем

    Kscale1 = 0.975 / Cal1;
    
    Kscale2 = (Cal1 - Cal4) / (2.5/Kscale1);
    
    SHDelta = Cal4 - Cal6;

    Vout = ADCRead(ADCVPort); // читаем Сал0 - напругу батареи через внутренности пропущенную
   
    CellResult = Cal1*Kscale1 - (Vout*Kscale1 + SHDelta);
    
    CellResult = CellResult / Kscale2;

интуитивно я понимаю что подгонял формулу к результату измерений :) а как правильно?
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Контактная информация:
Реклама
Родился
Сообщения: 4
Зарегистрирован: Вт мар 04, 2014 09:44:50

Сообщение ddLesu »

вами не четко поставлена задача:

1.
требуется как-то просчитать калибровки.
2.
Вот и вопрос - как имея результаты измерения всех этих калибровок рассчитать реальное напряжение на батарее?
еще раз, что вы функционально хотите от меги168?
калибрует и выдает инф о напряжении на батареи же BQ77PL900, зачем что-то рассчитывать мегой?

давно читаю ваши посты на форумах РК и ЭТ, кажется вы перемудриваете
Реклама
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса

Сообщение clawham »

кагбэ да...перемудриваю ибо сичас +-4 милливольта точность получается.

но сичто в теории можно получить намного бОльшую точность.

Проблема что 1000 считатнная атмегой это вовсе не 1,1/1024*1000=1,074 вольта на входе.

Все же знают о том что у АЦП есть смещение нуля, коэффициент усиления и коэффициент нелинейности.

Вот сижу и думаю как же блин правильно посчитать напряжение батареи зная замеры всех этих контрольных точек в попугаях АЦП а не в вольтах и т.д. :)

Я просто уверен что можно и нужно как-то использовать информацию которая сичас у меня никак не учитывается.
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Контактная информация:
Родился
Сообщения: 4
Зарегистрирован: Вт мар 04, 2014 09:44:50

Сообщение ddLesu »

ясно, тогда советую изучить как работает АЦП и не забивать себе голову попугаями ))

1.простая теория
2.сложная и подробная на примере 16меги

если разберетесь, то задачку свою решите.
Я просто уверен что можно и нужно как-то использовать информацию которая сичас у меня никак не учитывается.
:solder: тогда обратите внимание на свое целеполагание, копание в мат.апарате вам ответа на вопрос "для чего это может пригодиться?", вам не даст. не там копаете мистер Кот :dont_know:
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса

Сообщение clawham »

Я-то знаю как ацп работает :) даже знаю внутреннее устройство и даже когда-то на паралельном порту и логике делал некое подобие ацп.

Тут вопрос в опыте - если кто сталкивался с калибровкой на лету и знает чтото больше чем просто узнать смещение и коэф усиления - я б не против был попробывать другие методики расчета
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Контактная информация:
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

Так а в чем проблема? сделайте схему так, чтобы при посыле сигнала в один из портов выводы перемыкались и считайте ошибку. Плюс есть метод усреднения. Делаете несколько измерений и вычисляете среднее значение. + грамотно построенная и разведенная плата - ОГРОМНЫЙ ПЛЮС в точности измерения.
Реклама
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса

Сообщение clawham »

хорошо.
Кто предложит чтото стоящее к вачестве усреднения?

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

Код: Выделить всё

void ProceedCal(float* cal, float Curr)
{
    float tmp;
    float st;
    //tmp = *cal;
    st  = *cal/100000;
    tmp = *cal-Curr;
    if(*cal>0.000001)
    {    
        if(tmp<0)
            *cal += st;
        if(tmp>0)
            *cal -= st;
    }
    else
        *cal=Curr;              
}
Калибровку я читаю 500 замерами ацп.

Кроме того АЦП у меня отрабатывает 200 последовательных замеров и потом средним арифметическим считаю результат в флоате. как бы при таком деле шумы на входе ацп только в плюм ибо увеличивают разрядность итоговую.

Вот
пример работы балансира и точность замеров.rar
Пример результатов замеров
(129.33 КБ) 154 скачивания
пример результата измерения. Каждая строка раз в секунду. Под конец я одну из банок подкоротил 0.5 оммами :) тоесть плата кинулась остальные банки подсаживать до уровня проседания той под нагрузкой.

По осциллу смотрел - время изменения сигнала с нуля до уровня напряжения банки 12 микросекунд. я жду миллисекунду установки и потом делаю 200 измерений АЦП, суммирую их и делю на 200 в флоате. дальше

Код: Выделить всё

CellResult = Cal1*Kscale1 - (CellsRAW[a]*Kscale1 + SHDelta);
        if(Cells[a]<1)
        {
            Cells[a] = CellResult / Kscale2;
        }
        else
        {
            Cells[a] = (Cells[a] + (CellResult / Kscale2))/2;
        }
        if(Cells[a]>10.0)
            Cells[a]=0;

Вот такой код. Тоесть считаю среднее арифметическое прошлого и текущего значения. Cells[a] это массим который и выведен в ексель, CellsRAW[a] это прямые замеры каждой банки в попугаях ацп. Как избавиться от этого шума?
АЦП работает на 125 килогерцах тактовой. Тоесть в оптимальном диапазоне по точности. Применять внешний АЦП на 16-24 бита нет смысла и места. Платка должна быть миниатюрная.
Вот такая разводка
bq77PL900_8.gif
Вот такая разводка
(60.68 КБ) 583 скачивания
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Контактная информация:
Родился
Сообщения: 4
Зарегистрирован: Вт мар 04, 2014 09:44:50

Сообщение ddLesu »

вам нужны методики обработки результатов?

попробуйте использовать обработку прямых и косвенных измерений:
методичка 1___методичка 2

кстати, давно интересует вопрос, почему вы в своем проекте используете только пассивную балансировку?
это чисто экономический выбор?
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса

Сообщение clawham »

вопрос в мощности.
Допустим у человека батарея лифера на 2 киловаттчаса
тоесть ёмкость одной банки "всего" 41 амперчас.
У лифера полностью заряженного присутствует саморазряд 1-5% у нормальных банок и до 10% у подгулявших.
ООп...и оказывается балансить то надо уже током 4 ампера :)

Покажите мне микросхему на 10 - 20 банок балансировки и 4 ампера на канал :)
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Контактная информация:
pcb
Опытный кот
Сообщения: 833
Зарегистрирован: Пт авг 12, 2011 09:14:27
Откуда: Млечный путь/Земля/РФ/Екатеринбург

Сообщение pcb »

clawham писал(а):ООп...и оказывается балансить то надо уже током 4 ампера
Как посчитали?
Разработал:
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
Ответить

Вернуться в «AVR»