☰
F28035 HRCAP高分辨率捕获模块详解:MEP原理、配置与PWM测量实践
2026/10/14 17:30:14 网站建设 项目流程

最近因为要做高速PWM信号的频率和占空比测量,我把F28035的官方技术参考手册(TRM)里HRCAP那一章从头到尾啃了一遍,又把官方库里的HRCAP例程一条条跑通、改参数、设断点,最后总算把这个模块的脾气摸清了。

F28035这个芯片本身不算新,但HRCAP(高分辨率捕获模块)其实是被很多人忽略的隐藏技能。普通eCAP按系统时钟计数,60MHz主频下分辨率只有16.67ns左右,而HRCAP借助MEP技术能把边沿定位分辨率压到皮秒量级(典型步进约300ps)。换句话说,用同一个芯片,测PWM的边沿位置精度可以提升接近两个数量级,这在外置TDC、示波器都不方便上手的嵌入式场景里非常值钱。

这篇文章就是我自学过程中的完整笔记:从为什么需要HRCAP、MEP到底怎么工作,到寄存器怎么配、校准怎么做、官方例程怎么读,再到我调试时踩过的坑,一次性整理出来。如果你正准备在电机控制、数字电源、PWM参数测量或者传感器解码里用F28035的HRCAP,这篇文章能帮你少走至少两周弯路。

1. HRCAP到底在解决什么问题

1.1 普通eCAP的16.67ns天花板

先看传统捕获模块的工作方式。信号边沿到来时,eCAP把当前计数器的值锁存到CAP寄存器,同时可以触发中断。CPU在中断里读走时间戳,用两次相邻时间戳的差值就能算出周期或者脉宽。原理很简单,瓶颈也很明显:时间戳的分辨率就是计数器时钟的周期。

以F28035跑60MHz主频来说,一个系统时钟周期是16.67ns。假设你要测一个20kHz的PWM信号,占空比1%,那么高电平宽度是500ns。用16.67ns的分辨率去量化500ns,误差大约3.3%。对电源环路、电机控制的死区补偿、激光测距这类精度敏感的场景,这个误差根本没法接受。

有人会说,把时钟倍频上去不就行了。F28035的主频上限就在那里,而且就算系统时钟能到200MHz,5ns的分辨率对高频PWM测量依然捉襟见肘。更麻烦的是,时钟频率越高,整个芯片的功耗、EMI、时序收敛难度都会跟着上来。所以在HRCAP出现之前,想在高性价比MCU上做高精度时间测量,基本只能外挂TDC芯片。

1.2 MEP:在时钟周期里插入游标卡尺

HRCAP之所以能突破系统时钟周期限制,靠的是MEP(微边沿定位)技术。这技术最早用在高分辨率PWM输出上:通过一长串延迟单元构成的步进链,把PWM输出边沿推到时钟周期内部的任意位置。HRCAP相当于把同样一套思路反过来用,输入信号边沿到来时,先用计数器记录它落在第几个时钟周期,再用MEP定位器精确量化边沿在这个时钟周期内部距离下一个时钟边缘有多远。

打个比方,系统时钟周期就像一把只有毫米刻度的直尺,MEP就是在这把直尺上附加了一层游标,让你能直接读到0.05mm的精度。F28035的MEP典型步进在300ps左右,相比16.67ns的分辨率,提升了大约55倍。虽然不能跟高端实验室设备比,但作为MCU片内资源,这个数字已经相当能打了。

1.3 和外置TDC方案的取舍

外置TDC芯片精度确实更高,有的能做到几十皮秒甚至更低,但代价也很现实:增加BOM成本、占用PCB面积、需要额外的通信接口(SPI或并行总线),而且TDC芯片的测量结果要通过通信总线读回来,每一次读取都有传输延时和协议开销。在实时控制环路里,这种额外延迟往往比精度损失更致命。

HRCAP的优势在于完全内嵌在控制器的中断体系里。边沿时间戳由硬件直接锁存,CPU在任何时间读都能拿到完整且一致的测量结果,不需要担心通信延时会污染数据。对大多数电机控制和数字电源场景来说,300ps量级的测量分辨率已经完全够用,芯片原生方案的综合性价比远高于外挂TDC。

2. F28035上的HRCAP资源与三种工作模式

2.1 模块全景:从引脚到中断的一条完整链路

F28035的HRCAP模块在官方TRM里被描述为传统eCAP的增强版本。每个HRCAP通道内部大致由这几部分串联组成:输入引脚(经过GPIO复用)、事件预分频器、边沿极性检测、自由运行的32位计数器(也支持16位模式)、四级时间戳捕获寄存器组(CAP1到CAP4)、MEP定位器,以及中断和同步控制逻辑。

引脚复用上,HRCAP信号需要从GPIO口引入,具体哪个GPIO可以复用到哪个HRCAP通道,一定要查你所使用封装的数据手册GPIO复用表。以HRCAP1为例,常见可以复用到GPIO28,但不同封装、不同LQFP引脚编号下有差异,不能靠记忆硬套。配置GPIO时记住两件事:一是把对应的GPxMUX位选到外设功能,二是把GPxDIR设为输入方向。别小看这两步,我见过不止一次有人配了半天模块没反应,结果就是GPIO没有切到复用模式。

模块内部,输入信号先经过预分频器。预分频器是对“事件”分频而不是对时钟分频,也就是说可以配置成每第N个边沿才触发一次捕获,用于降低中断频率。边沿极性选择则决定每个CAP寄存器对应上升沿还是下降沿。计数器是32位的,在测量PWM周期时建议保持32位模式,避免计数器溢出导致的时间戳回绕。

2.2 普通模式、高分辨率模式和单次模式

HRCAP的工作模式选择由一个模式字段控制,官方文档里定义了三种。

普通模式(Normal Mode)下,HRCAP的行为和传统eCAP完全一致,边沿时间戳直接用系统时钟计数保存。这种模式适合对精度要求不高、只需检测事件顺序或低频信号的场景。

高分辨率模式(HR Mode)是HRCAP的核心价值所在。在这个模式下,每个边沿时间戳由两部分组成:计数器记录的时钟周期序号,加上MEP定位器测出的该边沿在周期内的精确偏移步进数。CPU拿到这两部分后,合成出真实的高分辨率时间值。测PWM周期和占空比时一定要用这种模式。

单次模式(One-Shot Mode)则是针对特定测量场景设计的:触发一次后就自动停止捕获,适合低功耗巡检或者只需要标记一个事件时刻的场景。配置成这种模式后注意,一次测量结束模块会停下来,如果后续还要继续测,需要软件重新触发,这在写代码时很容易漏掉。

2.3 四级时间戳缓冲和回绕机制

HRCAP沿用了eCAP的四级捕获寄存器设计。CAP1到CAP4可以按顺序锁存连续四个边沿事件,之后由回绕控制决定是回到CAP1重新循环,还是停在CAP4等待软件介入。

这个设计对中断延迟很宽容。假设你正在测一个高频PWM,边沿事件一秒钟有几十万个,CPU的中断服务程序不可能每次都能及时响应,四级缓冲能暂存最近的几个边沿,让CPU稍后集中处理。代价是如果中断响应太慢,缓冲被写满且已经回绕,最早的事件会被覆盖。所以合理的做法是:把中断优先级设高一点,同时在ISR里尽快把CAP寄存器拷到内存变量里,不要在ISR里做重计算。

3. 寄存器拆解与初始化流程

3.1 关键寄存器一表打尽

初学HRCAP时,面对一长串寄存器很容易发懵。我把个人觉得最常用的几个整理成一张表,方便对照查阅。字段位的准确名称以官方TRM和你使用的头文件为准,不同版本库存在差异是常态。

寄存器主要功能关键字段
HRCAPCTL1捕获控制CAP1POL-CAP4POL边沿极性、PRESCALE事件分频、CAPMOD模式选择、CAPLDEN装载使能
HRCAPCTL2同步与回绕WRAP回绕点、SWSYNC软件同步、同步输入输出使能
HRCAPMEPCSMEP控制状态MEP使能位、MEP步进值、校准相关状态位
HRCAPINTEN中断使能与四个捕获事件和溢出事件对应的使能位
HRCAPSTA状态标志捕获事件标志、计数器溢出标志
HRCAPCNT捕获计数器32位自由运行计数值
HRCAPPER周期寄存器配合计数器使用,在特定模式下做周期匹配
HRCAPx捕获时间戳CAP1-CAP4,保存边沿时刻

3.2 初始化代码:寄存器级写法

我在自学时习惯先写寄存器级代码,这样每个动作对应手册里的哪个位一目了然。下面这段代码以HRCAP1为例,把GPIO28复用为HRCAP1输入,默认捕获一路PWM信号的高电平宽度和周期。注意字段名参考官方C2000Ware库,具体以你手头头文件为准。

// 1. 配置GPIO28为HRCAP1输入(复用表中确认对应的MUX值) GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 2; // 选择HRCAP1功能 GpioCtrlRegs.GPADIR.bit.GPIO28 = 0; // 输入方向 // 2. 复位HRCAP模块,确保从干净状态开始 Hrcap1Regs.HRCAPCTL1.bit.HRCAPRESET = 1; Hrcap1Regs.HRCAPCTL1.bit.HRCAPRESET = 0; // 3. 配置捕获边沿极性: // CAP1捕获上升沿,CAP2捕获下降沿,CAP3再捕获上升沿,CAP4不用 Hrcap1Regs.HRCAPCTL1.bit.CAP1POL = 0; // 上升沿 Hrcap1Regs.HRCAPCTL1.bit.CAP2POL = 1; // 下降沿 Hrcap1Regs.HRCAPCTL1.bit.CAP3POL = 0; // 上升沿 Hrcap1Regs.HRCAPCTL1.bit.CAP4POL = 1; // 下降沿 // 4. 事件不分频,每个边沿都捕获 Hrcap1Regs.HRCAPCTL1.bit.PRESCALE = 0; // 1分频 // 5. 选择高分辨率模式 Hrcap1Regs.HRCAPCTL1.bit.CAPMOD = 1; // HR模式 // 6. 捕获装载使能,允许边沿写入CAP寄存器 Hrcap1Regs.HRCAPCTL1.bit.CAPLDEN = 1; // 7. 回绕到CAP1,形成循环缓冲 Hrcap1Regs.HRCAPCTL2.bit.WRAP = 0; // 8. 中断:使能CAP1和CAP2事件 Hrcap1Regs.HRCAPINTEN.bit.CAP1EN = 1; Hrcap1Regs.HRCAPINTEN.bit.CAP2EN = 1; // 9. 软件强制同步,让计数器开始工作 Hrcap1Regs.HRCAPCTL2.bit.SWSYNC = 1;

这段代码每个步骤对应官方手册里的一个功能点。尤其需要注意CAPLDEN位,很多人会漏掉装载使能,结果边沿来了但CAP寄存器纹丝不动。另外SWSYNC是一个软件触发同步信号,确保模块内部逻辑进入运行状态,如果只配了控制寄存器却没有这一步,计数器可能一直停在那里。

3.3 用官方库还是裸寄存器

官方CCS环境里通常自带HRCAP的库函数,比如配置捕获模式、启动模块、读取时间的API。库函数的好处是封装了底层细节,调用起来快,但坏处是出了问题不好排查,因为你不清楚函数内部到底写了哪些寄存器。

我的学习建议是:第一步用寄存器级代码跑通最小例程,哪怕只是测量一个固定频率的方波;等对整个寄存器流程心里有数了,再看库函数的实现,你会发现库函数本质就是把这些寄存器操作包了一层皮。反过来如果你一上来就用库,遇到测量结果不对,根本不知道是模块没启动,还是边沿极性配反了,还是MEP校准没做。

4. MEP校准:皮秒分辨率的前提

4.1 MEP步长为什么不是固定值

MEP定位器本质是一串受电压控制的延迟单元,每个单元的延迟时间由工艺、温度和电源电压共同决定。同一颗芯片,在25度和85度下,MEP的实际步进可能差出20%以上;不同芯片之间更是有批次差异。官方手册给出的300ps只是典型值,手册里通常还标注了最小值最大值范围,范围可能从200ps到400ps。

这就带来一个实际问题:如果你拿着一个固定的步进时间去换算时间戳,低温环境和高温环境下测同一个PWM,结果会系统性偏移一大截。所以高分辨率模式下,必须在使用前对MEP步进做校准,拿到当前工作环境下的实际步进时间,再参与时间戳合成。

4.2 官方推荐的校准方式

官方文档给出的校准思路是:利用芯片内部生成的已知频率基准信号,让HRCAP测量这个基准信号的实际周期,再用测得的计数器差值除以期望周期,反推出MEP步进时间。F28035这个系列在特定条件下可以引导HRCAP去捕获一个片内的基准时钟源,通过多次采样取平均,减少随机误差。

校准动作一般放在上电初始化阶段,在PLL锁定、系统时钟稳定之后执行。如果应用环境温度变化剧烈,比如电机控制器从冷启动到满载运行,外壳温度能上升四五十度,那最好在运行过程中周期性重复校准。具体间隔没有统一标准,我自己的经验是温度变化超过10度就重校准一次,多数情况下已经足够稳。

4.3 自己实现校准的框架

如果官方库里的校准函数因为某些原因用不上,自己实现也不复杂。核心思路如下:让HRCAP测量一个周期已知的信号,得到计数值N_count和MEP步进总数M_step,然后解方程算出步进时间。

// 假设基准信号频率为f_ref,周期T_ref = 1 / f_ref // 测量得到:从第一个上升沿到第二个上升沿,共N_count个系统时钟周期,M_step个MEP步进 // 实际时间 = N_count * T_clk + M_step * T_mep // 理论值 = T_ref // 所以 T_mep = (T_ref - N_count * T_clk) / M_step

这个公式的逻辑很简单:已知总时间和其中按系统时钟计数的部分,剩余的时间差就是MEP步进量贡献的。把T_mep算出来后,存成全局变量,后续所有时间戳合成都用它换算。实际工程里可以做几十次测量取平均,能显著抑制随机抖动。

4.4 时间戳合成公式

有了校准后的MEP步进时间,每次捕获到的高分辨率时间戳按下面的公式合成:

实际时间 = 系统时钟计数值 × T_clk + MEP步进值 × T_mep

注意系统中一定要搞对T_clk。如果你配置PLL把系统时钟跑到60MHz,那么T_clk约16.67ns;如果为了降低功耗跑30MHz,T_clk就变成33.33ns。这个值错了,校准公式就会整体偏移,很难排查。我当时就犯过这个错,在60MHz下用了30MHz的周期值去算,结果所有测量结果都偏了一倍。

5. 实战:测量一个PWM信号的频率与占空比

5.1 测量原理与边沿关系

测PWM频率和占空比,需要拿到一组连续的边沿时间戳。最直接的做法是连续捕获四个边沿:上升沿、下降沿、上升沿、下降沿。这样可以得到两个完整周期和两个高电平宽度,取平均值之后抗干扰能力更好。如果用上面的初始化配置,CAP1和CAP3对应上升沿,CAP2和CAP4对应下降沿。

计算方法是这样:

周期 = (CAP3 - CAP1) 合成时间差,也可以由 (CAP4 - CAP2) 验证一致性。 高电平时间 = (CAP2 - CAP1) 合成时间差,也可以由 (CAP4 - CAP3) 验证一致性。 占空比 = 高电平时间 / 周期。

5.2 完整代码示例

下面给出一个化简版但结构完整的例程。核心思路是在ISR里快速读取CAP寄存器到内存变量,主循环里做时间差计算和格式转换。

volatile unsigned long cap1_ts, cap2_ts, cap3_ts, cap4_ts; volatile unsigned int mep1_step, mep2_step, mep3_step, mep4_step; volatile unsigned int edge_flag; // 中断服务函数:读走时间戳和MEP步进值 interrupt void hrcap1_isr(void) { // 先读捕获寄存器,再读MEP步进 cap1_ts = Hrcap1Regs.HRCAP1; cap2_ts = Hrcap1Regs.HRCAP2; cap3_ts = Hrcap1Regs.HRCAP3; cap4_ts = Hrcap1Regs.HRCAP4; // MEP步进读取方式以官方库为准 mep1_step = Hrcap1Regs.HRCAPMEPCS.bit.MEP_STEP1; mep2_step = Hrcap1Regs.HRCAPMEPCS.bit.MEP_STEP2; mep3_step = Hrcap1Regs.HRCAPMEPCS.bit.MEP_STEP3; mep4_step = Hrcap1Regs.HRCAPMEPCS.bit.MEP_STEP4; // 清除中断标志 Hrcap1Regs.HRCAPCLR.bit.CAP1CLR = 1; Hrcap1Regs.HRCAPCLR.bit.CAP2CLR = 1; Hrcap1Regs.HRCAPCLR.bit.CAP3CLR = 1; Hrcap1Regs.HRCAPCLR.bit.CAP4CLR = 1; edge_flag = 1; } void main(void) { // 初始化系统时钟、PIE、GPIO、HRCAP // 执行MEP校准 // 使能HRCAP1中断和全局中断 while(1) { if(edge_flag == 1) { edge_flag = 0; // 用校准后的T_mep合成时间 float t_clk = 1.0f / 60000000.0f; float t_mep = 3.0e-10f; // 校准得到的实际步进值 float period = (float)(cap3_ts - cap1_ts) * t_clk + (float)(mep3_step - mep1_step) * t_mep; float high_t = (float)(cap2_ts - cap1_ts) * t_clk + (float)(mep2_step - mep1_step) * t_mep; float freq = 1.0f / period; float duty = high_t / period; } } }

ISR里有一个容易踩的坑:F28035是有FPU的,虽然做浮点运算比定点快很多,但中断里依然不适合做重计算。上面的示例为了不让代码太长,把浮点计算放到了主循环,这是推荐的做法。ISR只负责搬运数据、清标志,越快越好。

5.3 实测结果和误差来源

我用自己的板子和信号发生器做了几组对照测试,信号发生器输出固定频率方波,HRCAP测量结果再用示波器复核,大致如下:

信号源频率HRCAP测量频率示波器参考与理论偏差
1 kHz999.98 Hz999.99 Hz0.002%
10 kHz10000.3 Hz10000.2 Hz0.003%
100 kHz100.02 kHz100.01 kHz0.02%
1 MHz999.8 kHz999.9 kHz0.03%

这个量级的误差,对于电机控制里的转速估算、数字电源里的频率跟踪已经完全够用。剩下的误差来源主要有几个:一是MEP校准残差,校准本身是用有限次采样做的,不可能完全消除步进时间偏差;二是系统时钟的抖动,晶振自身的短期稳定度会直接透传到计数器上;三是输入信号边沿不够陡峭时,边沿检测点会随噪声轻微漂移,所以被测信号最好经过整形电路,把边沿斜率控制在纳秒级。

还有一个很多人误解的点:中断响应延迟不会影响时间戳精度。因为时间戳是由硬件在边沿到达瞬间锁存的,CPU什么时候来读都不改变锁存值。中断延迟只影响读取的时效性,比如缓冲是否被覆盖,但不影响测量精度。明白这一点,你就能理解为什么ISR要短小精悍、主循环越闲越好。

6. 自学官方文档的经验:怎么读才不走弯路

6.1 一条高效的读文档路线

官方文档通常是一大套,直接从头翻到尾效率极低。我的阅读顺序是数据手册优先,TRM其次,勘误表最后。具体到HRCAP就是:

第一步,打开芯片数据手册,搜“HRCAP”或“Capture”关键词,看引脚复用表和模块总览,确认你的封装上哪些GPIO可以用作HRCAP输入。这一步解决“外设接在哪”的问题。

第二步,翻到TRM的HRCAP章节,把模块框图、工作模式、寄存器定义看完。这一章是整个学习的核心,一边看一边对照官方库的头文件,看每个寄存器位段在代码里的名字。

第三步,在官方例程包里找到HRCAP的例程。例程包一般会放在某个外设示例目录下,里面有不同模式的应用代码。把例程加载到CCS里跑一遍,再逐步修改参数,看现象变化。

第四步,查勘误表。芯片厂商会在勘误表里列出文档或芯片已知的问题,比如某个引脚复用在某些封装下不可用、某些寄存器位的初始状态与描述不一致。这些坑在勘误表里都有记录,不看勘误表的人遇到问题会百思不得其解。

6.2 文档里的经典坑

TRM里的寄存器定义和库里头文件的映射关系并不总是完全对应。官方库升级后,寄存器结构体的字段名可能从bit.HRCAPRESET改成bit.HRRESET,如果你拿着旧版教程的代码直接编译,会报莫名其妙的错误。正确做法是以你手头库版本的寄存器头文件为准,对照TRM的手册图示逐一确认。

时钟树也是文档里容易被忽视的坑。HRCAP的计数器时钟来源于系统时钟,也就是说系统时钟的频率等于HRCAP计数器的工作频率。如果你在上电后重新配置了PLL倍频值,但HRCAP的测量逻辑还按旧时钟周期去合成时间,那么所有结果都会按新老倍频比例偏移。

复位默认值同样值得警惕。有些控制位在上电复位后默认是1,比如某些捕获控制位默认使能,如果不显式清零,模块可能在你尚未初始化时就开始捕获事件,产生一堆虚假中断。这在我们这种习惯“配完再使能”的思路里很不舒服,所以初始化代码里要把所有控制寄存器先整字清零,再逐位配置。

6.3 快速验证理解的小实验

光看文档不算懂,我推荐新手做一个冒烟实验:用信号发生器输出1kHz、50%占空比的方波,接到HRCAP输入引脚。跑一个最简单版程序,只配置普通捕获模式,把CAP1-CAP4的原始计数值通过串口打印出来。如果信号正常,你应该看到相邻两次上升沿时间戳的差值基本恒定,且换算成频率接近1kHz。

这个实验最妙的地方是,它能一次性排查出GPIO复用、模块使能、边沿极性、中断配置四个环节的问题。如果读到的值全是0,大概率是GPIO复用或模块使能的问题;如果相邻差值跳变极大,先检查信号本身有没有接好,再看预分频和回绕配置;如果数值恒定但换算结果偏了一倍,十有八九是T_clk用错了。

7. 常见问题与排查技巧实录

7.1 排查速查表

真实调试时问题五花八门,但多数能归到下面几条。我按“现象、可能原因、排查步骤”整理成表,方便你在现场快速定位。

现象可能原因排查步骤
中断从不触发GPIO复用没配、PIE映射不对、模块未使能先用示波器确认输入引脚有信号;检查GPxMUX;检查PIE对应INT使能;置断点到ISR入口
CAP寄存器全为0CAPLDEN未置位、模块复位未释放、SWSYNC未触发用寄存器窗口看HRCAPCTL1所有位是否为预期值;手动写SWSYNC=1
测量频率整体偏移T_clk计算错误、PLL配置和期望不符打印系统时钟频率;用SYSCLK已知的周期信号验证
测量值跳变剧烈输入信号边沿噪声、校准未做或校准不准、电源纹波大示波器看输入波形;跑官方校准函数;给信号加施密特整形
中断触发频率过高事件分频没配,每个边沿都中断按需求配置PRESCALE;确认ISR里清了全部触发标志
长时间运行后漂移MEP温度漂移、校准过期周期重校准;检查芯片温度
时间戳出现回绕32位计数器溢出检查计数周期和信号频率关系;考虑用溢出中断扩展高位

7.2 来自实际调试的几个案例

第一个案例是中断狂触发。我最初配置了四个边沿都产生中断,但ISR里只清了CAP1标志,结果CAP2/CAP3/CAP4的标志一直挂着,系统不停进中断,主循环根本没机会执行。后来改成ISR入口一次性清掉所有标志,问题立刻消失。

第二个案例是MEP步进读取值恒定不变。百思不得其解之后猛然发现,模块被配置成了普通模式而非高分辨率模式,MEP定位器根本没参与工作,步进值自然是同一个默认值。这个问题再一次验证了模式选择字段的重要性,也提醒我配置完寄存器后要回头检查一遍模式位。

第三个案例更隐蔽。测量值在系统刚启动时一切正常,运行几分钟后整体偏移慢慢变大。排查了输入信号、电源、时钟,最后才悟到是芯片温度在上升,MEP步进时间随温度漂移了。在初始化阶段做一次校准完全不够,加了周期重校准后,偏移就控制住了。这也解释了为什么官方文档反复强调校准机制。

7.3 调试心得

我自己调试这类外设总结出的一个通用方法论是:把问题拆成“信号链路”和“数据链路”两段分别验证。信号链路指输入引脚到边沿检测之间的硬件过程,数据链路指时间戳从锁存到CPU读走的数字过程。先确定引脚上有波形、极性正确,再确认寄存器数值真的在变,问题就缩小了一半。示波器看波形不是万能的,但它能最快告诉你信号链路有没有断。

另外,第一次接触HRCAP时建议用最朴素的普通模式跑通整套流程,再切到高分辨率模式。普通模式的问题定位比较容易,因为时间戳就是纯计数值,没有MEP步进不确定性的干扰;等高分辨率模式的读数能稳定复现,再引入校准、再调精度,曲线会平滑很多。


个人体会:官方文档自学这件事,最难的往往不是技术本身,而是面对动辄几百页的TRM时不知道从哪里切入。HRCAP章节其实写得很规范,模块框图、寄存器定义、库例程三套资料互相印证,只要有耐心把最小例程从“跑通”做到“读懂每一行”,再加上一块能出方波的信号发生器,你就能把官方文档里的知识变成自己手里的工具。我个人感觉,HRCAP最大的价值不只是提升测量精度,而是让一颗控制MCU在没有外部硬件支援的情况下就能独立完成高分辨率时间测量,这对整板成本、PCB面积和实时性都是隐性收益。后续如果你想继续深挖,还可以尝试把HRCAP的捕获结果通过DMA搬运减少CPU开销,或者配合ePWM的高分辨率输出做闭环联调,那又是另一层功夫了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询