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
- 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
- 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
- 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
- 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
- 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)
- 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
- 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
- Sobrepaso de velocidadAjustar parámetros del controlador PID Añadir término derivativo para suprimir oscilaciones
- Distribución desigual de potenciaIntroducir control lógico difuso Añadir módulo de optimización de distribución de par