多种计算脉冲与占空比的方法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
AN1473
表 2:
用于表 1 所示结果的公式
脉冲测量 —— 公式 模块 上限 分辨率
Timer1 门控 Timer1 CLC*2 NCO1 TimerX CCP1 Timer1/3 IOC/INT Timer0
⎛1 --⎞ * 2 n ⎝ f⎠ ⎛1 --⎞ * 2 n ⎝ f⎠
n = NCO ACCUM 位宽
DS01473A_CN 第 6 页
2013 Microchip Technology Inc.
AN1473
图 8: 脉冲为高电平时应避免软件引起意外复位
7. 8. 9.
从 TMR1H:L 读出脉宽 将 TMR1GIF 清零 重复执行步骤 2 至步骤 8
为实现最佳分辨率,应选择 FOSC 作为 Timer1 的时钟源 并采用 1:1 预分频比值。
© 2013 Microchip Technology Inc.
DS01473A_CN 第 5 页
AN1473
IOC
取决于软件
无
取决于软件
n = TimerX 位宽 f = 时钟频率
DS01473A_CN 第 4 页
© 2013 Microchip Technology Inc.
AN1473
脉冲
本节介绍如何测量周期性和非周期性波形的单个脉冲。 对于需要周期性波形源的方案,通常需要连续从脉冲测 量值中减去周期值,直到脉冲值比周期小。由于软件速 度限制导致无法在上升沿触发以及随后无法设置为捕捉 下降沿事件时,可采用此策略。
AN1473
多种计算脉冲与占空比的方法
作者:
Justin Bauer Microchip Technology Inc. 其他方案都需要软件干预,以补偿边沿之间的定时器计 满返回或寄存器设置操作,不过这会影响精度以及测量 波形的最小 / 最大时间约束。这些方案的软件程序应该 采用汇编语言编写,以实现最佳精度。通常采用软件方 案便足以满足应用所需的精度。 由于占空比为脉冲与其周期的比值,因此有关占空比的 介绍大都会提到脉冲测量。有些方案可调整其程序,以 选择在下降沿变为上升沿或在上升沿变为下降沿时触 发,但 CLC/NCO 和 Timer1 门控方案的设置与其对应的 脉冲测量方案完全不同。
图 4:
TIMER1 工作原理
时钟源
计数器
Timer1 门控
表 3:
模块 Timer1 门控 Timer1
TIMER1 门控代码计算
上限 4.1 ms 分辨率
门控
62.5 ns
Timer1门控将时钟源连接到随后将开始计数的定时器。此 策略仅与门控的闭合和断开有关。
Timer1 门控是测量周期性和非周期性信号脉宽的经典 方法。此方法极其精确且配置简单,建议优先选用。整 个捕捉过程都在硬件中执行。大多数 PIC 器件上都提供 这种方法。
2013 Microchip Technology Inc.
DS01473A_CN 第 1 页
AN1473
图 1: 确定特定脉宽对应的定时器值时的量化误差。定时器递增速率为 1 ns 量化误差 Error Quantization
4
3
Timer Output 2 定时器输出
1
0 0 0.5 1 1.5 2 2.5 脉宽 (ns) Pulse Width (ns) 3 3.5 4
与代码相关的参数
脉冲测量——参数 PIC® MCU PIC16LF1509 PIC16LF1509 PIC16LF1847 PIC16LF1509 PIC16LF1509 PIC16LF1509 PIC16LF1509 PIC16LF1509 PIC16LF1847 PIC16LF1509 PIC16LF1509 PIC16LF1509 中断 有 有 无 有 有 无 有 有 无 有 有 无 编程语言 C C ASM C C C 大小(程序 / 数据) 539 / 12 400 / 5 126 / 6 50 / 2 50 / 3 50 / 3 * 上限 4.1 ms 65.54 ms 16.38 ms 1 ms 1.073s 1.073s 4.1 ms 65.54 ms 16.38 ms 4.1 ms 1.073s 1.073s 分辨率 62.5 ns 62.5 ns 3 μs 4 μs (16x 预分频器) 6 μs 8 μs 125 ns 62.5 ns 3 ns 8 ns 12 μs 20 μs
图 6: 不确定性取决于时钟精度
脉冲
CLK
使用 16 MHz 时钟源时的不确定性可达 +/-62.5 ns。
CLC 和 NCO 表 4:
CLCX2 NCO1
限制
存在正 / 负一个时钟周期的不确定性。当脉冲刚好在时 钟的上升沿之前变为低电平或者在时钟的上升沿之后变 为高电平时会出现最坏情况。Timer1 的最大计数为 65535。在定时器计数到第 65536 个周期时,会溢出为 0。通过对 Timer1 的溢出次数进行计数,可测量超过 65535 个 Timer1 周期的脉冲。每次发生溢出事件时, TMR1IF 位都会置 1。对溢出事件次数进行计数,然后 将所计次数与 65536 的乘积与 Timer1 计数值相加。
图 5:
TIMER1 门控在“T1G_IN”上的信号变为高电平时连通
在 T1G 的上升沿 使能计数 T1G_IN
TБайду номын сангаасCKI
T1GVAL Timer1 N N+2 由软件清零
TMR1GIF
由软件清零
在 T1GVAL 的下降沿 由硬件置 1
设置
1. 2. 3. 4. 5. 6. 在上升 / 下降沿将 Timer1 门控设置为单脉冲模式 为脉冲选择合适的 Timer1 时钟源与预分频比 将 TMR1H 和 TMR1L 清零 使能模块并将 T1GG0 位置 1 (脉冲产生) TMR1GIF 位置 1
占空比测量——参数 C 500 / 2 C ASM C C C 400 / 5 126 / 6 50 / 2 50 / 3 50 / 3
* 这些计算的上限可以扩大至任意设定值。表中所示的限值为定时器计满一次的时间。
2013 Microchip Technology Inc.
DS01473A_CN 第 3 页
术语
本文档中使用了“精度”这一术语,它取决于时钟频率 的精度以及测量粒度。粒度越大,分辨率越低。要实现 更精确的测量,需选择高精度和高频率时钟以实现更小 的粒度和更高的分辨率。本文档所使用的另一个术语是 测量不确定性。定时器相对于脉冲边沿的停止时刻存在 不确定性:它既可能刚好在脉冲边沿出现时停止,也可 能在一个时钟周期之后停止。因此,不确定性为一个完 整的时钟周期。 如下图(图 1)所示,定时器的分辨率将极大地影响脉 冲测量结果。
简介
很多时候,我们需要量化周期信号的脉宽(如伺服电机 的脉宽)或者脉宽调制信号的占空比。有时会遇到需要 测量非周期性脉冲的情形,如测量常见于电容放电式点 火电路中的脉冲。本应用笔记介绍了基于 8 位 PIC® 器件 的六种测量周期性和非周期性波形脉冲的不同策略,以 及六种计算周期性波形占空比的方法。 根据所选单片机与所用外设的不同,设计所需的方案 可能比预期的要复杂,这也是本文档介绍多种方案的 原因。有些方案需要使用 2011 年推出的可配置逻辑单 元(Configurable Logic Cell ,CLC)和 数 控 振 荡 器 (Numerically Controlled Oscillator,NCO)。这些方 案能提供软件开销最低的硬件解决方案,而简单的电平 变化中断(Interrupt-On-Change,IOC)外设会需要较 多的软件开销用于计算。 本应用笔记介绍的所有方案均包含相关的软件程序。由 于 PIC MCU 的时钟速度、软件优化以及常规环境设置等 多方面原因,各种方案的最终结果可能会与文档给出的 结果有所不同。
1 -f 1 -f
⎛1 --⎞ * 2 n ⎝ f⎠ ⎛1 --⎞ * 2 n * 4 ⎝ f⎠ ⎛4 --⎞ * 2 n ⎝ f⎠ ⎛4 --⎞ * 2 n ⎝ f⎠
占空比测量 —— 公式
取决于软件
取决于软件(16x 预分频器)
IOC
取决于软件
无
取决于软件
Timer1 门控 Timer1 CLC*2 NCO1 TimerX CCP1 Timer1/3 IOC/INT Timer0
图 7:
用于测量单个脉冲的 NCO 与 CLC 连接
NCO1 脉冲
D
SE T
in c
Q
CLC 2
C LR
C LC1
Q
累加器
门 控 3极 性 时钟
CLC 与 NCO 内部互连的顶层视图。除脉冲外,所有连接都是处理器的内部连接。
有关此设置需要特别注意的是,如果 CLC2 在脉冲的上 升沿之前未复位,将导致测量不准确,如图 8 所示。
图 2:
脉宽定义
T2 与 T1 之间的时间为脉宽。
图 3:
占空比为脉宽与周期之比
DS01473A_CN 第 2 页
© 2013 Microchip Technology Inc.
AN1473
表 1:
模块 Timer1 门控 Timer1 CLC*2 NCO1 CCP1 Timer1/3 IOC/INT Timer0 IOC 轮询输入 Timer1 门控 Timer1 NCO1 CLC CCP1 Timer1/3 IOC/INT TimerX IOC 轮询输入
⎛1 --⎞ * 2 n ⎝ f⎠ ⎛1 --⎞ * 2 n ⎝ f⎠
n = NCO ACCUM 位宽
1 -f 1 -f
⎛4 --⎞ * 2 n ⎝ f⎠ ⎛1 --⎞ * 2 n * 4 ⎝ f⎠ ⎛4 --⎞ * 2 n ⎝ f⎠ ⎛4 --⎞ * 2 n ⎝ f⎠
取决于软件
取决于软件(16x 预分频器)
执行摘要
理想的实现方案应该完全在硬件中执行,并且外部波形 与 PIC MCU 系 统 时 钟 同 步。值 得 庆 幸 的是,通过 Timer1 门控和 CLC 以及 NCO 可实现纯硬件解决方案。 由于大多数情况下,要测量的脉冲或占空比是由其他源 所产生的外部波形,因此测量的分辨率将始终为至少一 个时钟周期。
CLC/NCO 代码计算
模块 上限 65.54 ms 分辨率 62.5 ns
该策略使用了 NCO 与 CLC。
概述
可以将两个CLC设置成一个脉冲检测器。发生软件复位 时,CLC2 将输出一个低电平,以使能 CLC1 与门,从 而脉冲为高电平时可允许时钟信号通过。当脉冲变为高 电平时,HFINTOSC 将为累加器提供时钟,直到该脉 冲变为低电平为止。当脉冲变为低电平时,CLC1 会输 出一个低电平并停止为 NCO 提供时钟。此时,可从 20 位宽的 NCO 累加器寄存器读取脉宽。
可行方案
最精确的测量可以通过最快的时钟源与预分频比最低的 定时器来实现。最低的定时器预分频比可实现最高的分 辨率。通常分辨率越高,最大计数值越大,从而可对定 时器计满返回进行必要的补偿。 如果要使用非阻塞代码,则可以将中断程序整合到方案 中。不过,这种整合可能导致精度下降。例如,IOC 引 脚可在检测到上升 / 下降沿时产生中断。因此,现在无 需不断轮询该引脚,即可在 ISR 内部完成脉冲测量。这 听起来似乎很理想,但是用户此时必须适应 3-5 个指令 周期的延时,该延时是由于提供异步中断而产生的。 如果必须保证绝对精度,则应该使用外部晶振,因为内 部振荡器模块可能偏离其标称频率高达 5%。 除非另外说明,否则本文档中所有包含相关代码的测量 方法,均使用 16 MHz 的内部系统时钟,并且所有定时 器均基于系统时钟(FOSC)的 1:1 预分频比工作。波长 的上下限,以及测量结果的精度通过表 1 与表 2 进行计 算。如果在基于软件的方案中考虑计满返回,则测量精 度将随软件程序的开销成比例降低。 这些方案假设脉冲为高电平有效,并且周期为两个相邻 上升沿之间的时间。详情请参见图 2 与图 3。
概述
Timer1 门控根据外部触发信号来控制 Timer1 何时递增。 该触发信号既可以是 Timer1 门控输入的上升沿,也可 以是其下降沿。
假设要测量的脉冲为高电平有效,并且刚刚产生了一个 上升沿,则门控会将时钟源与其计数器相连,随后只要 脉冲保持高电平,Timer1 便递增。当波形变为低电平 时,门控断开,并且中断标志置 1。随即可通过读出 Timer1 计数寄存器中的 16 位值来确定脉宽。