В этом примере показано, как импортировать данные листа литий-ионной батареи и создать параметры для блока «Таблица данных батареи».
На шаге 1 выполняется импорт данных таблицы. Шаги 2-5 показывают, как использовать методы подбора кривой для получения напряжения разомкнутой цепи и сопротивления батареи из данных таблицы данных. На этапах 6-8 выполняется проверка значений напряжения и батареи, соответствующих кривой, путем сравнения их с поведением Аррениуса и данными таблицы данных. Наконец, на шаге 9 задаются следующие параметры блока «Таблица данных по батарее»:
Номинальная мощность при номинальной температуре
Данные таблицы напряжения разомкнутой цепи
Разомкнутые прерыватели напряжения 1
Данные таблицы внутреннего сопротивления
Точки останова аккумулятора 1
Точки останова емкости аккумулятора 2
Начальный заряд батареи
Импортируйте в MATLAB спецификации разрядки аккумулятора и температуры. Убедитесь, что каждый набор данных в таблице содержит выходное напряжение стартового аккумуляторного элемента. Обычно данные, собранные при различных температурах, имеют одинаковый опорный ток. Данные, собранные при различных токах, имеют одинаковую контрольную температуру.
Для этого примера загрузите данные о разряде и температуре в спецификации батареи для литий-ионной батареи из файла, содержащего 12 наборов данных. Каждый набор данных соответствует данным батареи для определенного тока и температуры. Каждый набор данных имеет два столбца. Первая колонка содержит разрядную емкость, в процентах. Второй столбец содержит соответствующее напряжение аккумуляторной батареи.
exp_data=load('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 ° С и эталонному току 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 показана зависимость напряжения от тока в различных узлах.
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 для различных SOC. Наклон равен энергии активации, 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; [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');
На фиг.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';
Установите для параметра Battery temperature breakpoints 1 вектор температуры.
BattTempBp=T_LUT1;
Установите для параметра Battery capacity breakting points 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. Март 2012, стр. 1-8.
[2] Цзи, Янь, Яньчэн Чжан и Чао-Ян Ван. Журнал Электрохимического общества. Том 160, выпуск 4 (2013), A636-A649.
Battery.MetaData | Battery.Parameters | Battery.Pulse | Battery.PulseSequence | Лист технических данных Аккумулятор