16位输入边沿定时捕获

合集下载

10比较和捕获单元(CCP)

10比较和捕获单元(CCP)

27
输出比较模式的电路结构

输出比较模式的电路结构如图10.2所示
图10.2输出比较模式电路结构
28
输出比较模式的工作机制

由程序初始化设定好CCPx模块为输出比较模式后,图 10.2中的比较部分的硬件电路不断地将CCPRx中的值 与TMR1中的值进行比较,一旦相匹配就由图中左边 部分经输出控制逻辑电路、R-S触发器、受控三态门 后从RC2/CCP1引脚输出下列4种情况之一的信号,并 置位CCPxIF中断标志及引起相应的事件

预分频器和边沿检测电路仅工作在输入捕捉模式,在 其他工作模式下,预分频器将保持为0,对单片机的 任何方式复位,将使预分频器清零。
21
使用输入捕捉模式的注意事项

当捕获到设定的边沿时,TMR1中的16位值是一次性 被读到CCPRx中,能准确记录事件发生的时刻,这与 在TMR1的中断中读取TMR1的值不同,后者因响应 中断需要时间,读取TMR1时要分高、低读取,这些 都会引入误差。

殊事件:对CCP1,将复位TMR1;对CCP2,将复位 TMR1并启动ADC(若ADC已被使能); 上述4种情况由CCP控制寄存器CCP1CON的低4位: CCP1M3~CCP1M0的设置决定 在输出比较模式下,RC2/CCP1引脚必须设为输出
31
使用输出比较模式的注意事项

输出比较模式下RC2/CCP1引脚的输出电平由CCPx模 块内的R-S触发器决定,与其输出比较的工作状态有 关,而与RC2用作普通I/O口时的输出锁存器无关,也 即,此时不能用指令对其作置位或清零操作。
17
使用输入捕捉模式的注意事项

当CCPx工作于输入捕捉模式时,TMR1必须设为定时 方式或同步计数方式(时钟源来自外部引脚或自带的 振荡器),否则CCPx输入捕捉模式就不能正常工作。

Timer模块介绍

Timer模块介绍

手把手教你写S12XS128程序(17)--Timer模块介绍11、简述MC9S12XS128定时器模块与MC9S12DG128 ECT部分功能完全类似,以下均以ECT模块介绍xs128定时器模块。

HC12 增强型捕捉计时器模块在HCS12标准定时器的基础上增加了一些特点,用以扩展它的应用范围,特别是在汽车ABS 方面。

基准计时器的核心仍然是一个16 位的可编程计数器,其时钟源来自一个预分频器。

该计时器可以被应用于多个方面,包括在对输入波形进行测量的同时产生一个输出波形。

波形的脉宽可以在几微秒到数秒的范围内变化。

增强型定时器模块(ECT)的结构框图如下,ECT功能相当于高速的I/O口,由一个4位预分频器、一个16位自由运行计数器,8个16位IC/OC通道,2个16位脉冲累加器以及一个16位模数递减计数器组成。

ECT实际上是一个16位的可编程计数器,它的基本时钟频率可以通过预分频器设置,用于产生波形输出,测量输入波形,统计脉冲个数,可以作为定时中断功能和独立时钟基准。

2、运行模式停止:由于时钟停止,计时器和计数器均关闭。

冻结:计时器和计数器均保持运行,直到T SCR($06)的T SFRZ 位被置1。

把手教你写S12XS128程序(18)--Timer模块介绍2IC 通道组IC 通道组由四个标准的缓冲通道IC0-IC3 和四个非缓冲通道IC4-IC7 组成,两部分的基本功能都是捕捉外部事件发生的时刻,但是缓冲通道除了IC /OC 寄存器TCn 外,还设有保持寄存器TCnH,此外还在入口设置了延迟计数器,用来提高抗干扰能力。

非缓冲通道没有保持寄存器,入口也没有延迟计数器,但每个通道入口设置了一个 2 输入端的多路器,事件触发信号可以是来自本通道的输入引脚PORTn,也可以是来自其关联通道PORT(n-4)的延迟计数器输出,使用更加灵活。

当延迟功能有效时,输入引脚检测到一个有效的边沿后,延迟计数器开始对P 时钟(模块时钟)进行计数,当到达设定的计数值后,延迟计数器在其输出端有条件地产生一个脉冲,这个条件就是延迟前后的引脚电平相反。

实验6 定时器T1的使用

实验6 定时器T1的使用

具体源代码如下:
/****************************************************************
*****
* init 函数:初始化系统 IO,定时器 T1 控制状态寄存器
*****************************************************************
且为定时器 1 发出的中断
{ IRCON &= ~0x02;
//清溢出标志
counter++;
if(counter==30) // 中 断 计 数 , 约 0.5s
(32/8)*10^6/65535/30=2Hz
{
counter =0;
LED1 = !LED1;
LED2 = !LED2;
}
}
}
}
3. 配置项目设置
* 函数名称:init * 功 能:初始化系统 IO,定时器 T1 控制状态寄存器 * 入口参数:无 * 出口参数:无 * 返 回 值:无
********************************************************************/ void init(void) { P1SEL &= ~0x03; // 设置 LED1、LED2 为普通 IO 口 P1DIR |= 0x03 ; // 设置 LED1、LED2 为输出 LED1 = 0; LED2 = 1; //灭 LED T1CTL = 0x05; // T1 通 道 0 , 8 分 频 ; 自 动 重 载 模 式
#define LED1 P1_0 #define LED2 P1_1

CCU6 输入捕获/输出比较单元6

CCU6 输入捕获/输出比较单元6

比较 1
1
死区时间 控制
1
多通道控 制
trap 控制
3+3 2 2 2
3
1
捕获/比较 输入/输出 选择
端口控制
2009-1-21
E1 Training
Copyright © Infineon Technologies 2008. All rights reserved.
Page 7
输入捕获/输出比较单元6(CCU6) 用于电机控制的结构图
定时器 T13时钟 分频器( 1~128

FCPU
Input Control
Compare Timer 10/16 bit
16位定时器T13,只 能工作在比较模式 。主要用于调制的 场合。
PPeeriroioddRReegg. .
deadtime Control
Burst Mode
CCoComCmMpMpPRP2Re2geg. .
预分频
1: N
fper
N=1,2,4,8,16,32,64,128,256;x=0,1,2
E1 Training
Copyright © Infineon Technologies 2008. All rights reserved.
Page 10
输入捕获/输出比较单元6(CCU6) T12映射传送
2009-1-21
E1 Training
Copyright © Infineon Technologies 2008. All rights reserved.
工作寄存器
至硬件
Page 11
输入捕获/输出比较单元6(CCU6) T12比较模式
中心对齐方式:

单片机波形发生器

单片机波形发生器

前言波形发生器是能够产生大量的标准信号和用户定义信号,并保证高精度、高稳定性、可重复性和易操作性的电子仪器。

函数波形发生器具有连续的相位变换、和频率稳定性等优点,不仅可以模拟各种复杂信号,还可对频率、幅值、相移、波形进行动态、及时的控制,并能够与其它仪器进行通讯,组成自动测试系统,因此被广泛用于自动控制系统、震动激励、通讯和仪器仪表领域。

在 70 年代前,信号发生器主要有两类:正弦波和脉冲波,而函数发生器介于两类之间,能够提供正弦波、余弦波、方波、三角波、上弦波等几种常用标准波形,产生其它波形时,需要采用较复杂的电路和机电结合的方法。

这个时期的波形发生器多采用模拟电子技术,而且模拟器件构成的电路存在着尺寸大、价格贵、功耗大等缺点,并且要产生较为复杂的信号波形,则电路结构非常复杂。

同时,主要表现为两个突出问题,一是通过电位器的调节来实现输出频率的调节,因此很难将频率调到某一固定值;二是脉冲的占空比不可调节。

在 70 年代后,微处理器的出现,可以利用处理器、A/D/和 D/A,硬件和软件使波形发生器的功能扩大,产生更加复杂的波形。

这时期的波形发生器多以软件为主,实质是采用微处理器对 DAC的程序控制,就可以得到各种简单波形。

90 年代末,出现几种真正高性能、高价格的函数发生器、但是HP公司推出了型号为 HP770S的信号模拟装置系统,它由 HP8770A任意波形数字化和HP1776A波形发生软件组成。

HP8770A实际上也只能产生8 中波形,而且价格昂贵。

不久以后,Analogic公司推出了型号为 Data-2020的多波形合成器,Lecroy 公司生产的型号为9100 的任意波形发生器等。

到了二十一世纪,随着集成电路技术的高速发展,出现了多种工作频率可过GHz 的DDS 芯片,同时也推动了函数波形发生器的发展,2003 年,Agilent的产品 33220A能够产生17种波形,最高频率可达到 20M,2005 年的产品N6030A 能够产生高达 500MHz的频率,采样的频率可达 1.25GHz。

PCA

PCA

PCA0CN:PCA 控制寄存器
位7: CF:PCA 计数器/定时器溢出标志 当PCA0 计数器/定时器从0xFFFF 到0x0000 溢出时由硬件 置位。在计数器/定时器溢出(CF)中断被允许时,该位置 ‘1’将导致CPU 转向CF 中断服务程序。该位不能由硬件自 动清0,必须用软件清0。 位6: CR:PCA0 计数器/定时器运行控制 该位允许/禁止PCA0 计数器/定时器。 0:禁止PCA0 计数器/定时器 1:允许PCA0 计数器/定时器
位方式。如果TOGn 位也被置为逻辑‘1’,则模块工作在频 率输出方式。 0:禁止。 1:使能。 位0: ECCFn:捕捉/比较标志中断允许 该位设置捕捉/比较标志(CCFn)的中断屏蔽。 0:禁止CCFn 中断;1:当CCFn 位被置1 时,允许捕捉/比 较标志的中断请求。
表11.1 PCA捕捉/比较模块的PCA0CPM寄存器设置
图11-1 可编程计数器阵列的基本原理框图
计数器/定时器由一个可编程的时基信号驱动,时基信号有六 个输入源:系统时钟、系统时钟/4、系统时钟/12、外部振荡 器时钟源8分频、定时器0溢出、ECI线上的外部时钟信号。
捕捉/比较模块工作方式: 捕捉/比较模块可以被独立编程为下面的6种工作方式之一: 边沿触发捕捉、软件定时器、高速输出、频率输出、8位 PWM或16位PWM。对PCA的编程和控制是通过系统控制器 的特殊功能寄存器来实现的。
11.2.1 边沿触发的捕捉方式
在该方式,CEXn引脚上出现的有效电平变化导致PCA0捕捉 PCA0计数器/定时器的值并将其装入到对应模块的16位捕捉/ 比较寄存器(PCA0CPLn和PCA0CPHn)。
图11-4
PCA捕捉方式原理图
PCA0CPMn寄存器中的CAPPn和CAPNn位用于选择触发捕 捉的电平变化类型:低电平到高电平(正沿)、高电平到低 电平(负沿)或任何一种变化(正沿或负沿)。

定时器的输入捕获工作原理

定时器的输入捕获工作原理

定时器的输入捕获工作原理定时器的输入捕获工作原理是通过计时器来测量输入信号的脉冲宽度或频率,并将测量结果存储在寄存器中。

输入捕获是一种用于测量时间的功能,常用于测量脉冲信号的频率、测量周期、测量占空比等。

在定时器中,有一个计数寄存器和一个输入捕获寄存器。

计数寄存器用于计数定时器的时钟脉冲,而输入捕获寄存器用于存储输入信号的边沿时刻。

定时器工作的基本原理是通过定时器的时钟脉冲来驱动计数器的计数增加,当计数值达到某个阈值时,定时器将生成一个中断或触发一个输出信号。

输入捕获功能是通过外部输入信号来触发捕获操作,捕获外部信号的边沿时刻,并将边沿时刻存储在输入捕获寄存器中。

输入捕获的工作流程如下:1. 配置定时器的模式和参数:包括计数方向、时钟源、计数位数等,以及配置输入捕获的触发方式、边沿选择等。

这些参数的配置可以使用硬件引脚或软件控制。

2. 开启定时器和输入捕获功能:启动定时器开始计数,并使能输入捕获功能。

3. 监测输入信号的边沿:定时器会不断监测输入信号的边沿变化,包括上升沿和下降沿。

4. 捕获边沿时刻:当检测到输入信号的边沿变化时,定时器会立即记录下边沿时刻,并将边沿时刻存储在输入捕获寄存器中。

5. 重启计数过程:一旦完成输入捕获,定时器会重新启动计数过程,继续监测下一个输入信号的边沿变化。

定时器的输入捕获工作原理可以通过以下实例进行进一步理解。

假设我们需要测量一个脉冲信号的频率,该脉冲信号由某个外部硬件设备生成,其频率可能随时间变化。

我们可以将这个脉冲信号接入定时器的输入捕获引脚,并配置输入捕获模式为边沿触发。

首先,我们配置定时器的计数方向为增加方向,选择一个适当的时钟源,并设置计数位数,使其能够满足我们需要测量的频率范围。

然后,我们使能输入捕获功能,并设置触发方式为边沿触发,通常有上升沿触发和下降沿触发两种选择。

当外部脉冲信号到达时,定时器会检测到其边沿变化,并立即捕获边沿时刻。

定时器将边沿时刻记录下来,并将其存储在输入捕获寄存器中。

USB-6210产品规范16位、250kSs)、多功能IO设备

USB-6210产品规范16位、250kSs)、多功能IO设备

USB-6210产品规范16位、250kSs)、多功能IO设备产品规范USB-621016 AI(16位、250 kS/s)、4 DI、4 DO USB 多功能I/O设备定义担保产品规范给出了型号在规定操作条件下的性能,其中内容涵盖于型号质量担保中。

下列特性产品规范给出了型号在规定操作条件下使⽤的相关值,但其中内容未涵盖于型号质量担保中。

常规产品规范给出了多数型号符合的性能。

额定产品规范给出了基于设计、⼀致性测试或补充测试的属性。

除⾮另外声明,否则产品规范为常规产品规范。

条件除⾮另外声明,否则下列规范的适⽤温度均为25 °C。

模拟输⼊通道数8个差分或16个单端ADC分辨率16位DNL保证⽆丢失代码INL请参考AI绝对精度采样率单通道最⼤值250 kS/s多通道最⼤值(多路综合)250 kS/s最⼩值0 S/s定时精度采样率的50 ppm定时分辨率50 ns输⼊耦合DC输⼊范围±0.2 V、±1 V、±5 V、±10 V±10.4 V,AI GND模拟输⼊的最⼤⼯作电压(信号+共模)CMRR(DC⾄60 Hz)100 dB输⼊阻抗设备开启AI+对AI GND>10 GΩ,与100 pF电容并联AI-对AI GND>10 GΩ,与100 pF电容并联设备关闭AI+对AI GND1,200 ΩAI-对AI GND1,200 Ω输⼊偏置电流±100 pA串扰(100 kHz)相邻通道-75 dB⾮相邻通道-90 dB⼩信号带宽(-3 dB)450 kHz输⼊FIFO容量4,095个采样扫描列表内存4,095项数据传输USB信号流、编程控制I/O 所有模拟输⼊和SENSE通道的过压保护设备开启±30 V,最多2个AI引脚设备关闭±20 V,最多2个AI引脚过压时的输⼊电流±20 mA/AI引脚,最⼤值多通道测量的稳定时间精度、全幅跳变、全量程跳变的±90 ppm (±6 LSB) 4 µs转换间隔跳变的±30 ppm (±2 LSB) 5 µs转换间隔跳变的±15 ppm (±1 LSB)7 µs转换间隔2|/doc/2c17047520.html|USB-6210产品规范典型特性图图1. 稳定误差和不同源阻抗时间的关系误差(跳变⼤⼩的p p m )时间 (µs)图2. AI CMRR40608010012060100 1 k 10 k 100 k频率 (Hz)C M R R (d B )140AI 绝对精度(担保)注:⾃设备外部校准起,表中给出精度的有效期为⼀年。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

源程序清单见程序清单1,其中黄色背景红色字体为错误的代码。

该程序的功能是测量方波信号的频率,由串口输出显示。

基本思路是:利用Timer0的TimerB的16位PWM功能产生一个方波作为被测信号,利用Timer2的TimerA定时捕捉功能捕捉被测信号的相邻两个上升沿,利用两次捕捉时的计数值计算出被测信号的频率。

程序清单1 实验源程序(有误)
#include "systemInit.h"
#include "uartGetPut.h"
#include <timer.h>
#include <stdio.h>
#define PART_LM3S1138
#include <pin_map.h>
// 在CCP1管脚产生1KHz方波,为Timer2的16位输入边沿定时捕获功能提供时钟源
voidpulseInit(void)
{
SysCtlPeriEnable(SYSCTL_PERIPH_TIMER0); // 使能TIMER0模块
SysCtlPeriEnable(CCP1_PERIPH); // 使能CCP1所在的GPIO端口
GPIOPinTypeTimer(CCP1_PORT, CCP1_PIN); // 配置相关管脚为Timer功能
TimerConfigure(TIMER0_BASE, TIMER_CFG_16_BIT_PAIR | // 配置TimerB为16位PWM
TIMER_CFG_B_PWM);
TimerLoadSet(TIMER0_BASE, TIMER_B, 6000); // 设置TimerB初值
TimerMatchSet(TIMER0_BASE, TIMER_B, 3000); // 设置TimerB匹配值
TimerEnable(TIMER0_BASE, TIMER_B);
}
// 定时器16位输入边沿定时捕获功能初始化
voidtimerInitCapTime(void)
{
SysCtlPeriEnable(SYSCTL_PERIPH_TIMER2); // 使能Timer模块
SysCtlPeriEnable(CCP4_PERIPH); // 使能CCP4所在的GPIO端口
GPIOPinTypeTimer(CCP4_PORT, CCP4_PIN); // 配置CCP4管脚为脉冲输入
TimerConfigure(TIMER2_BASE, TIMER_CFG_16_BIT_PAIR | // 配置Timer为16位事件定时器 TIMER_CFG_A_CAP_TIME);
TimerControlEvent(TIMER2_BASE, // 控制TimerA捕获CCP正边沿 TIMER_A,
TIMER_EVENT_POS_EDGE);
TimerControlStall(TIMER2_BASE, TIMER_A, true); // 允许在调试时暂停定时器计数 TimerIntEnable(TIMER2_BASE, TIMER_CAPA_EVENT); // 使能TimerA事件捕获中断
IntEnable(INT_TIMER2A); // 使能TimerA中断
IntMasterEnable(); // 使能处理器中断
}
// 定义捕获标志
volatiletBooleanCAP_Flag = false;
// 测量输入脉冲频率并显示
voidpulseMeasure(void)
{
unsigned short i;
unsigned short usVal[2];
char s[40];
TimerLoadSet(TIMER2_BASE, TIMER_A, 0xFFFF); // 设置计数器初值
TimerEnable(TIMER2_BASE, TIMER_A); // 使能Timer计数
for (i = 0; i< 2; i++)
{
while (!CAP_Flag); // 等待捕获输入脉冲
CAP_Flag = false; // 清除捕获标志
usVal[i] = TimerValueGet(TIMER2_BASE, TIMER_A); // 读取捕获值
}
TimerDisable(TIMER2_BASE, TIMER_A); // 禁止Timer计数sprintf(s, "%d Hz\r\n", (usVal[0] - usVal[1]) / 6); // 输出测定的脉冲频率
uartPuts(s);
}
// 主函数(程序入口)
int main(void)
{
jtagWait(); // 防止JTAG失效,重要!
clockInit(); // 时钟初始化:晶振,6MHz
uartInit(); // UART初始化
pulseInit();
timerInitCapTime(); // Timer初始化:16位定时捕获
for (;;)
{
pulseMeasure();
SysCtlDelay(1500 * (TheSysClock / 3000));
}
}
// Timer2的中断服务函数
void Timer2A_ISR(void)
{
unsigned long ulStatus;
ulStatus = TimerIntStatus(TIMER2_BASE, true); // 读取当前中断状态
TimerIntClear(TIMER2_BASE, ulStatus); // 清除中断状态,重要!
if (ulStatus& TIMER_CAPA_EVENT) // 若是TimerA事件捕获中断 {
CAP_Flag = true; // 置位捕获标志
}
}
在源程序中,用两次捕捉时的计数值计算频率的公式有误。

原公式为:f = (usVal[0] - usVal[1]) / 6
正确的公式应为:f = 6000000/(usVal[0] - usVal[1])。

相关文档
最新文档