☰
按键恰好撞上时钟沿,两级触发器能解决什么?
2026/10/14 19:34:15 网站建设 项目流程

按键恰好撞上时钟沿,两级触发器能解决什么?

本文为教学接线与设计预期,尚无实物测量记录;使用 NUCLEO-F030R8。

问题

人随时按下按键,单片机却按自己的时钟节拍读取。变化正好撞上时钟沿,第一颗触发器可能一时分不清高低,这叫亚稳态。它不是固定的一半电压,也不是按键抖动;我们用两颗器件看降低风险的办法。

物件动作

小熊拿红旗,从门外走到第一道门;门卫拿秒表,只在铃响瞬间接旗。若小熊恰好在门槛上,第一位门卫可能迟疑。第二位门卫等下一次铃响才接第一位手里的旗。回到电路,两道门是两颗触发器,秒表铃声是共用时钟。

真实连接

开发板的三点三伏和地给两颗同型号触发器供电。按键节点经一万欧上拉到三点三伏,按下接地,再进第一颗 D 脚。两颗 CLK 同接板卡 PA8 输出;第一颗 Q 接第二颗 D,第二颗 Q 接 PA10。预置和清零脚都接高,不让它们悬空。

原因与结果

正常时,第一拍把输入送到第一颗 Q;下一拍,第二颗才接到上一次的 Q。第一颗若因输入撞沿而迟疑,多出的一拍给它时间稳定,降低不确定状态传出的概率。它不是绝对保险:迟疑未结束,第二颗也可能受影响。

验证

断电核对两颗芯片脚位、公共地和电源。上电后看 PA8 时钟,记录两颗 Q 与 PA10,设计预期第二颗晚一拍变化。改变按下时刻不等于测到亚稳态;没有高带宽原始波形和统计条件,不报告故障率。

边界

两级同步只降低单比特跨时钟风险,不清除按键弹跳,也不能保证短脉冲被采到。按键计数仍需消抖;多根数据线不能各自同步后就当成完整字。画面是设计预期,不是实测。

按键和芯片不是约好了同一只钟

人按按钮的瞬间不受 STM32 时钟安排。若变化离一次采样时钟沿太近,触发器的 D 输入可能不满足建立时间或保持时间:建立时间是时钟沿到来前需要先稳定的间隔,保持时间是沿过去后仍需稳定的间隔。TI 的 SN74LVC2G74 数据手册说明,这是一颗正沿触发的单个 D 型触发器,PRE/CLR 均为高且 D 满足时序要求时,才按上升沿把 D 送到 Q。输入撞上这个窗口时,输出存在短暂不确定的风险,称为亚稳态。它不是每次都出现的‘固定 1.65 V’,也不是机械触点弹跳的别名。TI 应用报告 SDYA006 的两级同步图说明:让第二级在下一时钟沿采第一级,可以给第一级更多恢复时间,降低风险,但绝不把概率变成零。

画成一幅可以直接演出的动作:小熊拿一面红旗,从门外走到第一道门;门卫拿秒表,只在铃响时接旗。若旗刚到门槛铃就响,第一位门卫可能迟疑。第二位门卫不从小熊手里抢旗,而是在下一次铃响时才看第一位已举起的旗。回到电路,红旗是异步按钮节点 ASYNC,第一位门卫是 U1,第二位是 U2;共同铃声是 PA8 送出的时钟。小熊、门槛和秒表说明取样先后,不是器件内部模拟电压的照片。

把两颗真实 8 脚芯片接对

固定使用 ST NUCLEO-F030R8、两颗 TI SN74LVC2G74DCT(U1、U2)及 Panasonic EVQ11D07K 常开按钮 S1。型号里的‘2G’容易误导新手,但 TI Rev Q 数据手册写的是单个正沿 D 触发器,所以这里确实需要两颗。按 DCT 的 SM8 顶视脚位,pin1 是 CLK、pin2 是 D、pin3 是反相 Q、pin4 是 GND、pin5 是 Q、pin6 是低有效 CLR、pin7 是低有效 PRE、pin8 是 VCC。不能把封装底视图镜像后照搬,也不能把 pin3 的反相输出当 pin5 正相输出。

NUCLEO 的 CN6 3V3 分到 U1/U2 的 pin8、pin7、pin6;CN6 GND 到两颗 pin4。每颗芯片旁各放一只 100 nF 电容跨 3V3/GND,作为本例的就近去耦选择。板卡 CN9 D7 对应 PA8,配置为普通 GPIO 教学时钟输出,同时到两颗 pin1;CN9 D2 对应 PA10,配置输入,仅读 U2 pin5。上述板卡端点来自 ST UM1724 Rev17 表11,TI 芯片管脚和 1.65~5.5 V 供电范围来自 TI 数据手册。本例用板卡本身的 3.3 V,不把 CN6 的 5 V 或其他不明电压送入按键节点。实际样机须核对板版、限流、布线和电源容量;本例没有焊装或测量记录。

按键支路是 CN6 3V3 经 R1=10 kΩ 到 ASYNC 节点,S1 的正确一组常开触点从该节点到 CN6 GND,ASYNC 再到 U1 pin2 D。松开时 R1 拉高,按下时 S1 拉低。按下时电阻理想电流为 3.3 V÷10000 Ω=0.00033 A,即 0.33 mA,这是设计计算,不是测得电流。Panasonic 产品资料给出此轻触开关的常开特性;四焊盘的实际通断关系要在断电时用万用表确认,不能凭‘看起来对侧’猜。U1 pin5 Q 只连 U2 pin2 D,U2 pin5 Q 再到 PA10。两颗时钟共用 PA8,反相 pin3 留空,不把两级 Q 并在一起。图上每根实线都对应这些端点;卡通旗帜和时间轴不是额外导线。

正常的两拍,和不能被算出来的迟疑

先在理想数字模型里算一遍,不假设模拟亚稳态发生。若输入在第一个时钟沿前已稳定由 0 变 1,那个沿之后 U1.Q 可以成为 1,U2.Q 仍保留上一拍的 U1.Q=0;下一沿 U2.Q 才能成为 1。随文 C11 程序先把旧 Q1 交给 Q2,再把当拍 D 交给 Q1,打印这个一拍延迟。它只是正常同步时序的可复算例子,没有纳秒级芯片模型,不能预测违反建立/保持时间时 U1.Q 会在几纳秒内停在哪里。

真实器件若在某次沿附近遇到不合时序的 D,第一颗可能延迟稳定。第二颗晚一拍采它,让恢复时间增加,因此把不确定状态传播给后级的概率压低。这正是 TI 应用报告所解释的因果,而不是宣称本例两颗芯片具备某个未经测得的平均故障间隔。若第一颗迟疑到第二次采样窗口,风险仍在;时钟越快、异步变化越频繁、供电与布线越差,需要的可靠性分析也会不同。两级同步还会引入延迟,且对短于采样间隔的脉冲可能漏采。

怎样验证,以及它解决不了什么

先断电按封装缺口核对 U1/U2 的 pin1、2、4、5、6、7、8,再检查两个 100 nF 的电源回路及 CN6 3V3/GND 是否无短路。配置 PA8 输出一个低压、可观察的教学时钟;具体频率只作为固件设置目标,上电后仍须用仪器确认。用分析仪或示波器观察 PA8、U1.Q、U2.Q,并把仪器地夹接 CN6 GND。按钮稳定按下或松开时,正常设计预期是 Q2 比 Q1 晚一次时钟沿;可在调试器读 PA10 进一步确认。反复按键没有捕获到异常波形,不能据此证明‘永无亚稳态’;想估计故障率还需要专门的统计条件和器件参数,本文都没有。

最后要把另一个故障分开:机械触点在一次按压中反复开合,可能让同步后的 Q2 多次变化。两级同步不会把这些变化自动合成一次,按钮计数仍需独立消抖。另一个边界是多位总线:若每根线各自串两颗触发器,仍可能从不同采样时刻拼成错误的整体字,工程上要改用握手、FIFO 或其他合适的跨域协议。本文只讲一个低压单比特输入的教学接线;没有实物原始波形,所有状态图都明确标为设计预期,不叫实测。

逐线接线清单

  • NUCLEO CN6 3V3 → U1/U2 SN74LVC2G74DCT pin 8 VCC、pin 7 PRE、pin 6 CLR,以及 C1/C2 各一端:两芯片同为 3.3 V;高电平禁用低有效预置/清零
  • NUCLEO CN6 GND → U1/U2 pin 4 GND、C1/C2 另一端和 S1 一端:全回路共地;去耦电容靠近各芯片供电脚
  • CN6 3V3 经 R1 10 kΩ → 异步输入节点 ASYNC;S1 另一端及 U1 pin 2 D:松开为高、按下为低;教学电流 3.3V/10kΩ≈0.33mA
  • NUCLEO CN9 D7/PA8 普通 GPIO 教学时钟输出 → U1 pin 1 CLK 和 U2 pin 1 CLK:两颗触发器共用同一时钟;名义节拍以实测 PA8 为准
  • U1 pin 5 Q → U2 pin 2 D:第二级只采上一级输出;U1/U2 pin 3 反相 Q 不接
  • U2 pin 5 Q → NUCLEO CN9 D2/PA10 输入及可选分析仪 CH3:MCU 只读第二级;不是把两级输出并线
  • 分析仪 CH1/CH2 与地(可选) → PA8 时钟、U1 pin 5 Q 与 CN6 GND:只用于计划验证;不冒充实际测量记录

计算与实施边界

  • TI SN74LVC2G74 Rev Q:该型号名称虽有 2G 但每颗是单个正沿 D 触发器;DCT SM8 8脚封装 pin1 CLK、pin2 D、pin3 反相Q、pin4 GND、pin5 Q、pin6 CLR、pin7 PRE、pin8 VCC;供电范围 1.65–5.5 V
  • TI SN74LVC2G74 Rev Q:PRE、CLR 为低有效;两者为高时,满足建立保持要求的 D 在时钟上升沿被采入 Q;不能让控制脚悬空
  • ST UM1724 Rev17 表11:NUCLEO-F030R8 CN9 D7 是 PA8,D2 是 PA10;板卡提供 3V3 与 GND;本例将 PA8 配普通 GPIO 教学时钟,具体频率须核对固件和实测
  • Panasonic EVQ11D07K 官方资料:顶按常开 SPST 轻触开关;焊前需按产品外形并用断电通断档确认实际触点对,不凭焊盘外形猜接通方式
  • TI 应用报告 SDYA006 图10:两级同步让第一级多一个时钟周期的恢复机会,可显著降低亚稳态传播风险,但并非绝对消除;本文不给本芯片杜撰 MTBF 数值
  • 理想离散状态演算:每个上升沿先令 Q2 取旧 Q1,再令 Q1 取当时 D;稳定输入从 0 变 1 后,两级 Q 的序列有一拍延迟;这不能数值模拟亚稳态的模拟电压
  • 按下电阻支路理想电流 3.3 V/10000 Ω=0.33 mA 是设计计算,非实测;C1/C2 的 100 nF 是本例去耦选择,实板布线、供电与信号完整性仍需验证

这些参数和数值是本例选择或可复算计算;实际测量前,应先检查电源极性、公共地、元件额定值、仪器探头连接。

完整可运行的核心算例与验收

以下 C11 程序可在电脑上用 C 编译器单独编译运行,用来复算状态或数值;它不是已配置 GPIO、ADC、定时器和驱动的开发板固件。移植到实板时应按前述接线配置外设、检查读取错误,并另做实测。

#include<stdio.h>/* 只模拟理想边沿状态;不把亚稳态当可预测的数字电平。 */intmain(void){constintd_at_edge[]={0,1,1,1};intq1=0,q2=0;for(unsignedi=0;i<sizeof(d_at_edge)/sizeof(d_at_edge[0]);++i){constintold_q1=q1;q1=d_at_edge[i];q2=old_q1;printf("edge %u: D=%d Q1=%d Q2=%d\n",i,d_at_edge[i],q1,q2);}printf("R1 pressed current: %.2f mA\n",3.3/10000.0*1000.0);returnq1==1&&q2==1?0:1;}

验收时同时记录输入、关键节点电压或波形、程序输出;若发现传感器通信失败、输入超出允许范围或波形明显异常,应停止并排查。

官方资料

  • https://www.ti.com/lit/ds/symlink/sn74lvc2g74.pdf
  • https://www.ti.com/lit/pdf/sdya006
  • https://www.st.com/resource/en/user_manual/um1724-.pdf
  • https://na.industrial.panasonic.com/products/switches-encoders-interface-devices/switches/lineup/light-touch-tactile-switches/series/79310

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

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

立即咨询