Edit online

计数器功能模块

19 Nov 2024
Read time: 3 minute(s)

计数时钟

计数器的时钟 EPWM_CNT_CLK 由 SYS_CLK 进行分频得出:

EPWM_CNT_CLK = SYS_CLK / (Divisor1 * Divisor2)
  • Divisor1/2 为寄存器 EPWM_CLK_DIV1/2。
    • 除数 Divisor1 的可配置范围为 1/ 2/ 4/ 6/ 8/ 10/ 12/ 14。
    • 除数 Divisor2 的可配置范围为 1/ 2/ 4/ 8/ 16/ 32/ 64/ 128。
    • SYS_CLK 经过 Divisor1 得到的 EPWM_XADC_CLK 用于控制外部触发 ADC 转换的信号长度。
  • 为确保 EPWM_S0/S1/S2 三个子模块的计数时钟可以同步,需要一个全局的控制信号 EPWM_CNT_GLB_EN。同步的方式如下:

    • 配置 EPWM_CNT_GLB_EN = 0,关闭所有的 EPWM 子模块的功能
    • 配置各个 EPWM 子模块的各自参数。
    • 使能各个 EPWM 子模块。
    • EPWM_CNT_GLB_EN = 1,打开所有使能的 PWM 子模块的计数功能,计数器开始计数。

    为了获得较好的时钟同步效果,各个使能的 PWM 子模块需要配置相同的计数器时钟分频系统。

计数方式

寄存器字段 EPWM_CNT_MOD ,可以配置计数器的以下计数方式:
  • 递增计数:计数器从 0 开始递增计数,计数至 EPWM_CNT_PRDV 值时,完成一个周期的计数,并且复位至 0 重新开始计数。
    计数器递增计数图示 中,设置 EPWM_CNT_PRDV = 6 的递增计数,此时开始从 0 到 6 的递增计数:
    • 在计数值为 0 时,信号 EPWM_CNT_Z = 1
    • 在计数值为EPWM_CNT_PRDV 的时候,信号EPWM_CNT_PRD = 1
    • 而指示计数方向的信号EPWM_CNTD 一直为高电平,指示为递增计数。


    1. 计数器递增计数图示
  • 递减计数:计数器从 EPWM_CNT_PRDV 开始递减计数,计数至 0 时,完成一个周期的计数,并且复位至 EPWM_CNT_PRDV 重新开始计数。
    计数器递减计数图示中,设置 EPWM_CNT_PRDV = 6 的递减计数,此时进行从 6 到 0 递减计数:
    • 在计数值为 0 的时候,信号 EPWM_CNT_Z = 1。
    • 在计数值为 EPWM_CNT_PRDV 的时候,信号 EPWM_CNT_PRD = 1。
    • 指示计数方向的信号 EPWM_CNTD 一直为低电平,指示为递减计数。


    2. 计数器递减计数图示
  • 先递增后递减计数:计数器从 0 开始递增计数,计数至 EPWM_CNT_PRDV 后进行递减计数,当计数器计数为 1,完成一个周期的计数。下一个周期继续从 0 开始进行先递增后递减计数。
    计数器先递增后递减计数示例中,设置 EPWM_CNT_PRDV = 6 的先递增再递减计数,此时进行先从 0 到 6 的递增计数再从 6 到 0 的递减计数:
    • 在计数值为 0 的时候,信号 EPWM_CNT_Z = 1。
    • 在计数值为 EPWM_CNT_PRDV 的时候,信号 EPWM_CNT_PRD = 1。
    • 指示计数方向的信号 EPWM_CNTD 在前半周期为高电平指示此时为递增计数,后半周期指示为递减计数。


    3. 计数器先递增后递减计数示例

计数比较

在计数数值达到预设的设定值时,即达到 EPWM_CNT_AV 与 EPWM_CNT_BV 时,计数器可以产生相应的信号 EPWM_CNT_A 与 EPWM_CNT_B。

为了区分计数的方向:
  • 若为递增计数至 EPWM_CNT_AV 产生的信号,记为 EPWM_CNT_UA。
  • 若为递减计数至 EPWM_CNT_AV 产生的信号,记为 EPWM_CNT_DA。
  • 若为递增计数至 EPWM_CNT_BV 产生的信号,记为 EPWM_CNT_UB。
  • 若为递减计数至 EPWM_CNT_BV 产生的信号,记为 EPWM_CNT_DB。

产生的信号输出至 EPWM 生成模块以及 Trigger & Interrupt 模块使用。具体时序图如下:



4. 递增计数产生比较信号示例


5. 递减计数产生比较信号示例


6. 先递增后递减计数产生比较信号示例

计数同步

计数器具有同步的功能,同步信号的使能后,可以使得计数器计数值跳至 EPWM_CNT_PHV 计数同步相位寄存器的数值。

计数器同步信号的来源有两个:
  • IN_SYNC,对于 EPWM 子模块,是外部输入信号,各个 EPWM 子模块的 IN_SYNC 的信号来源可参考同步信号网络示例
  • SW_SYNC,为 EPWM 模块通过寄存器设置 EPWM_SW_FRC_SYNC 位而产生,即由软件控制产生。
  • IN_SYNC 与 SW_SYNC 的信号经过或逻辑后,决定计数器的同步。

计数器还会产生输出的同步信号 OUT_SYNC,通过寄存器设置可以选择不同的信号作为 OUT_SYNC。同步输出信号源 中展示了 OUT_SYNC 的来源。



7. 同步输出信号源
EPWM 模块利用输入同步信号以及输出同步信号,将所有子模块 EPWM0/1/.../11 进行计数器的相位同步。同步信号网络示例 展示了各个模块的同步连接方式。
  • EPWM_S0 的输出同步信号通过 GPIO_MUX 输出给外部器件。


8. 同步信号网络示例

寄存器更新

寄存器 EPWM_CNT_PRDV、EPWM_CNT_AV 以及 EPWM_CNT_BV 支持以下更新模式,且各有独立控制的更新模式的控制位。

  • 立即更新模式:
    • 对寄存器 EPWM_CNT_PRDV、EPWM_CNT_AV 以及 EPWM_CNT_BV 的数值写入,会立即生效,从而影响当前的 EPWM 生成。
  • 影子寄存器更新模式:
    • 对寄存器 EPWM_CNT_PRDV、EPWM_CNT_AV 以及 EPWM_CNT_BV 的数值的写入,暂时存入各自的影子寄存器,不会立即生效,只有当计数器计数值到指定加载点时才进行更新,影子寄存器的数值生效。
    • EPWM_CNT_BV 影子寄存器更新示例中,当对 EPWM_CNT_BV 的数值进行写操作,将数值从 0x2 改变为 0x4 后,并没有立即生效,而是在计数值复位至 0 开始下一个周期的计数后,EPWM_CNT_BV 的数值才生效,从而改变了 EPWM 信号的占空比。


    9. EPWM_CNT_BV 影子寄存器更新示例