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

Этот пример показывает, как импортировать данные о листе литий-ионного аккумулятора и сгенерировать параметры для блока Datasheet Battery. Чтобы запустить пример, вам нужен Curve Fitting Toolbox™.

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

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

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

  • Напряжение разомкнутой цепи устанавливает точки останова 1

  • Внутренние табличные данные о сопротивлении

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

  • Мощность батареи устанавливает точки останова 2

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

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

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

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

exp_data=load(fullfile(matlabroot,'examples','autoblks','ex_datasheetbattery_liion_100Ah.mat'));

Пример не использует набор данных, который соответствует току 500 А в 25 ºC.

Постройте выброс и температурные кривые. Рисунок 1 показывает характеристики выброса литий-ионного аккумулятора при постоянной температуре (на пяти уровнях тока, показавшего Ящиком) и постоянного тока (при шести температурах). Рисунок 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 А.

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]) извлекло А-ч. Это позволяет кривым выброса быть алгебраически объединенными, чтобы вычислить сопротивление на каждом уровне 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]. Рисунок 6 указывает, что энергия активации, 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;
for i=find(ref_curr & ~val_exp)
    R0_LUT_bkpts = [R0_LUT_bkpts R0_LUT(idx',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');

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

ex_datasheetbattery_plot_surface

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

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

ex_datasheetbattery_plot_validation

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

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

BattChargeMax = 100; % Ah Capacity from datasheet

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

Em=flipud(Em);

Установите точки останова напряжения Разомкнутой цепи 1 параметр на вектор состояния заряда.

CapLUTBp=SOC_LUT;

Установите Внутренний табличный параметр данных о сопротивлении на подходящие данные о сопротивлении батареи как функция SOC и температуры.

RInt=R0_LUT_bkpts;

Установите точки останова температуры Батареи 1 параметр на температурный вектор.

BattTempBp=T_LUT1;

Установите точки останова мощности Батареи 2 параметра на вектор SOC.

CapSOCBp=SOCbkpts;

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

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;
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;

Ссылки

[1] Джеки, Робин, Tarun Huria, Массимо Чераоло и Хавьер Гассарри. "Высокое качество электрическая модель с тепловой зависимостью для характеристики и симуляции мощных литиевых элементов батареи". IEEE Международная Конференция по Электромобилю. Март 2012, стр 1-8.

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

Смотрите также