【STC32】输入捕获测频率和占空比

本文详细介绍了使用STC32单片机在输入捕获模式下测量PWM信号频率和占空比的方法,包括配置捕获通道、设置输入滤波器、选择转换边沿、启用中断请求等步骤,以及针对输入捕获的中断处理和溢出事件的注意事项。
摘要由CSDN通过智能技术生成

手册

在输入捕获模式下,当检测到 ICi 信号上相应的边沿后,计数器的当前值被锁存到捕获/比较寄存器(PWMA_CCRx)中。当发生捕获事件时,相应的 CCiIF 标志(PWMA_SR 寄存器)被置 1。
如果 PWMA_IER 寄存器的 CCiIE 位被置位,也就是使能了中断,则将产生中断请求。如果发生捕获
事件时 CCiIF 标志已经为高,那么重复捕获标志 CCiOF(PWMA_SR2 寄存器)被置 1。写 CCiIF=0 或
读取存储在 PWMA_CCRiL 寄存器中的捕获数据都可清除 CCiIF。写 CCiOF=0 可清除 CCiOF。

PWM 输入信号上升沿时捕获

以下例子说明如何在 TI1 输入的上升沿时捕获计数器的值到 PWMA_CCR1 寄存器中,步骤如下:

  1. 选择有效输入端:例如 PWMA_CCR1 连接到 TI1 输入,所以写入 PWMA_CCR1 寄存器中的CC1S=01,此时通道被配置为输入,并且 PWMA_CCR1 寄存器变为只读。
  2. 根据输入信号 TIi 的特点,==可通过配置 PWMA_CCMRi 寄存器中的 ICiF 位来设置相应的输入滤波器的滤波时间。==假设输入信号在最多 5 个时钟周期的时间内抖动,我们须配置滤波器的带宽长于 5个时钟周期;因此我们可以连续采样 8 次,以确认在 TI1 上一次真实的边沿变换, 即在 TIMi_CCMR1寄存器中写入 IC1F=0011,此时,只有连续采样到 8 个相同的 TI1 信号,信号才为有效(采样频率为 fMASTER)。
  3. 选择 TI1 通道的有效转换边沿,在 PWMA_CCER1 寄存器中写入 CC1P=0(上升沿)。
  4. 配置输入预分频器。在本例中,我们希望捕获发生在每一个有效的电平转换时刻,因此预分频器被禁止(写 PWMA_CCMR1 寄存器的 IC1PS=00)。
  5. 设置 PWMA_CCER1 寄存器的 CC1E=1,允许捕获计数器的值到捕获寄存器中。
  6. 如果需要,通过设置 PWMA_IER 寄存器中的 CC1IE 位允许相关中断请求。
    当发生一个输入捕获时:
     当产生有效的电平转换时,计数器的值被传送到 PWMA_CCR1 寄存器。
     CC1IF 标志被设置。当发生至少 2 个连续的捕获时,而 CC1IF 未曾被清除时,CC1OF 也被置 1。
     如设置了 CC1IE 位,则会产生一个中断。
    为了处理捕获溢出事件(CC1OF 位),建议在读出重复捕获标志之前读取数据,这是为了避免丢失在读出捕获溢出标志之后和读取数据之前可能产生的重复捕获信息。
    注意:设置 PWMA_EGR 寄存器中相应的 CCiG 位,可以通过软件产生输入捕获中断。

PWM 输入信号测量

该模式是输入捕获模式的一个特例,除下列区别外,操作与输入捕获模式相同:
 两个 ICi 信号被映射至同一个 TIi 输入。
 这两个 ICi 信号的有效边沿的极性相反。
 其中一个 TIiFP 信号被作为触发输入信号,而触发模式控制器被配置成复位触发模式。

程序

imageimage

void PWM_INIT(void)
{
   
    PWMA_CCER1 = 0x00;
    PWMA_CCMR1 = 0x01; //CC1 为输入模式,且映射到 TI1FP1 上
    PWMA_CCMR2 = 0x02; //CC2 为输入模式,且映射到 TI1FP2 上
    PWMA_CCER1 = 0x11; //使能 CC1 上的捕获功能,使能 CC2 上的捕获功能
    PWMA_CCER1 |= 0x00; //设置捕获极性为 CC1 的上升沿
    PWMA_CCER1 |= 0x20; //设置捕获极性为 CC2 的下降沿

    PWMA_CCER2 = 0x00;
    PWMA_CCMR3 = 0x01; //CC3 为输入模式,且映射到 TI3FP3 上
    PWMA_CCMR4 = 0x02; //CC4 为输入模式,且映射到 TI3FP4 上
    PWMA_CCER2 = 0x11; //使能 CC3 上的捕获功能,使能 CC4 上的捕获功能
    PWMA_CCER2 |= 0x00; //设置捕获极性为 CC3 的上升沿
    PWMA_CCER2 |= 0x20; //设置捕获极性为 CC4 的下降沿
    PWMA_CR1 = 0x01;

    PWMA_IER = 0x1e; //使能 CC1/CC2/CC3/CC4 捕获中断

    PWMB_CCER1 = 0x00;
    PWMB_CCMR1 = 0x01; //CC5 为输入模式,且映射到 TI5FP5 上
    PWMB_CCMR2 = 0x02; //CC6 为输入模式,且映射到 TI5FP6 上

    PWMB_CCER1 = 0x11; //使能 CC5 上的捕获功能,使能 CC6 上的捕获功能
    PWMB_CCER1 |= 0x00; //设置捕获极性为 CC5 的上升沿
    PWMB_CCER1 |= 0x20; //设置捕获极性为 CC6 的下降沿

    PWMB_CCER2 &#
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值