简介:面向电子设计竞赛选手与电子信息类学生的无线识别装置赛题文档,聚焦阅读器、应答器和耦合线圈构成的无接触数据传输与识别系统,可用于课程设计选题、赛题研读和方案对照。资料以1个doc文档收录,压缩包约3.24MB,内容集中,便于在电脑端查阅和整理笔记;目前已有127人学习下载。文档完整列出基本要求与发挥部分:在至少5cm线圈间距下以80%以上正确率、5秒内完成应答器有无检测和4位编码识别,并延伸到应答器从耦合线圈取能、阅读器识别功耗低于2W、断电后保持两个4位二进制数及读写操作。文中还给出设计报告应包含的总体框图、核心电路原理图、主要流程图和测试结果,附评分标准,并收录空军工程大学作品方案,涉及MSP430超低功耗单片机、5.4MHz载波ASK传输、开关式谐振功率放大器和耦合线圈匹配。读者可据此梳理无线通信原理、低功耗电子技术、电源管理、信息存储与测试调试等知识点,对照指标分析电路并规划测试。
1. 无线识别装置:两个空心线圈撑起的中频被动识别系统
无线识别装置这个题,最容易让人上头的地方在于它把捷径全堵死了:不许用现成的射频识别卡,也不许用识别专用芯片。剩下的路只有一条——两个直径 6.6 cm 的空心线圈对着放,阅读器发一条中频载波,既送能量又送指令,应答器靠负载调制把数据顶回来。这套系统本质是中频被动式架构,载频几兆赫兹,作用距离几厘米到二十几厘米,整机功耗卡在 2 W 以内,应答器一侧甚至要从耦合到的信号里整流出全部电能。适合正在做电子设计类赛题、想把无源取能和负载调制这对组合吃透的读者,也适合手上有一堆低功耗器件、想找个真实场景练手的人。
2. 方案定型:载频、调制方式与线圈参数的三角约束
这套装置的所有设计自由度其实是耦合在一起的:线圈尺寸和匝数被题目钉死(6.6 cm 直径、密绕 10 圈、空气介质),电感量就落在 10 μH 到 13 μH 这个很窄的区间里;载频一旦选定,谐振电容、Q 值、可用带宽、数据率跟着全部确定;调制方式又反过来决定接收链的复杂度和功耗。三个变量互相牵制,所以先算清楚再动手,比焊完再调省太多时间。
2.1 载频为什么只能停在几兆赫兹
按工作频段粗分,低频段在一百到几百千赫兹,中频段几兆到十几兆赫兹,高频段几百兆赫兹往上。高频有利于远距离传输,但分布参数、寄生电容、走线电感全都开始捣乱,手工搭的电路很难稳住;低频段对线圈电感量要求高,通常要到毫亨级,而题目给定的线圈结构和尺寸,实测下来只有 10~12.9 μH,做不出毫亨级。
真正的约束来自谐振电容。谐振频率 f 和电感 L、电容 C 的关系是标准的 LC 谐振式,载频越低,需要的电容越大。拿 10 μH 的线圈配 125 kHz,理论电容要 162 nF,这个量级的电容本身不难找,但回路阻抗低、Q 值上不去,次级感应出来的电压幅度太小,后面检波和整形几乎没法做。反过来,载频推到 13.56 MHz 甚至更高,谐振电容只剩几皮法,和线圈的分布电容、走线电容同一量级,等于你没法用分立电容精确调谐——这是很典型的“算得出来但调不动”。
几兆赫兹之所以舒服,是因为谐振电容落在几十到两百皮法之间,正好在可调电容的覆盖范围内,能用示波器看着波形一点点拧到位。另外回路 Q 值决定了带宽,BW = f/Q,数据率按 1~2 kbps 估算,取 Q 在 50 到 100 之间,带宽就有 40 到 110 kHz,码元拖尾不严重,选择性也还够。Q 取太高,码元之间互相污染,误码率反而上升;Q 取太低,回路选择性差,接收端信噪比掉下来。这个“不高不低”的区间,是调出来的,不是算出来的。
2.2 前向链路:开关型功放和 ASK 的搭配理由
题目限定阅读器单电源供电、识别状态下供电功率不超过 2 W,这条指标直接把线性功放排除得差不多了。甲类效率理论上限只有 50%,乙类理论 78.5% 但实际因为交越失真和静态电流也难做到,丙类靠减小导通角把效率拉到 78% 以上,代价是失真大、需要大信号驱动。前向传输的内容是能量加数字指令,对波形保真度要求不高,对效率要求很硬,所以丙类和开关型都合理。
开关型功率放大器的做法是让 MOS 管工作在开关状态,半桥输出方波,再靠后面的 LC 串联谐振回路把方波滤成正弦。理想情况下开关管本身几乎不消耗功率,损耗主要在导通电阻和开关瞬间,效率能明显高于丙类。我一般会先用丙类搭一版验证链路通不通,等确认耦合和检波没问题,再换开关型去抠效率和距离,因为开关型的调试门槛高一截,一上来就搞容易两头不落地。
调制上用 ASK(更准确说是 OOK),实现方式极其朴素:一个与门,一端接载波,一端接数据,数据为高时载波照常输出,数据为低时输出恒低。前向导通的路径上,阅读器先把载波打出去给应答器取能,需要发指令的时候再把载波按数据切一刀。这种调制对接收端最友好,包络检波就能解,代价是抗干扰能力弱,但如果线圈距离在十几厘米量级,接收到的信号幅度并不小,包络检波完全够用。
2.3 反向链路:直接负载调制还是副载波
反向传输是这套装置的技术核心。阅读器和应答器的两个线圈构成一个变压器耦合模型,应答器侧的负载变化会通过互感反射到阅读器侧,改变阅读器线圈两端的电压幅度。反射阻抗和 (ωM)²/Z₂ 成正比,也就是说只要周期性改变应答器回路的阻抗,阅读器端就能看到包络起伏,检波放大之后就是数据。
近场条件也要核算一下。4 MHz 对应的波长是 75 m,按 d < λ/(2π) 判断准静态场,边界在 11.9 m,实际工作距离 5 到 25 cm,远在这个范围之内,变压器模型成立。这就是为什么题目敢让你用两个空心线圈,而不是真天线。
| 反向调制方式 | 实现复杂度 | 抗干扰 | 可用数据率 | 适合距离 |
|---|---|---|---|---|
| 直接负载调制 | 低,一个模拟开关即可 | 一般 | 低 | 5~25 cm |
| 副载波负载调制(ASK) | 中,要提取载频并分频 | 较好 | 中 | 10~30 cm |
| 副载波 FSK | 高,双频点振荡加判决 | 最好 | 中 | 20 cm 以上 |
直接负载调制的实现就是拿一个模拟开关并在谐振回路两端,数据为 1 时开关导通,回路失谐,反射到阅读器侧的幅度变小;数据为 0 时开关断开,回路正常谐振。像 TS5A3166 这类模拟开关,带宽 300 MHz、导通电阻 0.9 Ω、1 MHz 时关断衰减 64 dB,拿来干这个活绰绰有余。它的好处是电路极简,应答器上几乎不增加功耗;坏处是抗干扰全靠阅读器端的滤波和判决。
副载波方案是在应答器上把阅读器发来的载频提取出来,分频后与数据相与,再用这个信号去控制负载开关。这样反向数据就搬到了一个偏离载频的频点上,阅读器端可以用带通滤波器把它和前向载波分开,抗干扰能力明显好,代价是应答器多了分频和提取电路,功耗上去了。如果发挥部分要求应答器完全无源,这个额外的功耗得仔细掂量。
2.4 谐振电容和线圈电感的实算
动手之前先跑一遍数,能省掉大量的“焊完了发现调不动”。下面这段脚本把谐振电容、Q 值和线圈电感估算放在一起,改几个参数就能复用。
import math def resonance_cap(f_hz, l_h): """理想谐振电容:由 f = 1/(2*pi*sqrt(L*C)) 反解""" return 1.0 / (4 * math.pi ** 2 * f_hz ** 2 * l_h) def coil_inductance(n, radius_m, length_m): """单层空心线圈 Wheeler 近似,用于绕制前粗估电感量(单位 H) 形参:n 匝数,radius_m 线圈半径(米),length_m 绕制长度(米)""" l_uh = (n ** 2 * radius_m ** 2) / (0.228 * radius_m + 0.254 * length_m) return l_uh * 1e-6 def bandwidth(f_hz, q): """谐振回路 -3dB 带宽,用于判断能否支撑目标数据率""" return f_hz / q # 题目给定:直径 6.6cm,密绕 10 圈,线径 0.8mm L = coil_inductance(n=10, radius_m=0.033, length_m=10 * 0.0008) print(f"估算电感 L = {L*1e6:.1f} uH") for f in (4.0e6, 5.4e6): c = resonance_cap(f, L) print(f"f={f/1e6:.1f} MHz -> C={c*1e12:.1f} pF, " f"Q=60 时带宽={bandwidth(f,60)/1e3:.0f} kHz")参数说明:radius_m填线圈半径而不是直径,6.6 cm 直径对应 0.033 m;length_m是 10 圈紧挨着绕完的总长度,用线径乘以匝数估。跑出来的电感大约 11 μH,和实测的 10~12.9 μH 吻合,说明这个近似够用。4 MHz 下谐振电容约 122 pF,5.4 MHz 下约 87 pF,这两个值都是“理想值”,实际绕出来的线圈有分布电容、焊点有寄生电感,通常要把可调电容并在固定电容上,留出 ±20% 的调整余量。
提示:算出来的电容只是起点,不要直接按这个值买固定电容焊死。留一个 5/24 pF 的可调电容做微调,扫频时看哪一侧偏,比反复拆焊快得多。
3. 硬件落地:从绕线圈到收发前端的可复现取值
理论算完,真正决定成败的是几处很具体的取值:线圈绕好后的实际电感、匹配电容的初值、整流后能拿到多少电流、检波电路从线圈上取信号时怎么不把 Q 值带塌。这几处每一处错了,现象都是“距离上不去”或者“能识别但偶尔翻车”,非常难定位。
3.1 线圈绕制和电感实测
题目给的做法是可以直接用 6.6 cm 左右的易拉罐当骨架,绕好取下用绝缘胶带固定。操作上有几个细节值得说:漆包线直径不超过 1 mm,太粗绕不紧,太细机械强度不够;绕的时候线要紧贴骨架,匝与匝之间不留缝,间隙会让绕制长度变大、电感下降;绕完取下之前先用胶带在几个方向固定,取下时线圈会回弹,直径变大会让电感掉一截。
实测电感有两种办法。有 LCR 表最省事,直接夹住线圈两端读数,但要注意测试频率,很多手持 LCR 表默认 1 kHz,测出来和几兆赫兹下的有效电感有差异。没有 LCR 表就用谐振法:把线圈和一个已知容量的电容并联,用信号发生器串一个小电阻激励,示波器看幅度最大点,读出频率再反解电感。
| 步骤 | 操作 | 观察点 |
|---|---|---|
| 1 | 线圈并联已知电容(如 100 pF) | 焊接尽量短 |
| 2 | 信号发生器经 1 kΩ 串入回路 | 幅度不要太大,避免非线性 |
| 3 | 频率从 1 MHz 扫到 10 MHz | 找幅度峰值点 f₀ |
| 4 | 反解 L = 1/(4π²f₀²C) | 与 Wheeler 估算对照 |
如果实测值和估算差 20% 以上,先查匝数有没有数错、线圈直径回弹了多少,再查焊点和引线。引线长度对这一档电感影响很大,两根 5 cm 的飞线就能加进去零点几微亨。
3.2 匹配网络和两端谐振方式
阅读器侧一般用串联谐振,因为功放输出的是电压源性质,串联谐振时回路电流最大,线圈上能拿到最大的交变磁场。应答器侧用并联谐振,因为要的是回路两端的高电压,方便整流取能。两端都调到同一个频率,就是所谓的全谐振状态。
实际操作中很难真的达到全谐振,因为线圈间距一变,互感就变,反射阻抗跟着变,回路的等效谐振点会漂。这是血泪经验:台面上调好的参数,把线圈挪远 5 cm 就失谐了。所以调谐时不要死盯着某一个距离,而是在目标距离区间的两个端点各调一次,取中间值,让回路在整段区间内都不至于跑太偏。
匹配电容的初值直接取上一节算出来的值,实际装配时固定电容取计算值的 70~80%,剩下 20~30% 交给可调电容。固定电容用 NP0/C0G 材质的瓷片电容,温度稳定性好;不要用 Y5V 或电解电容,几兆赫兹下它们的等效串联电阻和容值漂移都很难看。
3.3 应答器取能:整流、储能和限压
应答器拿到的交流电压幅度跟距离强相关,5 cm 时可能有好几伏,20 cm 时只剩几百毫伏,整流器件的选择直接决定最远工作距离。普通硅二极管正向压降 0.6~0.7 V,在信号只有几百毫伏的距离上根本整不出来;肖特基压降 0.2~0.3 V,能救回来一部分,但反向漏电流大,在整流电压还没建立起来的时候会把储能电容放掉。我一般用全桥结构配肖特基,四个管子的一致性要好,否则正负半周不对称,输出纹波大。
储能电容的取值是个折中。太小,负载一拉就掉到复位门限以下;太大,上电建立时间变长,识别响应时间指标会受影响。经验值是几百纳法到 1 μF 之间,配合 3 V 左右的稳压管限压。限压这一步不能省,距离很近的时候整流输出可能冲到十几伏,直接灌进单片机就烧了。限压用的稳压管要选低动态电阻的,否则电压一高它就吃电流,白白浪费掉本来就不多的能量。
整流之后的电流能力是硬指标。实测下来,整流滤波加限压之后,3 V 电压下大概只能提供 3 mA 左右。这个数字决定了后面所有器件的选型:单片机的静态电流、上拉电阻的阻值、传感器和存储的功耗,全部要在 3 mA 以内分配。
3.4 阅读器接收链:松耦合检波到整形
阅读器要从自己的线圈上把应答器反射回来的微弱包络捡出来,链路通常是:包络检波 → 放大 → 低通滤波 → 施密特整形 → 解码。
第一步就有一个隐蔽的坑。检波电路如果直接并在谐振回路两端,它的输入阻抗会把回路的 Q 值拉低,谐振状态直接跑掉。正确做法是松耦合,在回路和检波电路之间串一个小电容(几十皮法量级),让检波电路只“看”到一小部分信号,对回路的影响降到最低。代价是检波出来的信号更小,后面的放大倍数要跟上。
放大部分用单电源宽带运放,增益取 100 倍是比较常见的取法。放大之后载波和调制包络都在,需要低通把载波滤掉。这里可以用开关电容滤波器,比如 8 阶巴特沃兹型的有源低通,截止频率在 0.1~25 kHz 之间可设,时钟频率取截止频率的 100 倍。这个 100 倍的关系是固定的,配置的时候别算错,否则截止频率会跑到另外一个数量级去。
最后一级用比较器构成施密特触发器整形,把带噪声的模拟包络变成干净的数字电平。迟滞窗口要设得合适,太小了在信号边沿抖动,太大了灵敏度下降、最远距离缩水。这个值我一般是在最远工作距离上,一边挪线圈一边看输出波形调出来的。
3.5 功耗预算表
2 W 的限制不算苛刻,但要留余量。下面这张表是把各段功耗拆开的样子,实际取值按你选的具体器件改。
| 环节 | 典型电流 | 电压 | 功耗 | 备注 |
|---|---|---|---|---|
| 载波振荡 | 10~20 mA | 5 V | 50~100 mW | 晶振或 RC 振荡 |
| 前级驱动 | 20~30 mA | 5 V | 100~150 mW | 与门调制加缓冲 |
| 功率放大 | 60~100 mA | 10~12 V | 0.7~1.2 W | 效率是关键 |
| 接收链 | 15~25 mA | 5 V | 75~125 mW | 运放加滤波器 |
| 控制与显示 | 10~20 mA | 5 V | 50~100 mW | LED 数量影响大 |
按这个分布,整机在 1.2 W 上下是比较稳的,离 2 W 还有余量。LED 显示这块容易被忽略,8 位数据灯加 4 位地址灯同时点亮,如果限流电阻取 330 Ω,总电流能到 30 mA 以上,占掉整机功耗的十分之一。把限流电阻放大到 1 kΩ,亮度降下来但依然看得清,这笔账很划算。
4. 固件与控制:帧结构、CRC 和掉电保持怎么写
应答器一侧的电是从线圈里抠出来的,固件的每一个阻塞等待、每一次不必要的唤醒,都会变成电压跌落和识别失败。所以这一层的设计原则不是“功能实现”,而是“在 3 mA 的预算内,把该做的事在最短时间内做完,然后立刻回去睡觉”。
4.1 主控选型和电流预算
应答器主控的第一要求是低功耗,第二是能在 1.8~3.6 V 宽压下工作。MSP430 系列是常见选择,工作模式电流可以压到 500 μA 以下,待机模式 0.7 μA,唤醒时间短。阅读器一侧没有功耗压力,用 8051 内核的单片机就够,资源够、开发快。
外围电路能砍就砍。复位电路用上电复位,不加按键;预置 4 位二进制编码的拨码开关要加上拉电阻,阻值取 300 kΩ,每个电阻的电流约 3 V / 300 kΩ = 10 μA,四个加起来 40 μA。这个阻值不能再小了,再小电流预算就吃紧;也不能太大,太大抗干扰能力差,拨码开关的接触电阻和线路噪声会让读数飘。
算一笔总账:单片机工作 500 μA,上拉 40 μA,整流和限压电路自身消耗几十微安,加起来控制在 700 μA 以内是可行的。剩下的余量留给 Flash 写入时的瞬时电流峰值,这个峰值比稳态电流大一个数量级,储能电容要能扛住。
4.2 帧格式和 CRC-8
无线链路的误码是常态而不是异常,尤其在距离拉到极限、信噪比很差的时候。所以每一帧都要带校验,收端校验不过就丢弃,绝不允许“凑合用”。
#include <stdint.h> #include <string.h> #define FRAME_HEAD0 0xAA #define FRAME_HEAD1 0x5A #define FRAME_MAX 12 /* 帧结构: AA 5A | LEN | CMD | ADDR | DATA[4] | CRC8 LEN 为 CMD..DATA 的字节数, CRC8 覆盖 LEN 到 DATA 全部字段 */ static uint8_t crc8(const uint8_t *p, uint8_t n) { uint8_t crc = 0x00; while (n--) { crc ^= *p++; for (uint8_t i = 0; i < 8; i++) crc = (crc & 0x80) ? (uint8_t)((crc << 1) ^ 0x07) : (uint8_t)(crc << 1); } return crc; } /* 组帧, 返回整帧长度; buf 至少 FRAME_MAX 字节 */ uint8_t frame_build(uint8_t *buf, uint8_t cmd, uint8_t addr, const uint8_t data[4]) { uint8_t i = 0; buf[i++] = FRAME_HEAD0; buf[i++] = FRAME_HEAD1; buf[i++] = 6; /* CMD + ADDR + 4 字节 DATA */ buf[i++] = cmd; buf[i++] = addr; memcpy(&buf[i], data, 4); i += 4; buf[i] = crc8(&buf[2], 6); /* 从 LEN 开始算, 不含帧头 */ return (uint8_t)(i + 1); } /* 收帧校验, 返回 1 表示通过, 0 表示丢弃 */ uint8_t frame_check(const uint8_t *buf, uint8_t len) { if (len < 9 || buf[0] != FRAME_HEAD0 || buf[1] != FRAME_HEAD1) return 0; if (buf[2] + 3 != len) /* LEN + 帧头2 + CRC1 */ return 0; return crc8(&buf[2], (uint8_t)(len - 3)) == buf[len - 1]; }逻辑说明:帧头两字节用来做同步,收端状态机在连续两个字节命中AA 5A之后才开始收长度字段,避免把噪声误判成帧头。LEN只统计中间的有效负载长度,不包含帧头和 CRC 自身,这样解析时用LEN + 3就能算出整帧长度,少一处硬编码。CRC-8 用多项式 0x07,初值 0x00,覆盖范围从LEN一直到DATA最后一字节,帧头不参与计算——帧头只是同步标记,如果它参与了校验,一旦同步错位就会陷入永远校验不过的死循环。
参数说明:FRAME_MAX取 12 是留了扩展空间,当前帧实际 9 字节。cmd字段区分读、写、应答三种操作。addr是应答器的地址,多应答器场景下用来做选择。CRC 表可以预生成放到 Flash 里换取速度,但在 500 μA 的预算下,逐位计算的开销其实可以接受,因为一帧只有 6 字节。
4.3 写—存—读流程和掉电保持
应答器上电后的动作顺序很关键,顺序错了会出现“每次上电都重新写一遍 Flash”这种隐性损耗。合理的流程是:
- 上电复位,初始化时钟和 IO,此时立刻关掉全局中断,避免在电压还没稳住的时候被中断打断。
- 从 Flash 的信息区读出上次保存的内容,做一次校验,校验不过就用默认值。
- 把读出的内容加上 4 位预置编码组帧,算 CRC,发送。
- 发送完毕打开接收中断,进入低功耗等待。
- 收到帧后先校验,通过才写 Flash,写完回读比对,不通过就丢弃。
写 Flash 这一步要特别注意:写入之前先解锁,写完立刻上锁,中间不要有长延时。另外,写入时的电流峰值可能是稳态的十倍以上,而应答器的能量全靠整流电容撑着,电容不够大的时候一写就掉电复位。解决办法是在写之前先把储能电容充满——具体做法是让阅读器在这一刻保持连续载波不调制,给应答器一段“充电窗口”,等电容充到限压点再开始写。这个时序上的小心思,是能不能稳定实现掉电保持的分水岭。
4.4 阅读器端状态机和显示映射
阅读器端用 8051 内核单片机,资源分配大致是这样:P1 口 8 位接数据指示灯,显示从应答器读回来的 8 位数据;P0 口的低 4 位接地址指示灯;P3.2 接一个绿灯表示通信正常;P2 口接 8 位拨码开关,用来置数;P3.5 接一个拨码位选择读写状态;蜂鸣器在首次收到数据或写入成功时短鸣一声。
状态机只有三个状态:空闲、读、写。空闲状态下持续发载波给应答器供电,但不发指令;切到读状态后按固定周期发读指令并等待应答,超时就重发,连续 N 次超时点亮故障灯;写状态先发写指令,再发数据帧,等应答器回确认帧,确认之后回到空闲。这个状态机不要写得太复杂,越简单越不容易在电磁干扰下跑飞。
显示映射上有个细节:数据指示灯和地址指示灯的亮度差异要明显,用不同颜色的 LED 是最省事的办法。另外,识别成功时绿灯常亮、失败时闪烁,比单纯的“亮/灭”更容易在现场判断状态。
5. 避坑实录:五个把距离和识别率吃掉的坑
这套装置最折磨人的地方在于,绝大多数故障的表现都是同一个——距离上不去。而能导致这个现象的原因有七八个,不逐个排除就只能瞎试。下面这五条是实际调试里最容易撞上的,每条都按现象、原因、解决三步写清楚,照着对号入座能省不少时间。
5.1 检波电路并到线圈上,Q 值塌了
现象:单独测发射回路时,线圈两端波形很漂亮,谐振峰尖锐;一旦把检波电路焊上去,波形幅度掉一半,谐振点偏移,而且怎么调可调电容都调不回来。
原因:包络检波电路的输入阻抗在几兆赫兹下并不高,直接并在谐振回路两端,等效于给回路并了一个损耗电阻,Q 值从几十掉到个位数。回路 Q 值一塌,选择性没了,谐振电压幅度也跟着掉。
解决:改成松耦合取样,在回路和检波二极管之间串一个小电容,容量在几十皮法量级,具体值按“检波出来的信号还够放大”和“回路 Q 值不明显下降”两个条件折中。串了电容之后检波信号会小一个数量级,放大器的增益要相应提高,这时候宽带低噪声运放就比通用运放合适。
5.2 上拉电阻取小了,取能电压直接掉到复位门限
现象:应答器在近距离工作正常,距离一超过 12 cm 就开始随机复位,表现为识别时好时坏,复位后重新上电又正常一小会儿。
原因:预置编码的拨码开关上拉电阻取成了 10 kΩ,四个并联等效 2.5 kΩ,在 3 V 下静态就要吃掉 1.2 mA,而整流后的总可用电流只有 3 mA,剩下的余量扛不住单片机发射时的瞬时峰值。
解决:上拉电阻放大到 300 kΩ,四个总电流降到 40 μA。同时把储能电容加大一档,给瞬时峰值留缓冲。这里有个反直觉的点:上拉电阻变大之后抗干扰变差,拨码开关的读数可能抖,所以读拨码的时候要做多次采样取多数,不要读一次就信。
5.3 功放管发烫但距离不涨
现象:加大功放级的驱动,管子明显发热,电源电流上去了,但最大识别距离纹丝不动,甚至比之前还差一点。
原因:功放输出和后级谐振回路之间没有做阻抗匹配,功率大部分消耗在管子自身的导通损耗上,真正进到线圈里的没多少。另外,回路失谐时功放看到的是纯电抗负载,反射功率全部变成热。
解决:先断开功放,单独把谐振回路调到目标频率上,用信号源小信号激励确认谐振点,再接回功放。匹配网络按“功放最佳负载阻抗”设计,串联谐振回路的等效阻抗要和管子的输出阻抗对上。调完之后用示波器看线圈两端波形,应该是干净的正弦,如果顶部削平说明过驱动,底部削平说明偏置不对。
5.4 线圈绕完就焊,电感量偏差两成
现象:按计算结果配的电容,谐振点却怎么也调不到目标频率,可调电容拧到头还是差一点。
原因:线圈从骨架取下之后直径回弹,6.6 cm 变成 7 cm 以上,电感量按半径平方成正比变化,直接偏掉 10~15%。另外绕制时匝间有缝隙,绕制长度变大,电感进一步下降。
解决:绕完先用胶带在四个方向固定再取,取下后实测直径,偏差超过 1 mm 就重绕。焊之前先用谐振法或 LCR 表测一次实际电感,按实测值重算电容,不要按设计值硬套。这一步多花十分钟,后面能少折腾两小时。
5.5 掉电保存没做回读校验,写坏一帧就再也读不出
现象:装置断电再上电,应答器读出来的信息是乱码,或者干脆读不出,重新写入又正常,再断电又坏。
原因:写 Flash 的时候电压跌落,写进去的是半个字节或者全 0xFF,而固件写完不做回读校验,直接认为成功。下次上电读到无效数据,如果又没有默认值兜底,整个流程就卡死。
解决:写完立刻回读比对,不一致就重写,连续三次失败就放弃并保持原值。上电读 Flash 的时候先做合法性校验(比如版本字节和 CRC),不合法就用默认值初始化。另外,写之前让阅读器保持连续载波给电容充电,这个“充电窗口”至少留几十毫秒。
6. 台面验证:把“识别率不低于 80%”测成可复现的数字
指标里写的“正确率不低于 80%、响应时间不超过 5 s”,如果不定义测量方法,测出来的数字没有意义。我一般按固定流程走:把阅读器固定,线圈平面平行,用直尺量间距,每个距离点重复 20 次,记录成功次数和从接通电源到指示稳定的时间。数据拿脚本处理,别手算。
import statistics # 每个距离点重复 20 次,1 表示识别正确,0 表示失败 trials = { 5: [1]*20, 10: [1]*20, 15: [1]*20, 20: [1]*19 + [0], 22: [1]*17 + [0]*3, 25: [1]*13 + [0]*7, } times = [0.9, 0.8, 0.8, 0.9, 0.7] # 秒,对应 5 次响应时间测量 for d, r in trials.items(): rate = sum(r) / len(r) * 100 flag = "达标" if rate >= 80 else "不达标" print(f"D={d:>2}cm 识别率={rate:5.1f}% {flag}") print(f"平均响应时间={statistics.mean(times):.2f}s, " f"最大={max(times):.2f}s")这段脚本的用处是把“感觉能识别”变成可比较的数字。trials里每个距离点至少 20 次,样本太少的话 80% 这条线附近根本分不清是运气还是性能。times对应响应时间,取平均之外一定要看最大值,因为指标卡的是单次上限而不是平均。
几个容易忽略的测量细节:线圈间距要量最接近部分,不是圆心距;测量时人手不要停在两个线圈之间,人体对几兆赫兹的场有可见影响;每次改变距离后等两秒再测,让储能电容的充电状态稳定下来;环境里的金属台面、显示器、电源适配器都会改变场分布,测试台面和最终演示台面尽量一致。
真正把距离从 20 cm 推到 25 cm 的那一次,靠的不是换器件,而是把接收链的施密特迟滞窗口重新调了一遍,再把检波取样电容从 22 pF 改到 15 pF,回路 Q 值回来一点,信噪比就够判决了。从那以后我每次调这类耦合系统,都强制先单独测一遍空载谐振曲线,确认 Q 值和中心频率,再往下接任何电路——跳过这一步省下的时间,后面都要加倍还回去。希望帮到你。
本文还有配套的精品资源,点击获取