计数器功能模块
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 一直为高电平,指示为递增计数。
- 递减计数:计数器从 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 一直为低电平,指示为递减计数。
- 先递增后递减计数:计数器从 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 在前半周期为高电平指示此时为递增计数,后半周期指示为递减计数。
计数比较
在计数数值达到预设的设定值时,即达到 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 模块使用。具体时序图如下:
计数同步
计数器具有同步的功能,同步信号的使能后,可以使得计数器计数值跳至 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 的来源。
EPWM 模块利用输入同步信号以及输出同步信号,将所有子模块 EPWM0/1/.../11
进行计数器的相位同步。同步信号网络示例
展示了各个模块的同步连接方式。
- EPWM_S0 的输出同步信号通过 GPIO_MUX 输出给外部器件。
寄存器更新
寄存器 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 信号的占空比。