Сгенерируйте данные параметра для блока батареи таблицы данных

В этом примере показано, как импортировать данные листа литий-ионного аккумулятора и сгенерировать параметры для блока Datesheet Battery.

На шаге 1 вы импортируете данные таблицы данных. Шаги 2-5 показывают, как использовать методы аппроксимирования кривыми для получения напряжения разомкнутой цепи и сопротивления батареи от данных таблицы данных. На шагах 6-8 вы подтверждаете соответствие напряжения кривой и значений батареи, сравнивая их с поведением Аррениуса и данными таблицы данных. Наконец, на шаге 9 вы задаете следующие параметры блоков Datesheet Battery:

  • Номинальная производительность при номинальной температуре

  • Данные таблицы напряжений разомкнутой цепи

  • Разомкнутые точки прерывания напряжения 1

  • Данные таблицы внутреннего сопротивления

  • Точки прерывания температуры батареи 1

  • Точки останова емкости батареи 2

  • Начальный заряд батареи

Шаг 1: Импорт данных таблицы батарей

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

В данном примере загрузите данные о разряде и температуре таблицы данных батареи для литий-ионного аккумулятора из файла, который содержит 12 наборов данных. Каждый набор данных соответствует данным о батарее для определенного тока и температуры. Каждый набор данных имеет два столбца. Первый столбец содержит пропускную способность, в процентах. Второй столбец содержит соответствующее напряжение элемента батареи.

exp_data=load('ex_datasheetbattery_liion_100Ah.mat');

В примере не используется набор данных, который соответствует току 500 A при 25 ° C.

Постройте график кривых разряда и температуры. На фиг.1 показаны характеристики разряда литий-ионного аккумулятора при постоянной температуре (при пяти уровнях тока, показанных как скорость C) и постоянном токе (при шести температурах). Фигура 1 указывает кривую, которая соответствует ссылке температуре 25 ° C и ссылке току 50 А.

ex_datasheetbattery_plot_data

Шаг 2. Нормализация данных о состоянии заряда (SOC)

Чтобы представлять 1-SOC емкость при постоянной температуре, нормализуйте относительную емкость разряда со значениями от 0 до 1. Предположим, что 1 представляет собой полностью разряженную батарею.

Задайте ref_exp к набору данных, который соответствует эталонной температуре 25 ° C и эталонному току 50 А. Обычно эталонной температурой является комнатная температура.

ref_exp = 2;

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

В данном примере используйте val_exp для настройки наборов данных валидации и оценки. Предположим, что 1 представляет набор данных валидации, а 0 представляет набор данных оценки.

val_exp = logical([1 0 0 0 1 0 0 0 0 1 0]);

Задайте опорные ток и температуру. В данном примере эталонная температура составляет 25 ° C, а эталонный ток равен 50 A.

ref_curr = current == current(ref_exp);
ref_temp = temperature == temperature(ref_exp);

[sort_current, sort_index_current] = sort(current(ref_temp));
[sort_temp, sort_index_temp] = sort(temperature(ref_curr));
N = length(current); % Number of experiments

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

for i=1:N
    x.(['curr' current_label{i} '_temp' temperature_label{i}]) = ...
            exp_data.([label '_' current_label{i} '_' temperature_label{i}])(:,1)/...
            exp_data.([label '_' current_label{i} '_' temperature_label{i}])(end,1);
    % Calculate actual capacity for each datasheet
    correct_cap.(['curr' current_label{i} '_temp' temperature_label{i}]) = ...
            exp_data.([label '_' current_label{i} '_' temperature_label{i}])(end,1);
end

Постройте график нормированных данных SOC.

ex_datasheetbattery_plot_soc

Шаг 3: подгонка кривых

Создание fitObj кривые для постоянных температур с различными скоростями разряда и постоянными скоростями разряда при различных температурах. Используйте fitObj кривых, чтобы создать матрицу напряжения ячейки/модуля от тока разряда на меняющихся уровнях SOC.

fitObj - структура объектов аппроксимации, содержащая столько полей, сколько наборов данных. Структура соответствует разрядному напряжению нормированному ([0,1]) извлечен Ah. Это позволяет алгебраически объединять кривые разряда для вычисления сопротивления на каждом уровне SOC.

Задайте состояние вектора заряда и точек останова.

SOC_LUT = (0:.01:1)';
SOCbkpts = 0:.2:1;

Подгонка кривых разряда к различным токам для опорной температуры.

for i=find(ref_temp)
    fitObj.(['fit' current_label{i}]) = ...
        fit(x.(['curr' current_label{i} '_temp' temperature_label{i}]),...
        exp_data.([label '_' current_label{i} '_' temperature_label{ref_exp}])(:,2),'smoothingspline');
end

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

for i=find(ref_curr)
    fitObj.(['fit' temperature_label{i}]) = ...
        fit(x.(['curr' current_label{i} '_temp' temperature_label{i}]),...
        exp_data.([label '_' current_label{ref_exp} '_' temperature_label{i}])(:,2),'smoothingspline');
end

Создайте напряжение от тока разряда для различных уровней SOC. Em_MAT является матрицей с SOC в строках и текущей в столбцах.

Em_MAT = [];
for i=find(ref_temp)
    Em_MAT = [Em_MAT fitObj.(['fit' current_label{i}])(SOC_LUT)];
end

Фиг.3 показывает напряжение в зависимости от тока при различных SOCs.

ex_datasheetbattery_plot_curves

Шаг 4: Экстраполяция напряжения разомкнутой цепи

Чтобы получить напряжение разомкнутой цепи, Em , подгонка линии к кривой напряжения от тока и экстраполяция на i=0 .

R0_refTemp = [];
for i=1:length(SOC_LUT)
    % Fit a line to V=f(I)
    fitSOC.(['SOC' num2str(i)]) = fit(sort_current',Em_MAT(i,sort_index_current)','poly1');
end

Для оценки напряжения разомкнутой цепи Em на всех уровнях SOC экстраполируйте значения напряжения в i=0 .

Em = [];
for i=1:length(SOC_LUT)
    % Em = f(0)
    Em = [Em fitSOC.(['SOC' num2str(i)])(0)];
end
Em = Em';

Шаг 5: Определите напряжение батареи и сопротивление при различных температурах

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

ex_datasheetbattery_plot_voltage

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

R0_LUT = [];
for i=find(ref_curr & ~val_exp)
    % Create fit object for V vs. SOC
    voltVsSOC.(['temp' temperature_label{i}]) = fitObj.(['fit' temperature_label{i}])(SOC_LUT);
    % Calculate R0(SOC,T) assuming linear behavior R0 = DeltaV / I
    R0.(['temp' temperature_label{i}]) = (Em - voltVsSOC.(['temp' temperature_label{i}]))./current(ref_exp);
    % Construct LUT
    R0_LUT = [R0_LUT R0.(['temp' temperature_label{i}])];
end

Чтобы избежать резкого изменения R, близкого к SOC=0 удлинить R (0,9) до R (1). Это необходимо из-за того, как вычисляется R. Сделайте алгоритм устойчивым в случае, если 0.9 не является фактической точкой останова

if ~isempty(find(SOC_LUT==0.9, 1))
    R0_LUT(SOC_LUT>0.9,:) = repmat(R0_LUT(SOC_LUT == 0.9,:),length(R0_LUT(SOC_LUT>0.9,:)),1);
else
    [closestTo0p9, locClosestTo0p9] = min(abs(SOC_LUT-0.9));
    R0_LUT(SOC_LUT>closestTo0p9,:) = repmat(R0_LUT(locClosestTo0p9,:),...
                                     length(R0_LUT(SOC_LUT>closestTo0p9,:)),1);
end

Определите сопротивление батареи при различных температурах.

R0_LUT = max(R0_LUT,0);
T_LUT = 273.15 + temperature(ref_curr & ~val_exp);
[T_LUT1,idx] = sort(T_LUT);
xtmp=R0_LUT';
R0_LUT1(1:length(T_LUT),:) = xtmp(idx,:);

На рисунке 5 показано сопротивление батареи при различных температурах.

ex_datasheetbattery_plot_resistance

Шаг 6: Сравнение с поведением Аррениуса

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

Чтобы определить предсказание соответствия кривой для поведения Аррениуса, исследуйте энергию активации, Ea . Получите энергию активации через наклон внутреннего сопротивления, Ro , от 1000/T кривой для различных SOCs. Наклон равен энергии активации, Ea , разделенная на универсальную газовую константу, Rg .

Для литий-ионного аккумулятора типичное значение Ea составляет 20 кДж/моль [2]. Фигура показывает, что энергия активации, Ea , полученный по наклону, тесно сравнивается с 20 кДж/моль.

ex_datasheetbattery_plot_arrhenius
 
Activation energy for Li ion conduction
Ea = 17.9958       20.669      18.9557      22.8107      21.5289      24.0987 kJ/mol
Ea for electrolyte transport in Li ion battery = 20 kJ/mol

Шаг 7: подгонка сопротивления батареи

Подбор сопротивления батареи к подтвержденным данным о температуре в зависимости от SOC и температуры.

R0_LUT_bkpts = [];
counter = 1;
[SOC_LUT_index, ~] = find(abs(SOC_LUT-SOCbkpts)<0.001);

for i=find(ref_curr & ~val_exp)
    R0_LUT_bkpts = [R0_LUT_bkpts R0_LUT(SOC_LUT_index,counter)];
    counter = counter+1;
end

[xx,yy,zz] = prepareSurfaceData(1000./T_LUT,SOCbkpts,log(R0_LUT_bkpts));
[R0_vs_T_SOC_fit, gof] = fit([xx,yy],zz,'linearinterp');
% [R0_vs_T_SOC_fit, gof] = fit([xx,yy],zz,'poly12');
[xx1,yy1,zz1] = prepareSurfaceData(T_LUT,SOCbkpts,R0_LUT_bkpts);
[R0_vs_T_SOC_fit1, gof] = fit([xx1,yy1],zz1,'linearinterp');

На фигуры и 8 показаны объемные поверхностные диаграммы сопротивления батареи в зависимости от SOC и температуры.

ex_datasheetbattery_plot_surface

Шаг 8: Проверьте подгонку модели батареи

На фиг.9 показаны вычисленные данные и экспериментальные данные набора данных.

ex_datasheetbattery_plot_validation

Шаг 9: Установите параметры блоков батареи таблицы данных

Установите номинальную мощность при номинальной температуре в параметр с емкостью, заданной таблицей данных.

BattChargeMax = 100; % Ah Capacity from datasheet

Установите параметр данных таблицы напряжений разомкнутой цепи в Em.

Em=flipud(Em);

Установите параметр Open circuit voltage breakpoints 1 в состояние вектора заряда.

CapLUTBp=SOC_LUT;

Установите параметр данных таблицы внутреннего сопротивления в установленные данные сопротивления батареи в зависимости от SOC и температуры.

RInt=R0_LUT_bkpts';

Установите параметр Battery temperature breakpoints 1 в вектор температуры.

BattTempBp=T_LUT1;

Установите параметр Емкости батареи точек прерывания 2 в вектор SOC.

CapSOCBp=SOCbkpts;

Установите параметр Initial battery charge в значение, заданное таблицей данных.

BattCapInit=100;

Очистить.

clear x xx xx1 yy yy1 zz zz1;
clear batt_id col correct cap count counter current;
clear correct_cap current_label data exp_data fitObj fitSOC gof;
clear i I idx indicot j k label leg line_colors;
clear indigo N orange p1 p2 purple ref_curr ref_exp ref_temp row colorV f9 p10 p9;
clear sort_current sort_index_current sort_index_temp sort_temp;
clear temperature temperature_lable V val_exp valIdx voltVsSOC xtmp temperature_label;
clear Ea Em_MAT markerType1 R0 R0_LUT R0_LUT1 R0_LUT_bkpts R0_refTemp R0_vs_T_fit;
clear T R R0_vs_T_SOC_fit R0_vs_T_SOC_fit1 SOC_LUT SOCbkpts T_LUT T_LUT1 SOC_LUT_index;

Ссылки

[1] Джеки, Робин, Тарун Хурия, Массимо Чераоло и Хавьер Газзарри. «Высокоточная электрическая модель с тепловой зависимостью для характеристики и симуляции литиевых элементов батареи высокой степени». IEEE International Electric Vehicle Conference. Март 2012, стр. 1-8.

[2] Цзи, Янь, Яньчэн Чжан и Чао-Ян Ван. Журнал Электрохимического общества. Том 160, Выпуск 4 (2013), A636-A649.

См. также

| | | |