SRM混合动力车电池充电模拟分割转换器研究

版权申诉
0 下载量 92 浏览量 更新于2024-10-17 收藏 63KB RAR 举报
资源摘要信息:"该资源包包含两个Simulink模型文件,旨在模拟用于混合动力汽车驱动的开关磁阻电机(SRM)的分割转换器充电过程。标题表明,这是一个与混合动力车辆电池充电相关的工作,其中使用了分割转换器。而描述部分则详细说明了这些模型文件的具体作用,即通过模拟一个分割转换器来为混合动力车辆的电池充电。标签中的关键词提示了这个资源与开关磁阻电机(SRM)驱动、混合动力车辆、分割转换器以及开关磁阻电机有关。" 知识点详细说明: 1. 开关磁阻电机(SRM):开关磁阻电机是一种利用磁阻变化原理来产生运动和力矩的电机。它不同于传统电机,具有结构简单、可靠性高、成本低等优点,适合在恶劣的环境下工作,因此在工业应用、电动车等领域得到广泛应用。 2. 混合动力车辆:混合动力车辆指的是至少包含两种不同动力源的车辆,通常情况下指的是传统内燃机和电动机的组合。混合动力系统可以有效地提高汽车的燃油效率,减少排放,并且可以在不同的驾驶条件下自动切换或组合使用两种动力源以获得最佳的经济性和动力性。 3. 分割转换器:分割转换器在电力电子转换器中是一种特殊的配置,它可以将一个母线电压分割成多个输出电压,通常用于电池管理系统(BMS)中对电池单元进行串联充电。这种转换器的特点是可以在不改变整体电源电压的情况下对各个电池单元进行单独控制,优化电池组的充电过程,提高充放电效率,延长电池寿命。 4. 电池充电:在混合动力车辆中,电池的充电是一个非常关键的过程。电池的充电效率、充电速度和充电控制策略都会直接影响到车辆的续航能力和电池的健康状况。为了实现高效的充电,可能需要复杂的控制策略和充电电路设计,以保证在不同的充电状态下都能安全有效地为电池充电。 5. Simulink模型:Simulink是MathWorks公司推出的一款基于MATLAB的图形化编程环境,专门用于模拟动态系统。用户可以通过拖拽的方式建立起系统的数学模型,并在Simulink提供的仿真环境中进行模拟和分析。对于工程师来说,Simulink是研究、设计和测试控制策略、信号处理和通信系统等复杂系统的一个非常有用的工具。 6. SRM驱动:SRM驱动指的是利用开关磁阻电机原理设计的电机控制系统。在混合动力车辆的驱动系统中,SRM驱动可以提供高效的电动机驱动能力,同时还能够实现有效的能量回收。SRM驱动系统中的电机和控制器设计与传统驱动系统存在较大差异,需要特别的控制算法和保护策略以保证系统稳定运行。 7. 文件名称列表:资源包中包含两个Simulink模型文件,分别是SR_Charge.slx和SR_Motor.slx。这两个文件分别代表了与电池充电相关的分割转换器模型和与开关磁阻电机驱动相关的模型。这些模型可能包含电机控制、电池充电策略、能量管理等关键部分的设计和仿真。 总结来说,这个资源包为研究者和工程师提供了一套完整的混合动力车辆SRM驱动系统的仿真模型,涵盖了分割转换器设计、电池充电管理以及电机控制等多个方面。通过这些Simulink模型,可以对混合动力车辆的关键技术进行深入的研究和开发。

class srmNeuronFunc(object): funclists = ['srm_forward<float>', 'srm_backward<float>'] cu_module = cp.RawModule(code=CU_SOURCE_CODE_RAW_STRING, options=('-std=c++11', '-I ' + _CURPATH), name_expressions=funclists) neuron_FP = cu_module.get_function(funclists[0]) neuron_BP = cu_module.get_function(funclists[1]) @staticmethod def forward(inputs: Tensor, taum: float, taus: float, e_taug: float, v_th: float) -> List[Tensor]: spikes = torch.zeros_like(inputs) delta_ut = torch.zeros_like(inputs) delta_u = torch.zeros_like(inputs) B, T, dim = *inputs.shape[:2], inputs[0][0].numel() with cp.cuda.Device(inputs.get_device()): srmNeuronFunc.neuron_FP(((B * dim + 1023) // 1024,), (1024,), ( tensor_to_cparray(inputs.contiguous()), tensor_to_cparray(spikes.contiguous()), tensor_to_cparray(delta_ut.contiguous()), tensor_to_cparray(delta_u.contiguous()), cp.float32(taum), cp.float32(taus), cp.float32(e_taug), cp.float32(v_th), cp.int32(B), cp.int32(T), cp.int32(dim) )) return spikes, delta_ut, delta_u @staticmethod def backward(grad_out: Tensor, delta_ut: Tensor, delta_u: Tensor, spikes: Tensor, epsw: Tensor, epst: Tensor) -> List[Tensor]: grad_w = torch.zeros_like(grad_out) grad_t = torch.zeros_like(grad_out) B, T, dim = *grad_out.shape[:2], grad_out[0][0].numel() with cp.cuda.Device(grad_out.get_device()): srmNeuronFunc.neuron_BP(((B * dim + 1023) // 1024,), (1024,), ( tensor_to_cparray(grad_out.contiguous()), tensor_to_cparray(delta_ut.contiguous()), tensor_to_cparray(delta_u.contiguous()), tensor_to_cparray(spikes.contiguous()), tensor_to_cparray(epsw), tensor_to_cparray(epst), tensor_to_cparray(grad_w.contiguous()), tensor_to_cparray(grad_t.contiguous()), cp.int32(B), cp.int32(T), cp.int32(dim) )) return grad_w, grad_t

2023-05-25 上传
2023-05-25 上传