I am PulseSequence object of MATLAB to estimate equivalent circuit parameters of an Lithium ion battery. Residual voltage levels are high. How to reduce it?
5 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
I am planning to estimate the equivalent circuit parameters of Panasonic 18650 F Lithium ion battery. I am using Open souce mandeley HPPC data. (https://data.mendeley.com/datasets/wykht8y7tg/1) To achieve this I am using PulseSequence object of MATLAB as explain in (https://in.mathworks.com/help/autoblks/ug/generate-parameter-data-for-estimations-circuit-battery-block.html). I am able to estimate the parameters for the entire range of SoC. But the problem is I am not able to reduce the residual voltage levels. They are of the order of mean : 250 mV and max 1.1 V. Kindly help me to reduce these values so that estimated parameters are accurate.
after performing design optimisation the resulting fit of output voltages further mismatch. Kindly suggest the way out to improve this.
Thank You,
psObj = Battery.PulseSequence;
disp(psObj);
files = '05-20-17_10.44 0degC_5pulse_HPPC_Pan18650PF.mat';
load(files);
fields = ["TimeStamp","Wh","Power","Battery_Temp_degC","Chamber_Temp_degC"];
meas = rmfield(meas,fields);
meas = struct2cell(meas);
meas=cell2mat(meas);
voltage=meas(1:85260,:);
current=meas(85261:170520,:);
Ah=meas(170521:255780,:);
Time=meas(255781:341040,:);
time=Time;
% psObj.addData(Time,Voltage,Current);
psObj.Data(1:85260,1) = time;
psObj.Data(1:85260,2)=voltage;
psObj.Data(1:85260,3)=-current;
psObj.Data(1:85260,4)=Ah;
psObj.Data(1:85260,5)=1-(-Ah/2.9);
psObj.CapacityAh(1,1) = 2.9;
psObj.plot()
openExample('shared_autoblks_mbc/EstEqCircuitLithiumIonBatteryDataExample')
psObj.createPulses(...
'CurrentOnThreshold',0.1,... %minimum current magnitude to identify pulse events
'NumRCBranches',2,... %how many RC pairs in the model
'RCBranchesUse2TimeConstants',false,... %do RC pairs have different time constant for discharge and rest?
'PreBufferSamples',10,... %how many samples to include before the current pulse starts
'PostBufferSamples',15); %how many samples to include after the next pulse starts
psObj.ModelName = 'BatteryEstim3RC_PTBS';
psObj.plotIdentifiedPulses();
PulsesToTest = [1 floor(psObj.NumPulses/2), psObj.NumPulses-1];
psObj.Pulse(PulsesToTest).compareRelaxationTau();
Params = psObj.Parameters;
Params.Tx(1,:,:) = 0.5;
Params.Tx(2,:,:) = 10;
% Params.Tx(3,:,:) = 200;
Params.TxMin(1,:,:) = 0.1;
Params.TxMax(1,:,:) = 2;
Params.TxMin(2,:,:) = 2;
Params.TxMax(2,:,:) = 200;
% Params.TxMin(3,:,:) = 100;
% Params.TxMax(3,:,:) = 3500; %don't set this bigger than the relaxation time available
%Update the parameters.
psObj.Parameters = Params;
% Estimate the initial Em and R0 values. Plot the results.
psObj.estimateInitialEmR0(...
'SetEmConstraints',false,... %Update EmMin or EmMax values based on what we learn here
'EstimateEm',true,... %Keep this on to perform Em estimates
'EstimateR0',true); %Keep this on to perform R0 estimates
psObj.plotLatestParameters();
% Get the initial Tx (Tau) values. This step performs curve fitting on the pulse relaxation to estimate the RC time constant at each SOC.
psObj.estimateInitialTau(...
'UpdateEndingEm',false,... %Keep this on to update Em estimates at the end of relaxations, based on the curve fit
'ShowPlots',true,... %Set this true if you want to see plots while this runs
'ReusePlotFigure',true,... %Set this true to overwrite the plots in the same figure
'UseLoadData',false,... %Set this true if you want to estimate Time constants from the load part of the pulse, instead of relaxation
'PlotDelay',0.5); %Set this to add delay so you can see the plots
% Plot the results.
psObj.plotLatestParameters();
psObj.plotSimulationResults();
% Get initial Em and Rx values using a linear system approach - pulse by pulse. This step takes the data for each pulse and treats it as a linear system. It fits the Rx values for each RC branch. Optionally, you can allow it to adjust the Em and R0 values, and if these are adjusted, you also have the option whether to retain the optimized values of these or to discard them.
psObj.estimateInitialEmRx(...
'IgnoreRelaxation',false,... %Set this true if you want to ignore the relaxation periods during this step
'ShowPlots',true,... %Set this true if you want to see plots while this runs
'ShowBeforePlots',true,... %Set this true if you want to see the 'before' value on the plots
'PlotDelay',0.5,... %Set this to add delay so you can see the plots
'EstimateEm',false,... %Set this true to allow the optimizer to change Em further in this step
'RetainEm',false,... %Set this true keep any changes made to Em in this step
'EstimateR0',false,... %Set this true to allow the optimizer to change R0 further in this step
'RetainR0',false); %Set this true keep any changes made to R0 in this step
% Plot the results
psObj.plotLatestParameters();
psObj.plotSimulationResults();
% Perform design optimization estimation.
% opts = optimoptions('lsqnonlin','Display','off');
%
% SDOOptimizeOptions = sdo.OptimizeOptions(...
% 'OptimizedModel',psObj.ModelName,...
% 'Method','lsqnonlin',...
% 'MethodOptions',opts,...
% 'UseParallel','always');
% SDOOptimizeOptions.UseParallel(1,1) = 0;
% psObj.estimateParameters(...
% 'CarryParamToNextPulse',true,... %Set this true to use the final parameter values from the prior pulse and SOC as initial values for the next pulse and SOC
% 'SDOOptimizeOptions',SDOOptimizeOptions,... %Specify the SDO options object
% 'ShowPlots',true,... %Set this true if you want to see plots while this runs
% 'EstimateEm',true,... %Set this true to allow the optimizer to change Em further in this step
% 'RetainEm',true,... %Set this true keep any changes made to Em in this step
% 'EstimateR0',true,... %Set this true to allow the optimizer to change R0 further in this step
% 'RetainR0',true); %Set this true keep any changes made to R0 in this step
% % Plot the results
% psObj.plotLatestParameters();
% psObj.plotSimulationResults();
0 Commenti
Risposte (0)
Vedere anche
Categorie
Scopri di più su Deep Learning Toolbox in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!