芯源半导体CW32
直播中

李伟

8年用户 1629经验值
私信 关注
[问答]

请问CW32的pwm移相功能是只有PWM通道1有还是全部都可以配置?

请问CW32的pwm移相功能是只有PWM通道1有还是全部都可以配置?做三相移相时需不需要额外的处理?

回帖(1)

李红

2025-11-28 18:10:26

关于CW32微控制器(以CW32F030系列为例)的PWM移相功能及三相移相实现,具体分析如下:


1. PWM移相功能是否仅限于通道1?



  • 所有通道均可配置移相:

    CW32的TIM(高级定时器TIM1和通用定时器TIMx)在中央对齐模式下支持相位偏移功能。此功能通过设置TIM_REP寄存器实现,作用于当前TIM模块的所有通道

    关键点:

    • TIM_REP寄存器的值定义了计数器初始计数值(相位偏移量),范围为 0x0000 - 0xFFFF。计数器从 REP 值开始计数。

    • 同一TIM模块的所有通道(CH1, CH2, CH3, CH4)共享同一个计数器。因此,设置TIM_REP会影响该TIM模块输出的所有4路PWM信号的整体相位

    • 结论: 移相功能不是通道1独有的。它配置的是一个TIM模块内所有通道的共同相位偏移基准。所有通道都可以利用这个基准进行移相输出。



2. 做三相移相时需不需要额外的处理?




  • 需要非常关键的额外配置:

    虽然所有通道都有移相能力(通过TIM_REP设置整体偏移),但TIM_REP只能设置一个全局偏移值。三相移相需要三个相位互差120° 的PWM信号(例如U, V, W相)。仅靠TIM_REP无法为每个通道设置独立的相位差

    实现三相移相的核心方法:
    利用通道的“输出比较”功能 + 中央对齐模式 + TIM_REP设置基准相位。

    以下是配置步骤:




    1. 选择TIM模式:

      配置TIM工作于中央对齐模式1或2(Up-Down计数模式)。这是生成对称PWM的基础。




    2. 配置全局相位基准 (TIM_REP):

      设置TIM_REP寄存器为所需起始相位(例如0°对应的计数值)。这决定了整个TIM模块输出波形的基准相位。




    3. 配置各通道相位差:

      这是关键!通过设置不同通道的捕获/比较寄存器 (TIM_CHxCCR) 来实现各相之间的相位差。



      • 原理: 在中央对齐模式下:

      • 计数器从REP值开始向上计数到TIM_AAR(自动重载值),然后向下计数到0(或某个值,具体模式决定)。

      • 通道输出模式配置为翻转模式(例如TIM_OCMode_Toggle)或PWM模式1/2

      • 当计数器值等于通道的TIM_CHxCCR寄存器值时,会发生比较匹配事件。

      • 在翻转模式下,匹配时会翻转输出电平;在PWM模式下,匹配时会根据模式改变输出电平。

      • 实现相位差:

        要生成互差120°的波形(如U, V, W):

      • U相: 设置TIM_CH1CCR(假设CH1为U相)。

      • V相: 设置TIM_CH2CCR = TIM_CH1CCR + (1/3)*Period(Period为周期对应的计数值 = TIM_AAR)。

      • W相: 设置TIM_CH3CCR = TIM_CH1CCR + (2/3)*Period(或等效的 TIM_CH2CCR + (1/3)*Period)。


      例如:

      周期计数值 Period = 60000(对应360°)。  



      • U相 (CH1): TIM_CH1CCR = 0 (或任意基准值,最终相位由REPCCR共同决定)。  

      • V相 (CH2): TIM_CH2CCR = 20000 (120°对应 60000 / 3 = 20000)。  

      • W相 (CH3): TIM_CH3CCR = 40000 (240°对应 60000 * 2/3 = 40000)。

        配合合适的输出模式(翻转或PWM模式)和TIM_REP设置的全局偏移,即可得到相位互差120°的三相PWM。




    4. 配置输出模式和极性:

      根据需要使用TIM_OCMode(输出比较模式)配置为翻转模式或PWM模式,并用TIM_OCPolarity设置初始输出极性(高有效或低有效)。




    5. 死区时间(Dead Time)配置:

      对于驱动三相全桥逆变器等应用,同一桥臂的上下管信号(如UH/UL, VH/VL, WH/WL)需要插入死区时间防止直通。这需要额外的硬件支持:



      • 高级定时器 (TIM1): CW32的高级定时器TIM1内置刹车和死区控制单元 (BDTR)。可以在互补通道(如CH1/CH1N)之间配置死区时间。

      • 通用定时器 (TIM2, TIM3, TIM4): 这些定时器不具备内置死区发生器。如果需要死区:

      • 方案一: 使用TIM1来生成带死区的互补PWM对。

      • 方案二: 在通用定时器输出的PWM信号基础上,通过外部逻辑电路(如专用死区芯片、RC延迟加逻辑门)或软件模拟(占用更多CPU资源,精度稍差)来插入死区。




    6. 同步处理:



      • 如果使用多个TIM模块(例如TIM1生成U/V相,TIM2生成W相),需要用主从模式或外部事件触发等方式同步它们的计数器启动(TIMx_CR1.CEN位),确保三个TIM模块的计数严格同步。否则相位关系会漂移。






总结



  1. 移相范围: CW32的PWM移相功能(通过TIM_REP设置)作用于整个TIM模块的所有通道,并非仅通道1可用。它为该TIM的所有通道设定一个共同的相位偏移基准。

  2. 三相移相实现: 实现三相120°移相必须结合:

    • 中央对齐模式(Up-Down计数)。

    • 为每个通道设置不同的捕获/比较寄存 (TIM_CHxCCR) 值。这是产生通道间独立相位差的关键。

    • TIM_REP 设置全局相位基准。

    • 正确的通道输出模式(翻转模式或PWM模式)。

    • 死区时间处理: 必须依赖高级定时器TIM1的硬件死区功能外部电路/软件模拟

    • 多TIM同步: 如果使用多个TIM模块,需要配置同步机制确保计数器同时启动。



因此,CW32完全有能力在一个TIM模块内(如TIM1或任意TIMx)生成相位互差120°的三相PWM信号,但核心是靠配置各通道不同的CCR值来实现相位差,而不是仅靠TIM_REP。死区控制是三相驱动不可或缺的部分,需要特别注意硬件支持(首选TIM1)。


参考配置流程(以TIM1三相为例):



  1. 配置TIM1时钟源、预分频器、ARR(周期)。

  2. 设置计数模式:中央对齐模式1或2。

  3. 设置TIM1_REP为期望的基准相位(例如0)。

  4. 配置通道1、2、3:

    • 模式:PWM模式1或2(或翻转模式)。

    • 极性:根据驱动电路要求设置。

    • CCR值:设置CH1CCR=基准值,CH2CCR=基准值+Period/3,CH3CCR=基准值+2*Period/3。


  5. 配置刹车和死区控制寄存器TIM1_BDTR

    • 设置死区时间 (BDT[7:0])。

    • 使能主输出 (MOE = 1)。

    • 配置互补通道极性。


  6. 使能通道预装载(TIM1_CCMRx中的OCxPE)。

  7. 启动计数器 (TIM1_CR1.CEN = 1)。


按照以上步骤即可在TIM1的CH1、CH2、CH3(及其互补通道CH1N、CH2N、CH3N,带死区)上输出相位互差120°的三相PWM信号。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分