简介:BC26模块原理图文档面向STM32与物联网硬件开发者,适合需要理解NB-IoT模组外围电路设计、做引脚级调试或二次开发的嵌入式工程师。压缩包为单个PDF文件,大小仅109KB,内容精炼,便于快速查阅。文档基于BC26模组给出完整参考设计:包含AMS1117-3.3稳压电源、S8050三极管电平转换与开关电路、SIM卡接口、RF天线前端、USB以及PWRKEY/RESET/PSM_EINT控制接口;原理图还明确标出TXD_DBG/RXD_DBG调试串口、TXD_AUX/RXD_AUX辅助串口,以及MCU_RXD/MCU_TXD等连接关系,方便定位最小系统、绘制底板和排查信号通路。目前已有916人浏览学习。借助这份原理图,读者可以快速核对模块供电与串口逻辑电平,理清SIM_VDD/SIM_DATA等引脚走线,为PCB布局、硬件排错和低功耗控制提供直接依据,对于模块选型评估及产品化设计都有实际参考价值。
1. BC26这张原理图,先看电源再看信号
BC26是一颗NB-IoT模组,而不是MCU本体。严格说它内部是ARM Cortex-M内核的NB-IoT SoC,但这张原理图里真正值钱的不是BC26模组本身,而是它周围这圈“配套底板”:AMS1117-3.3稳压、AO3401电源开关、S8050三极管电平转换、SIM卡座ESD防护、IPEX天线座,以及PWRKEY、RESET、PSM_EINT三个控制脚的驱动网络。这些才是嵌入式硬件开发者抄板时最容易踩坑的地方。对做STM32、单片机物联网项目的工程师来说,这张图的价值在于:它把一颗NB-IoT模组如何接到3.3V主控、如何给SIM卡供电、如何做1.8V与3.3V逻辑域互转的完整链路摆出来了。接下来按“电源、电平、SIM、控制、射频”的顺序逐块拆。
2. 电源域拆分:AMS1117-3.3、AO3401与VBAT_RF/VBAT_BB的供电关系
2.1 从PP5V到PP3V3:LDO之外的PMOS开关管
原理图第一个电源节点是PP5V,C1和C2各10uF并联做输入去耦,之后进AMS1117-3.3(U1)的VIN,VOUT输出PP3V3,输出端C3 100nF做高频滤波。AMS1117是低压差线性稳压器,这里输入5V输出3.3V,压差1.7V,虽然LDO效率一般,但胜在干净、无开关噪声,对NB-IoT模组的射频敏感度来说是合理选择。
值得注意的不是那颗LDO,而是旁边这颗AO3401(Q3)。AO3401是P沟道MOSFET,低电平导通,高电平关断。图纸里POWER_EN经4.7K电阻R6接到Gate,Gate对地还有电阻保证默认状态确定。这颗管子在高边做负载开关,用途是让主控(比如STM32的GPIO)通过POWER_EN信号直接切断或恢复模组供电,实现真正的硬件级断电,而不是让模组一直挂在电源上只靠PSM待机。
提示:AO3401的Gate不能悬空,一旦悬空,PMOS可能因栅极电荷泄漏进入半导通状态,表现为模组功耗异常偏高。抄板时务必确认Gate对地有下拉电阻。
2.2 VBAT_RF与VBAT_BB为什么要分开
BC26的42脚VBAT_BB和43脚VBAT_RF在原理图里是两个独立引脚,但很多第一次画底板的工程师会直接把这两个脚并在一起拉一根粗线。这在低功耗场景下会埋雷:NB-IoT发射是突发式的,虽然平均电流只有几十mA,但发射瞬间电流会明显抬升,射频电路拉电流时会在走线寄生电感上产生压降,如果VBAT_RF和VBAT_BB共用一段细走线,基带数字电路会被射频突发电流干扰,严重时直接掉电复位。
PCB上建议VBAT_RF单独走线,靠近43脚放100nF电容,VBAT_BB则在其引脚附近放1uF和100nF并联组合。总输入端的10uF大电容放在PP3V3进入模组电源网络的总入口。这个思路和画STM32最小系统板原理图时给模拟电源脚单独走线是一个道理——别让数字逻辑的开关噪声污染模拟/射频参考。
2.3 VDD_EXT与VDD_MCU:1.8V逻辑域从哪来
原理图里有两个重要的电源网络名:PP1V8和VDD_MCU。PP1V8通常来自模组VDD_EXT引脚输出的1.8V LDO,供给电平转换电路的高侧;VDD_MCU则是用户主控一侧的3.3V电源域。BC26的UART、SIM、控制引脚外部IO电平是1.8V,而STM32的GPIO多数是3.3V,两个域不能直连,这就是后面那几颗S8050存在的原因。
| 测试点 | 期望电压 | 纹波容限 | 测量位置 |
|---|---|---|---|
| PP5V | 4.75~5.25V | ±100mV | C1正极 |
| PP3V3 | 3.235~3.365V | ±50mV | C3正极或AMS1117 VOUT |
| PP1V8 | 1.75~1.85V | ±30mV | 电平转换网络上拉端 |
| VBAT_RF | 3.3V±5% | 发射瞬间跌落不超过300mV | BC26 43脚附近 |
上电后先不要急着接模组,用万用表把这四个点的电压量一遍,尤其是PP1V8。PP1V8如果被外部电路拉低或者短路,电平转换电路的输出逻辑会直接错乱,表现为主控发AT指令模组完全无响应。
3. 三极管电平转换:S8050搭出的MCU串口链路
3.1 为什么不用电平转换芯片
BC26的UART IO是1.8V电平,STM32的UART是3.3V电平。常见方案是TXS0102、TXB0104这类电平转换芯片,但原理图里选的是两颗S8050三极管加电阻网络。原因很直接:成本低、物料通用、不依赖额外芯片供电。S8050是NPN三极管,VCEO 25V,IC最大500mA,用在UART这种几mA的信号线上绰绰有余。UART 115200bps的速率下,S8050的开关速度完全够用。
但这里有个必须说清的工程细节:单级NPN三极管集电极输出和基极输入是反相的。基极高电平时三极管饱和导通,集电极被拉到GND;基极低电平时三极管截止,集电极被上拉电阻拉到高电平。所以直接用单管做电平转换,输出波形和输入波形是反相的。原理图里MCU_TXD、MCU_RXD、MO_TXD、MO_RXD四个网络分别对应主控发送、主控接收、模组发送、模组接收,每一条方向链路各用一颗三极管处理。
3.2 抄这张图必须核对的四个网络
网络表里出现的阻值组合很有代表性:10K电阻做基极到GND的下拉,防止三极管在MCU上电瞬间误开通;4.7K电阻做集电极到PP1V8或VDD_MCU的上拉,决定输出高电平的电压值。以主控到模组方向为例,MCU_TXD经4.7K电阻进Q1基极,Q1集电极上拉到PP1V8,输出接MO_RXD;另一方向MO_TXD经4.7K电阻进Q2基极,集电极上拉到VDD_MCU,输出接MCU_RXD。
| 网络/器件 | 位置 | 典型值 | 作用 |
|---|---|---|---|
| R1/R4 | 基极到GND | 10K | 上电默认状态锁定 |
| R2/R3 | 集电极到电源 | 4.7K | 设定输出高电平 |
| Q1/Q2 | 信号通道 | S8050 | 电平搬移与反相 |
| PP1V8 | 模组侧上拉 | 1.8V | 匹配BC26 IO电平 |
| VDD_MCU | 主控侧上拉 | 3.3V | 匹配STM32 IO电平 |
提示:照抄这个电路后,第一件事不是焊接,而是用示波器双通道同时看输入端和输出端的波形。如果发现波形反相,而你的STM32 USART不支持极性反转配置,就需要改成双管串接结构,或者在主控侧用外部逻辑门再反相一次。很多“模组发AT没反应”的案例,最后查出来不是模组坏了,而是电平转换把UART空闲电平从高拉成了低,导致模组一直认为总线被占用。
3.3 实际联调时的验证顺序
焊接完成后的验证顺序建议分三步走:先量电平,再测相位,最后跑数据。量电平指的是空闲状态下,主控TXD输出应该是3.3V高电平,对应模组RXD引脚应该被电平转换电路拉到1.8V高电平;同样模组TXD空闲时是1.8V高,主控RXD侧应该被拉到3.3V高。任何一侧空闲电平不对,先查上拉电阻供电,再查三极管焊接方向。
测相位这步最容易忽略:发送0x55(二进制01010101),用示波器看模组RXD脚的波形,正常情况应该能看到方波,如果看到的是完全反相的波形,说明电平转换路径需要加一级反相或者主控串口配成反极性。跑数据则是最简单的回环测试:把模组TXD和RXD短接前不要直接短接模组引脚,而是短接主控侧MCU_TXD和MCU_RXD,先确认主控到电平转换电路这段没问题。
4. SIM卡座电路与接口ESD防护设计
4.1 SIM接口的串阻、滤波与TVS布置
原理图里SIM接口用了SIM-008C卡座,六个信号脚分别对应SIM_VDD、SIM_CLK、SIM_RST、SIM_DATA、SIM_GND,预留VPP脚接地。BC26侧引脚14到11分别是SIM_VDD、SIM_CLK、SIM_RST、SIM_DATA,与卡座之间有完整的防护网络,这类设计在物联网底板里属于标准做法,但在抄板时容易被忽略。
SIM_CLK和SIM_RST上各串一颗22R电阻,这是阻抗匹配与EMI抑制的常见手段。SIM_DATA线上有10K R14上拉到SIM_VDD,保证数据线空闲状态为高。每个信号对地并联33pF电容C5到C8,把高频谐波泄放掉。100nF C4放在SIM_VDD入口,确保卡供电稳定。SMF05C(D1)是五通道TVS阵列,钳位SIM信号的ESD浪涌,避免插拔SIM卡时静电打坏模组内部接口。
| 信号 | BC26引脚 | 串阻 | 对地电容 | 保护器件 |
|---|---|---|---|---|
| SIM_VDD | 14 | 无 | 100nF | SMF05C |
| SIM_CLK | 13 | 22R | 33pF | SMF05C |
| SIM_RST | 12 | 22R | 33pF | SMF05C |
| SIM_DATA | 11 | 无 | 33pF | SMF05C,10K上拉 |
4.2 用AT指令验证SIM卡链路
焊完SIM这部分电路,不要急着用STM32跑完整协议栈,先通过UART把模组调试口(TXD_DBG/RXD_DBG)接到电脑,用串口助手或Python脚本发AT指令验证模组和SIM卡的握手情况。下面这段脚本用pyserial完成最基本的SIM卡探测。
import serial import time ser = serial.Serial( port='COM10', # 按实际串口号修改 baudrate=9600, # BC26 默认调试波特率 timeout=1 ) def at(cmd, delay=0.5): ser.write((cmd + '\r\n').encode()) time.sleep(delay) return ser.read(ser.in_waiting).decode(errors='ignore') print(at('AT')) # 1. 模组是否存活, 期望返回 OK print(at('AT+CPIN?')) # 2. SIM 卡状态, READY 表示已识别 print(at('AT+CSQ')) # 3. 信号强度, 第一个值大于10可用 print(at('AT+CEREG?')) # 4. 网络注册状态, 0,1 表示已注册 ser.close()这段脚本里每条AT指令都有明确用途。AT指令验证串口链路是否通畅,返回OK说明电平转换电路工作正常、波特率匹配;AT+CPIN?查询SIM卡是否被识别,返回READY说明SIM_VDD供电、SIM_DATA上拉、复位时序都正常,如果返回ERROR就要检查卡座焊接和SMF05C是否把信号钳死了;AT+CSQ读信号强度;AT+CEREG?查网络注册状态。如果AT+CPIN?一直报错,优先检查SIM_VDD电压在卡插入瞬间是否被拉低,以及22R串阻、33pF电容是否有虚焊。
提示:SIM_VDD的电压是模组内部根据卡类型自动切换的,1.8V或3V都正常,不要用万用表只量一次空闲电压就判断卡电路有问题。插卡瞬间的波形才决定卡能否被识别。
5. PWRKEY、RESET与PSM_EINT:控制脚上的细节和时序
5.1 三个控制脚的电气约定
BC26的PWRKEY、RESET、PSM_EINT在原理图里分别由Q4、Q5、Q7三颗S8050驱动,这里用三极管而不是MCU GPIO直连是有原因的:模组这些脚内部结构与GPIO不同,PWRKEY内部上拉到VBAT,外部需要用开漏或三极管把它拉低触发;RESET同理。BC26的IO域是1.8V,如果STM32的3.3V GPIO直接推高到这些引脚,可能通过内部上拉电阻反灌电流进模组电源域。
| 信号 | 有效电平 | 典型脉宽 | 内部结构 | 主控侧设置 |
|---|---|---|---|---|
| PWRKEY | 低电平 | 500ms以上 | 内部上拉 | 三极管拉低,初始高阻 |
| RESET | 低电平 | 100ms以上 | 内部上拉 | 三极管拉低,初始高阻 |
| PSM_EINT | 下降沿/低电平 | 大于100us | 唤醒输入 | 三极管拉低触发 |
PWRKEY的时序特别关键,拉低时间不足可能导致模组无法正常启动,表现为模组没有串口应答、NETLIGHT不亮。而RESET的复位脉宽要求相对宽松,但也不能用一个过窄的毛刺去触发,容易进入不确定状态。
5.2 STM32 HAL驱动代码模板
下面这段代码以STM32 HAL库为例,演示如何通过GPIO控制Q4、Q5、Q7实现开机和复位。注意三个控制信号在原理图里最终命名是PWRKEY_SET、RESET_SET、PSM_EINT_SET,中间经过三极管到模组脚。
#define PWRKEY_SET_Pin GPIO_PIN_0 #define PWRKEY_SET_Port GPIOA #define RESET_SET_Pin GPIO_PIN_1 #define RESET_SET_Port GPIOA #define PSM_EINT_SET_Pin GPIO_PIN_2 #define PSM_EINT_SET_Port GPIOA void b26_gpio_init(void) { GPIO_InitTypeDef gpio = {0}; __HAL_RCC_GPIOA_CLK_ENABLE(); // 三极管驱动, 初始全部输出低, 三极管截止, 模组侧引脚被内部上拉保持高 gpio.Mode = GPIO_MODE_OUTPUT_PP; gpio.Pull = GPIO_NOPULL; gpio.Speed = GPIO_SPEED_FREQ_LOW; gpio.Pin = PWRKEY_SET_Pin | RESET_SET_Pin | PSM_EINT_SET_Pin; HAL_GPIO_Init(GPIOA, &gpio); HAL_GPIO_WritePin(PWRKEY_SET_Port, PWRKEY_SET_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(RESET_SET_Port, RESET_SET_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(PSM_EINT_SET_Port, PSM_EINT_SET_Pin, GPIO_PIN_RESET); } void b26_power_on(void) { // 拉低 PWRKEY, 三极管导通, 模组 PWRKEY 被拉低 HAL_GPIO_WritePin(PWRKEY_SET_Port, PWRKEY_SET_Pin, GPIO_PIN_SET); HAL_Delay(600); // 保持低电平 600ms, 满足最小脉宽要求 HAL_GPIO_WritePin(PWRKEY_SET_Port, PWRKEY_SET_Pin, GPIO_PIN_RESET); } void b26_reset(void) { HAL_GPIO_WritePin(RESET_SET_Port, RESET_SET_Pin, GPIO_PIN_SET); HAL_Delay(150); // 复位脉宽 150ms HAL_GPIO_WritePin(RESET_SET_Port, RESET_SET_Pin, GPIO_PIN_RESET); }这段代码里GPIO初始化时输出低电平很关键:三极管基极低电平时截止,模组侧PWRKEY和RESET被内部上拉保持高电平,不会误触发开机或复位。开机函数先把PWRKEY_SET拉高600ms再释放,对应三极管导通拉低模组PWRKEY的过程。如果开机后模组没有反应,先用示波器抓模组侧PWRKEY引脚的波形,确认拉低时间和幅度是否到位,不要一上来就怀疑模组损坏。
5.3 PSM_EINT与低功耗唤醒路径
PSM_EINT的作用是在模组进入PSM省电模式后,通过外部事件把它唤醒。原理图里PSM_EINT_SET从主控来,经过Q7到模组PSM_EINT脚。实际使用场景是:主控和模组都睡下,某个外部传感器产生中断事件,主控被唤醒后拉低PSM_EINT_SET,通知模组退出PSM,然后双方通过UART交互。
这块容易踩的坑是主控休眠时GPIO状态不稳定,导致PSM_EINT被意外拉低,模组根本睡不进去。解决办法是主控进入休眠前把PSM_EINT_SET对应的GPIO配成固定高电平或者高阻输入,不要在休眠流程里反复翻转。配合RI脚做数据到达唤醒时,需要注意RI的电平定义不同版本固件有差异,打印RI状态确认比较保险。
6. 射频天线与整板调试:从原理图到首板验证
RF_ANT从BC26的35脚引出,经过U3(Z-21310110021001)这颗射频匹配/滤波网络后接到RF1(KH-IPEX-K501-29)IPEX座。U3的作用是阻抗匹配和带外抑制,NB-IoT工作频段在B3/B5/B8等,匹配网络通常由模组厂商参考设计给出,抄板时不要随意改动U3的型号和位置,天线走线需要控制特性阻抗,常见做法是表层微带线,线宽根据板厚和叠层计算,走线下方保持完整参考地,IPEX座附近留出净空区。
拿到第一版贴好的板子,调试顺序建议固定在六步:先量PP5V和PP3V3有无短路,再量PP1V8是否正常,然后量电平转换电路各路空闲电平,确认无误后发AT指令,看到OK后查AT+CPIN?和AT+CSQ,最后注册网络看NETLIGHT。如果NETLIGHT慢闪或闪烁节奏不符合预期,优先查天线是否接好、U3焊接是否连锡,再用频谱仪看射频输出。另外BC26的ADC0引脚可以通过两颗电阻分压检测电池电压,分压后的电压不要超过1.8V,这类小技巧在整板功耗调优时非常实用,能让主控在不额外增加采样芯片的情况下完成电池电量监控。
本文还有配套的精品资源,点击获取