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

В этом примере показано, как импортировать литий-ионный аккумулятор покрывают данные и сгенерировать параметры для блока 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.

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

Для просмотра документации необходимо авторизоваться на сайте