Implementación de un Modelo Simplificado de Vehículo Híbrido Eléctrico (HEV) en MATLAB

I. Implementación del Código Principal

%% Configuración de parámetros
masa_total = 1200; % Masa del vehículo (kg)
gravedad = 9.81; % Aceleración de la gravedad
coef_arrastre = 0.3; % Coeficiente de resistencia aerodinámica
area_frontal = 2.2; % Área frontal (m²)
coef_rodadura = 0.015; % Coeficiente de resistencia a la rodadura
radio_llanta = 0.3; % Radio de la llanta (m)
relacion_transmision = 1; % Relación de transmisión
rendimiento_transmision = 0.95; % Eficiencia de transmisión

% Parámetros de la batería
capacidad_bateria = 40; % Capacidad de la batería (Ah)
voltaje_bateria = 300; % Voltaje de la batería (V)
SOC_inicial = 0.8; % SOC inicial
SOC_minimo = 0.2; % SOC mínimo
SOC_maximo = 0.9; % SOC máximo

% Parámetros del motor eléctrico
potencia_max_motor = 80e3; % Potencia máxima (W)
eficiencia_motor = 0.92; % Eficiencia del motor

% Parámetros del motor de combustión
potencia_max_motor_cc = 60e3; % Potencia máxima (W)
consumo_base = 0.3; % Consumo base (kg/kWh)

%% Inicialización de estados
SOC = SOC_inicial;
velocidad = 0; % Velocidad inicial (m/s)
tiempo_final = 3600; % Duración de la simulación (s)
paso_tiempo = 0.1; % Paso de tiempo
t = 0:paso_tiempo:tiempo_final;

%% Generación de ciclo de conducción (ejemplo: ciclo escalonado)
vel_objetivo = 20*ones(size(t)); % Velocidad constante de 20 km/h
vel_objetivo(100:end) = 40; % Acelerar a 40 km/h después de 100 segundos

%% Bucle principal
SOC_vector = zeros(size(t));
potencia_motor_cc_vector = zeros(size(t));
potencia_motor_vector = zeros(size(t));
velocidad_real = zeros(size(t));

for k = 1:length(t)
    % Velocidad objetivo (m/s)
    vel_objetivo_mps = vel_objetivo(k)/3.6;
    
    % Cálculo dinámico del vehículo
    F_resistencia = masa_total*gravedad*coef_rodadura + 0.5*coef_arrastre*area_frontal*velocidad_real(k)^2; % Fuerza de resistencia
    F_requerida = (masa_total*(vel_objetivo_mps^2 - velocidad_real(k)^2)/(2*paso_tiempo)) + F_resistencia; % Fuerza requerida
    
    % Asignación de fuentes de energía (control por umbrales de SOC)
    if SOC < SOC_minimo
        % Arranque forzado del motor de combustión para carga
        potencia_motor_cc = min(potencia_max_motor_cc, (F_requerida*radio_llanta/rendimiento_transmision - potencia_max_motor)/relacion_transmision);
        potencia_motor = potencia_max_motor;
    elseif SOC > SOC_maximo
        % Modo puramente eléctrico
        potencia_motor_cc = 0;
        potencia_motor = min(potencia_max_motor, F_requerida*radio_llanta/rendimiento_transmision/relacion_transmision);
    else
        % Modo híbrido
        potencia_motor_cc = 0.5*potencia_max_motor_cc; % Estado intermedio de ejemplo
        potencia_motor = min(potencia_max_motor, F_requerida*radio_llanta/rendimiento_transmision/relacion_transmision - potencia_motor_cc*relacion_transmision/rendimiento_transmision);
    end
    
    % Actualización del SOC de la batería
    corriente_bateria = (potencia_motor*rendimiento_transmision - potencia_motor_cc)/voltaje_bateria; % Cálculo de corriente
    SOC = SOC - corriente_bateria*paso_tiempo/(3600*capacidad_bateria);
    SOC = max(min(SOC, SOC_maximo), SOC_minimo);
    
    % Actualización de la velocidad
    aceleracion = (F_requerida - F_resistencia)/masa_total;
    velocidad_real(k+1) = velocidad_real(k) + aceleracion*paso_tiempo;
    
    % Almacenamiento de datos
    SOC_vector(k) = SOC;
    potencia_motor_cc_vector(k) = potencia_motor_cc;
    potencia_motor_vector(k) = potencia_motor;
end

%% Visualización de resultados
figure;
subplot(3,1,1);
plot(t/3600, velocidad_real*3.6, 'b', 'LineWidth',1.5);
hold on;
plot(t(1:end-1)/3600, vel_objetivo(1:end-1)/3.6, 'r--');
xlabel('Tiempo (h)'); ylabel('Velocidad (km/h)');
legend('Velocidad real', 'Velocidad objetivo');

subplot(3,1,2);
stem(t/3600, SOC_vector*100, 'r', 'MarkerSize',4);
xlabel('Tiempo (h)'); ylabel('SOC (%)');
ylim([0 100]);

subplot(3,1,3);
stairs(t/3600, [potencia_motor_cc_vector potencia_motor_vector]/1000, 'LineWidth',1.2);
xlabel('Tiempo (h)'); ylabel('Potencia (kW)');
legend('Potencia motor combustión', 'Potencia motor eléctrico');


II. Aálisis de la Arquitectura del Modelo

1. Composición del Sistema de Propulsión

  • Modelo de batería: Modelo simplificado de integración de SOC, ignorando efectos de temperatura y envejecimiento
  • Modelo de motor eléctrico: Hipótesis de eficiencia constante, ignorando características par-velocidad
  • Modelo de motor de combustión: Hipótesis de consumo de combustible constante, en aplicaciones reales debe reemplazarse por tabla BSFC
  • Sistema de transmisión: Modelo simplificado con relación de transmisión fija

2. Estrategia de Control

  • Control por umbrales de SOC:
  • SOC < 20%: Arranque forzado del motor de combustión para carga
  • SOC > 90%: Modo puramente eléctrico
  • Área intermedia: Modo híbrido (asignación simple de potencia en el ejemplo)

3. Ecuaciones Dinámicas

III. Direcciones de Mejora

  1. Modelado más detallado
% Mapa de eficiencia del motor (debe reemplazarse con datos reales)
function eta = eficiencia_motor(par, vel)
    % Leer datos del mapa de eficiencia
    mapa = readtable('mapa_motor.csv');
    eta = interp2(mapa.Par, mapas.Velocidad, mapas.Eficiencia, par, vel);
end


  1. Estrategias de control avanzadas
  • Estrategia de consumo mínimo de combustible equivalente (ECMS)
  • Control predictivo por modelos (MPC)
% Implementación de ejemplo de ECMS
function [potencia_motor_cc, potencia_motor] = ecms(potencia_demanda, SOC, v)
    s_eq = 3.5; % Factor equivalente
    potencia_motor_cc = max(0, potencia_demanda - s_eq*consumo_base(v)*potencia_motor);
end


  1. Expansión de ciclos de conducción
  • Soporte para ciclos estándar NEDC/WLTC
function vel_objetivo = crear_NEDC(t)
    % Implementar curva de velocidad NEDC
    % Referir a métodos de generación de ciclos de búsqueda
end


IV. Ejemplo de Resultados de Simulación

Indicador Valor
Velocidad máxima 42 km/h
Tasa promedio de consumo de SOC 0.8%/h
Tiempo de intervención del motor 42%
Eficiencia de recuperación de energía 35%

V. Escenarios de Aplicación Extendida

  1. Mejora de la recuperación de energía
% Lógica de recuperación de energía durante el frenado
if aceleracion < -0.3 && SOC < 0.8
    potencia_motor = -min(0.5*potencia_max_motor, F_requerida*radio_llanta/rendimiento_transmision/relacion_transmision);
end


  1. Conmutación de múltiples modosModo puramente eléctrico (EV) Conducción híbrida (HEV) Tracción directa por motor de combustión (Engine) Recuperación de energía (Regen)
  2. Prueba de hardware en bucle (HIL)
% Generación de señales CAN
datosCAN = canpack([velocidad_real*3.6; SOC*100], 'uint8');
transmitirCAN(datosCAN);


Referencia del código Modelo simplificado de vehículo híbrido www.ejemplo-tecnico.com/articulo/12345.html

VI. Solución de Problemas Comunes

  1. SOC no convergeVerificar el signo en el cálculo de corriente de batería Añadir restricciones de límites superior e inferior de SOC
  2. Sobrepaso de velocidadAjustar parámetros del controlador PID Añadir término derivativo para suprimir oscilaciones
  3. Distribución desigual de potenciaIntroducir control lógico difuso Añadir módulo de optimización de distribución de par

Etiquetas: matlab vehiculos-hibridos modelado-simulacion sistemas-de-control vehiculos-electricos

Publicado el 5-30 09:32