В этом примере показано, как импортировать данные листа литий-ионного аккумулятора и сгенерировать параметры для блока Datesheet Battery.
На шаге 1 вы импортируете данные таблицы данных. Шаги 2-5 показывают, как использовать методы аппроксимирования кривыми для получения напряжения разомкнутой цепи и сопротивления батареи от данных таблицы данных. На шагах 6-8 вы подтверждаете соответствие напряжения кривой и значений батареи, сравнивая их с поведением Аррениуса и данными таблицы данных. Наконец, на шаге 9 вы задаете следующие параметры блоков Datesheet Battery:
Номинальная производительность при номинальной температуре
Данные таблицы напряжений разомкнутой цепи
Разомкнутые точки прерывания напряжения 1
Данные таблицы внутреннего сопротивления
Точки прерывания температуры батареи 1
Точки останова емкости батареи 2
Начальный заряд батареи
Импортируйте таблицу данных о разряде и температуре батареи в MATLAB. Убедитесь, что каждый набор данных в таблице данных включает выходное напряжение стартового элемента батареи. Как правило, данные, собранные при различных температурах, имеют одинаковый базовый ток. Данные, собранные в разных токах, имеют одинаковую эталонную температуру.
В данном примере загрузите данные о разряде и температуре таблицы данных батареи для литий-ионного аккумулятора из файла, который содержит 12 наборов данных. Каждый набор данных соответствует данным о батарее для определенного тока и температуры. Каждый набор данных имеет два столбца. Первый столбец содержит пропускную способность, в процентах. Второй столбец содержит соответствующее напряжение элемента батареи.
exp_data=load('ex_datasheetbattery_liion_100Ah.mat');
В примере не используется набор данных, который соответствует току 500 A при 25 ° C.
Постройте график кривых разряда и температуры. На фиг.1 показаны характеристики разряда литий-ионного аккумулятора при постоянной температуре (при пяти уровнях тока, показанных как скорость C) и постоянном токе (при шести температурах). Фигура 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 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
Создание 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
Чтобы получить напряжение разомкнутой цепи, 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]. Фигура показывает, что энергия активации, 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; [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
На фиг.9 показаны вычисленные данные и экспериментальные данные набора данных.
ex_datasheetbattery_plot_validation
Установите номинальную мощность при номинальной температуре в параметр с емкостью, заданной таблицей данных.
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.
Battery.MetaData
| Battery.Parameters
| Battery.Pulse
| Battery.PulseSequence
| Datasheet Battery