第4章:指纹模块选型与数据手册解读
做门禁项目,第一步就是选模块。市面上常见的指纹模块就那么几款——AS608、FPM10A、R307。说实话,我刚入行那会儿也被这些型号搞得头晕。后来项目做多了,发现它们其实各有脾气。
今天我就带你把这三款模块掰开揉碎了讲。数据手册怎么看?关键参数抓哪些?引脚怎么接?咱们一个一个来。
4.1 三款模块的硬碰硬对比
先看一张对比表,心里有个底:
| 参数项 | AS608 | FPM10A | R307 |
|---|---|---|---|
| 传感器类型 | 光学 | 光学 | 光学 |
| 工作电压 | 3.3V ~ 5V | 3.3V ~ 5V | 3.3V ~ 5V |
| 工作电流 | 典型 50mA | 典型 60mA | 典型 55mA |
| 指纹容量 | 300 枚 | 200 枚 | 1000 枚 |
| 通讯接口 | UART / USB | UART | UART |
| 默认波特率 | 57600 bps | 57600 bps | 9600 bps |
| 指令集 | 自定义协议 | 自定义协议 | 自定义协议 |
| 工作温度 | -20℃ ~ 60℃ | -20℃ ~ 60℃ | -20℃ ~ 60℃ |
| 模块尺寸 | 约 40×20 mm | 约 40×20 mm | 约 50×25 mm |
看到没?三款模块电压范围一样,但波特率有差异。R307默认是9600,另外两款是57600。我有个朋友第一次用R307,按57600发指令,模块死活没反应——折腾了一下午才发现是波特率没对上。
4.2 数据手册里的关键参数
拿到一份数据手册,别急着翻页。我一般先看三个地方:指令集、波特率、电压。这三样搞不定,后面全是白搭。
4.2.1 指令集
指纹模块的指令集,说白了就是你和模块对话的「暗号」。每个模块厂家都有自己的协议格式。以AS608为例,它的指令包长这样:
包头(0xEF01) + 芯片地址(4字节) + 包标识(1字节) + 包长度(2字节) + 数据体(N字节) + 校验和(2字节)
举个例子,录入指纹的指令:
0xEF 0x01 0xFF 0xFF 0xFF 0xFF 0x01 0x00 0x07 0x13 0x00 0x00 0x00 0x00 0x1B
嗯,看着有点吓人。但别怕,实际开发时我们一般用封装好的库函数。不过我还是建议你手撕一遍协议——我当年就是靠这个彻底搞懂了模块的通信机制。
4.2.2 波特率
波特率就是通信速度。三款模块的默认值不一样,但都可以通过指令修改。我个人习惯用57600,因为速度够快,而且误码率低。
但要注意:修改波特率后,模块会保存到Flash里。下次上电就用新波特率。如果你忘了自己改过什么值……嗯,那就只能盲猜了。我建议你在代码里加个「波特率自动探测」功能,遍历常见波特率发握手指令。
4.2.3 电压
三款模块都支持3.3V和5V供电。但这里有个坑:模块的UART电平是3.3V的!
如果你用5V的单片机(比如Arduino Uno),直接连TX/RX会烧模块。必须加电平转换电路,或者用电阻分压。我见过有人直接怼5V上去,模块冒烟了……
4.3 原理图与引脚定义
三款模块的引脚定义大同小异。以AS608为例,标准6针接口:
| 引脚编号 | 名称 | 功能 |
|---|---|---|
| 1 | VCC | 电源正极(3.3V ~ 5V) |
| 2 | GND | 电源地 |
| 3 | TX | 模块发送(接单片机RX) |
| 4 | RX | 模块接收(接单片机TX) |
| 5 | TOUCH | 手指检测输出(高电平有效) |
| 6 | RST | 复位引脚(低电平复位) |
FPM10A和R307的引脚基本一样,只是封装顺序可能不同。接法上,我建议你把TOUCH引脚接到单片机的外部中断上。这样手指一按,MCU立刻响应,不用轮询。
原理图方面,我贴一个最简的接线图:
单片机(3.3V) AS608模块
TX ———————————— RX
RX ———————————— TX
VCC ———————————— VCC
GND ———————————— GND
INT ———————————— TOUCH
IO ———————————— RST
注意:RST引脚不能悬空。我见过有人不接复位,结果模块上电后状态不确定。加个10kΩ上拉电阻到VCC,或者直接接单片机IO口控制。
4.4 选型建议
说了这么多,到底选哪款?我的建议是:
- AS608:适合入门学习,资料最多,淘宝上10块钱就能买到。但容量只有300枚,商用项目慎用。
- FPM10A:和AS608几乎一样,但多了个手指检测引脚。我比较推荐这款,因为TOUCH引脚很好用。
- R307:容量大(1000枚),适合做门禁考勤系统。但默认波特率低,通信速度慢一点。
我个人习惯:小项目用FPM10A,大项目用R307。AS608嘛……除非客户指定,否则我一般不碰。为什么?因为它的指令集和另外两款不兼容,换模块时得重写驱动。
好了,这一章就到这里。下一章我们开始实战——用STM32驱动FPM10A,把指纹录进去、认出来。到时候你会看到,数据手册里的那些参数,到底是怎么在代码里落地。