
目录一、概要1.1 原理介绍1.1.1 eMIOS1.1.2 PWM对齐方式二、主要配置项基于AUTOSAR MCAL2.1 Port模块配置2.2 MCU模块配置2.3 Mcl模块eMIOS通道配置2.3.1使能eMIOS2.3.2添加eMIOS通道2.3.3配置通道模式2.4 Pwm模块配置2.4.1 PwmEmios配置2.4.2 PwmChannel配置三、常用接口函数3.1 Pwm_Init3.2 Pwm_SetDutyCycle3.3 Mcl_Emios_SetCounterBusPeriod一、概要PWM驱动Pulse Width Modulation Driver为微控制器MCU中的增强型模块化IO子系统eMIOS模块提供初始化和控制服务。该驱动能够生成占空比和周期均可灵活配置的脉冲波形广泛应用于控制电机、LED调光、电源管理等领域。1.1 原理介绍1.1.1 eMIOS增强型模块化IO子系统eMIOS是Power Architecture等系列MCU中一个高度灵活的高级定时器外设。其核心特性包括统一通道UCs - Unified ChannelseMIOS提供多个独立的通道每个通道都可以被单独配置为输入、输出或计数器模式以实现复杂的时间事件生成与测量。计数器总线Counter Buses全局计数器总线Global Counter Bus为所有eMIOS通道提供统一的时基基准。局部计数器总线Local Counter Bus由一组通常为8个相邻通道中的特定“主”通道Type X生成仅作用于该组内的通道。每个总线都可以选择其时基来源内部计数器或另一个通道这为生成同步PWM信号提供了极大的灵活性。1.1.2 PWM对齐方式根据脉冲在周期内的对齐方式PWM主要分为两种模式边缘对齐模式Edge-Aligned Mode脉冲从周期开始处产生是最常见的模式。计数器从0向上计数到周期值然后复位。比较值决定输出翻转的时刻。中心对齐模式Center-Aligned Mode脉冲以周期中心为对称轴。计数器从0向上计数到周期值然后向下计数到0。比较值在向上和向下计数过程中各比较一次用于生成对称的脉冲。常用于电机控制可减少谐波干扰。二、主要配置项基于AUTOSAR MCAL2.1 Port模块配置在生成PWM输出前必须首先在Port Driver中将对应的MCU引脚功能配置为eMIOS模式使其连接到指定的eMIOS通道。示例计划使用eMIOS_1通道16EMIOS_1_CH16输出PWM则需要在Port配置中找到该引脚将其功能模式Port Pin Mode设置为EMIOS_1_CH16。通过此配置告诉Port驱动初始化后将18号引脚的功能从默认的GPIO切换到EMIOS_1_CH16模式。这样eMIOS1通道16内部产生的PWM波形就能顺利地通过这个引脚输出到外部电路。2.2 MCU模块配置在MCU Driver配置中需要使能eMIOS外设的时钟这个MCU配置是“给eMIOS外设通电”的一步。只有完成了这一步eMIOS模块才能开始计数和工作后续的通道模式配置和PWM生成才成为可能。2.3 Mcl模块eMIOS通道配置MclMicrocontroller Abstraction Layer Interface模块负责eMIOS通道的底层配置。2.3.1使能eMIOS在Mcl配置中启用eMIOS模块。2.3.2添加eMIOS通道enable EMIOS Common Support 这是一个总开关。勾选此项表示Mcl模块将包含对eMIOS外设的支持允许您后续对eMIOS实例和通道进行详细配置。如果没有这个使能后续所有eMIOS配置都将无效。2.3.3配置通道模式将通道的工作模式Mode设置为PWM生成所需的模式例如MCU_EMIOS_MODE_OPWMB输出 PWM缓冲模式或MCU_EMIOS_MODE_OPWMC中心对齐PWM模式。Enable EMIOS freez state 此选项通常与调试功能相关。当勾选时✅意味着当芯片调试器请求冻结Halt时eMIOS模块也会停止工作计数器停止计数。这在调试时非常有用可以暂停PWM输出以检查系统状态。如果不勾选即使内核被调试器暂停eMIOS也会继续运行。这个配置的作用是初始化eMIOS外设的全局寄存器当Mcl_Init函数运行时它会根据此配置对EMIOS_0和EMIOS_1的通用控制寄存器进行初始化。设置调试行为决定了在调试期间eMIOS是否继续运行。简单来说这个Mcl通用配置是“告知系统有哪些eMIOS模块以及它们的一些全局行为”。这是对之前MCU配置给eMIOS通电的补充为后续配置具体的通道功能做好了准备。2.4 Pwm模块配置2.4.1 PwmEmios配置将PWM驱动与具体的eMIOS硬件通道绑定。此配置创建了一个名为PwmEmios_0的硬件资源它代表物理上的eMIOS1模块。PWM通道将会使用这个硬件资源。配置项配置值解释Channel IdCH_16指定要配置的物理通道号选择在Mcl中已配置好的eMIOS通道这里配置的是eMIOS1的CH16。Mode selectPWM_IP_MODE_OPWFMB关键配置设置通道的工作模式。-OPWMB: 输出脉冲宽度调制缓冲模式缓冲的、边缘对齐的PWM模式此模式允许在周期中间安全地更新占空比寄存器。Flag GenerationTrailing_Edge设置何时产生标志位中断或DMA请求。Trailing_Edge通常在脉冲下降沿产生用于同步软件操作。Counter BusPWM_IP_BUS_INTERNAL选择时基来源INTERNAL表示该通道使用自己的内部计数器作为时基。也可以选择公共总线Global或Local Bus以实现多个通道的同步需参考芯片数据手册确保总线源配置正确。Freeze enable\继承自Mcl的全局配置或此处单独设置控制调试时是否冻结。Output Disable SourceOUTPUT_DISABLE_NONE选择在何种情况下强制禁用PWM输出置为无效状态NONE表示输出始终由eMIOS自身控制。Clock prescalerPWM_IP_CLOCK_DIV_2时钟预分频器。设置内部计数器的时钟频率。DIV_2表示对输入给eMIOS的模块时钟进行2分频。Prescaler Clock SourceIP_PS_SRC_MODULE_CLOCK预分频器的时钟源。MODULE_CLOCK表示直接使用来自MCU配置的eMIOS模块时钟。此配置的作用是“教会硬件如何工作”。它直接翻译为对eMIOS1模块的通道16控制寄存器(CCR)、通道状态寄存器(CSTR)等的一系列写入操作从而将其初始化为一个PWM发生器以上配置完成了硬件绑定PwmEmios_0配置块指向了物理硬件eMIOS1。通道功能定义将eMIOS1的通道16配置为PWM生成模式(OPWFMB)并详细设置了其工作时所需的各项参数时基、分频等。关键选择选择了内部计数器(INTERNAL)这意味着该通道的PWM周期是独立的不受其他通道影响。如果要同步多个通道需选择共享的Bus。2.4.2 PwmChannel配置此部分定义PWM通道的逻辑属性。配置项配置值解释NamePwmChannel_0此逻辑PWM通道的名称。代码中将使用这个标识符来引用该通道。PwmHwChannelPwm/Pwm/PwmChannelConfigSet/通道绑定。引用前面在PwmEmios中配置好的硬件通道将逻辑通道与硬件通道关联起来。Channel classPWM_FIXED_PERIOD通道类别FIXED_PERIOD表示这是一个固定周期的PWM通道。占空比可变但周期在初始化后固定不变。Default Period0默认周期值单位计数 ticks该值决定了PWM波的频率。Default Duty cycle32768默认占空比。遵循AUTOSAR规范-0x0000(0) 0%-0x8000(32768) 100%-0x4000(16384) 50%此处设置为32768表示通道初始化后输出100%占空比。PolarityPWM_HIGHPWM极性。HIGH表示-有效状态Active State为高电平。- 占空比计算的是输出高电平的时间。Idle statePWM_LOW空闲状态。当PWM驱动被禁用Pwm_Disable或发生错误时引脚应输出的电平。LOW表示此时输出低电平。Notification functionNULL_PTR通知函数。用于在PWM周期结束或其他事件时触发一个回调函数。NULL_PTR表示不使用通知功能。MCU clock reference/McuClockSettingConfig_0/CORE_CLK时钟参考。按芯片手册要求配置时钟源将该通道的时基绑定到内核时钟CORE_CLK。PwmReferenceChannel\如果使用公共计数器总线通常需要指定一个主通道Master Channel来提供时基。这个配置实现了硬件抽象通过PwmHwChannel项逻辑通道PwmChannel_0抽象并控制着底层硬件EMIOS_1_CH16。行为定义定义了通道的软件行为如默认状态、极性、空闲状态和是否使用中断通知。关键参数设置了初始的周期和占空比。三、常用接口函数3.1Pwm_Init功能初始化PWM驱动模块。说明该函数根据上述所有配置Port, Mcl, Pwm对eMIOS硬件和PWM驱动状态进行初始化。必须在调用任何其他PWM API之前执行一次通常在main函数或ECU状态管理器EcuM_Init中调用。参数通常接受配置容器PwmConfig作为参数。3.2Pwm_SetDutyCycle功能动态设置指定PWM通道的占空比。函数原型void Pwm_SetDutyCycle(Pwm_ChannelType ChannelNumber, uint16 DutyCycle); // ChannelNumberPWM通道号。此ID是在PwmChannel配置中定义的逻辑通道号与eMIOS物理通道号映射。 // DutyCycle占空比设定值。V调用示例// 将通道PwmChannel_1的占空比设置为50% Pwm_SetDutyCycle(PwmChannel_1, 0x4000);3.3Mcl_Emios_SetCounterBusPeriod功能修改指定计数器总线Counter Bus的周期/频率。重要说明此函数直接修改计数器总线的时基。所有使用此总线作为时钟源的PWM通道的输出频率都会同步改变。使用时需特别注意其对系统的影响。参数通常需要指定目标总线ID和新的周期值。调用示例// 设置eMIOS全局总线A (Global Bus A) 的周期 // 假设 0x1000 是新的计数值时钟源为Core Clock (80MHz) // 新频率 80MHz / 0x1000 Mcl_Emios_SetCounterBusPeriod(EMIOS_GLOBAL_BUS_A, 0x1000);