Этот пример показывает, как импортировать данные о листе литий-ионного аккумулятора и сгенерировать параметры для блока Datasheet Battery. Чтобы запустить пример, вам нужен Curve Fitting Toolbox™.
На шаге 1 вы импортируете данные о таблице данных. Шаги 2-5 показывают, как использовать методы подбора кривых, чтобы получить напряжение разомкнутой цепи и сопротивление батареи от данных о таблице данных. На шагах 6-8 вы подтверждаете подходящее кривой напряжение и значения батареи путем сравнения их с поведением Аррениуса и данными о таблице данных. Наконец, на шаге 9, вы задаете эти параметры блоков Батареи Таблицы данных:
Номинальная мощность при номинальной температуре
Табличные данные о напряжении разомкнутой цепи
Напряжение разомкнутой цепи устанавливает точки останова 1
Внутренние табличные данные о сопротивлении
Температура батареи устанавливает точки останова 1
Мощность батареи устанавливает точки останова 2
Начальный заряд батареи
Импортируйте выброс батареи и температурную таблицу данных в 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
Чтобы представлять способность 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
Создайте кривые 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
Чтобы получить напряжение разомкнутой цепи, 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';
Используйте выброс и температурные данные, чтобы определить сопротивление батареи как функцию текущих и 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
Поскольку температурно-зависимая скорость реакции для литий-ионного аккумулятора следует за поведением Аррениуса, можно использовать сравнение, чтобы подтвердить подгонку кривой.
Чтобы определить подходящий кривой прогноз для поведения Аррениуса, исследуйте энергию активации, 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
Соответствуйте сопротивлению батареи подтвержденным температурным данным как функция 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
Рисунок 9 показывает расчетные данные и данные о наборе экспериментальных данных.
ex_datasheetbattery_plot_validation
Установите Номинальную мощность в номинальном температурном параметре к способности, обеспеченной таблицей данных.
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.