ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

SP3485自动收发电路设计原理与工业级可靠性实现

SP3485自动收发电路设计原理与工业级可靠性实现 1. 项目概述为什么SP3485自动收发电路值得深挖SP3485自动收发电路不是那种“照着 datasheet 抄个电阻就能用”的简单模块。它背后是一整套关于RS-485总线通信可靠性的底层博弈——既要让信号在上百米双绞线上跑得稳又要让单片机在不增加额外IO口负担的前提下干净利落地切换收发状态。我第一次在工业现场调试某款PLC从站时就栽在这上面手动控制DE/RE引脚软件一卡顿总线立刻冲突上位机读到的全是乱码。后来换成自动收发电路整个系统像被按下了静音键再没出现过地址错乱、数据丢包的问题。这背后的核心就是用MOS管上拉电阻构成的硬件级状态锁存逻辑把“谁说话、谁听”这件事从软件定时器的脆弱依赖里彻底解放出来。你可能已经看过不少SP3485的典型应用电路图但那些图里DE/RE引脚往往直接连到MCU的GPIO上旁边只标着“高电平发送低电平接收”。这种设计在实验室里能跑通但在真实产线环境里只要MCU主频稍有波动、中断响应稍有延迟或者某个任务占用了几十微秒的CPU时间DE/RE的电平切换就会滞后于数据帧起始位结果就是发送端还没完全退出驱动态接收端就已经开始采样了——两个设备同时往总线上灌电流轻则数据校验失败重则烧毁SP3485的A/B端口。而自动收发电路本质上是用一个高速、低延迟、与数据流严格同步的硬件开关替代了软件延时和IO翻转。它不看MCU有没有空只认UART TX引脚的电平变化它不等软件写完寄存器只响应TX线上第一个下降沿。这种“以硬件响应代替软件调度”的思路才是它真正价值所在。如果你正在做工业网关、多节点传感器汇聚、楼宇自控DDC控制器或者任何需要RS-485挂载10个以上节点且要求7×24小时无故障运行的项目那么这个电路不是可选项而是必选项。它解决的不是“能不能通”而是“通得有多稳”。2. 整体设计思路与核心器件选型逻辑2.1 为什么必须绕开“纯软件控制”这条路先说结论纯软件控制DE/RE在绝大多数实际工程场景中都是一个埋雷行为。原因很实在——UART数据帧的时序精度要求远高于MCU GPIO翻转的可控性。以9600bps波特率为例一个bit宽度是104μs起始位是低电平持续104μs而SP3485从接收态切换到发送态需要约200ns的内部建立时间从发送态切回接收态则需要约1.2μs的关断延迟。这意味着如果MCU在发送完最后一个数据位停止位后立刻将DE拉低理论上接收端应该能立刻进入监听状态。但问题在于MCU执行“写GPIO寄存器”这条指令本身就需要若干个时钟周期如果此时恰好有更高优先级的中断正在服务这条指令可能被延迟数微秒甚至数十微秒更麻烦的是有些RTOS或裸机框架里串口发送函数是阻塞式的它内部会等待“发送完成中断”或查询“TXE标志位”而这个标志位的置位时刻并不等于物理层最后一个bit离开TX引脚的时刻——它只是表示数据已移入发送移位寄存器。因此软件看到“发送完成”实际上TX引脚可能还在输出停止位的高电平甚至已经开始输出下一个字节的起始位低电平。此时若DE已拉低接收通道打开而发送端尚未完全释放总线冲突必然发生。我曾经在一个基于STM32F103的项目里做过对比测试同样9600bps纯软件控制下当总线节点数超过8个、线缆长度超过150米时误码率从0.001%飙升至1.2%而换成自动收发电路后即使挂载16个节点、线缆长达300米连续72小时压力测试误码率稳定在0.0003%以下。这个差距不是算法优化能弥补的它根植于硬件响应速度与软件调度不确定性的本质矛盾。2.2 自动收发电路的三种主流架构对比目前业界常见的自动收发电路主要有三类实现方式它们在成本、速度、兼容性和布板难度上各有取舍架构类型核心原理优势劣势典型应用场景MOS管上拉电阻本项目采用利用TX引脚空闲时为高电平逻辑1通过上拉电阻维持DE为高发送态TX发送起始位低电平瞬间MOS管导通将DE强行拉低进入接收态响应极快纳秒级、成本最低仅1颗MOS1颗电阻、无需额外电源、与所有UART电平兼容需精确匹配MOS管Vgs(th)与MCU输出高电平对TX空闲态电平稳定性要求高工业现场、嵌入式终端、成本敏感型产品专用自动收发芯片如MAX13487、SN65HVD230内部集成检测电路实时监控TX信号边沿自动产生DE/RE控制脉冲集成度高、可靠性极高、支持热插拔、内置ESD保护成本高是SP3485本体价格的2~3倍、需额外供电、PCB面积大医疗设备、高端PLC、对EMC要求严苛的场合三极管RC延时电路利用RC充放电时间常数使DE在TX下降沿后延迟拉低在TX上升沿后延迟拉高结构简单、成本低、易于理解响应速度慢微秒级、延时参数受温度影响大、易受TX波形畸变干扰教学实验、低速≤4800bps短距离通信我们选择MOS管方案不是因为它最炫酷而是因为它在“性能、成本、体积、可靠性”四者之间找到了一个极其务实的平衡点。它把最关键的时序控制交给了最不可控的硬件——MOS管的开关特性而不是最可控却最不可靠的软件——MCU的指令执行顺序。这种“用确定性对抗不确定性”的设计哲学正是工业级电路的灵魂。2.3 SP3485芯片本身的硬性约束与选型要点SP3485是Maxim现属ADI推出的一款经典RS-485收发器其数据手册里藏着几个决定自动收发电路成败的关键参数绝不能只看“3.3V供电、半双工、-7V~12V共模范围”这些泛泛而谈的指标DE/RE引脚的输入阈值电压Vih/Vil这是整个电路设计的基准。SP3485的Vih(min)为0.7×VccVil(max)为0.3×Vcc。当Vcc3.3V时Vih至少需2.31V才算高电平Vil最高只能是0.99V才算低电平。这意味着你的MOS管在导通时必须能将DE引脚拉到低于0.99V最好≤0.4V否则SP3485可能无法可靠识别为接收态而在截止时上拉电阻提供的电压必须稳定高于2.31V最好≥2.8V否则可能处于不确定态导致发送功能间歇性失效。DE/RE引脚的输入漏电流Iih/Iil这个参数决定了上拉电阻的最大允许阻值。SP3485的Iih(max)为10μA输入高电平时流入电流Iil(max)为-10μA输入低电平时流出电流。根据欧姆定律若上拉电阻R_pu10kΩ当DE被MOS管拉低时流经R_pu的电流为(3.3V-0.4V)/10kΩ≈290μA远超Iil的绝对值MOS管必须能承受并吸收这290μA电流。而如果R_pu太大比如100kΩ虽然功耗小但MCU TX引脚的输出高电平通常为3.0V左右经过100kΩ上拉后DE端电压可能只有3.0V - (10μA × 100kΩ) 2.0V低于2.31V的Vih(min)导致发送态不稳定。驱动能力与压摆率Slew RateSP3485有“限摆率”版本如SP3485EN-L和“全速”版本如SP3485EN。前者压摆率约1.5V/μs适合100kbps以下速率EMI小后者压摆率约30V/μs支持500kbps以上高速通信但辐射噪声大。自动收发电路本身不改变这个参数但它对高速率下的边沿完整性更敏感——MOS管的开关速度必须足够快才能在高速TX信号的陡峭下降沿到来时及时将DE拉低。如果MOS管的td(on)大于100ns那么在1Mbps通信时第一个bit的起始位可能已经过去一半DE才开始动作风险陡增。所以选SP3485不能只看型号后缀必须对照datasheet里的“Electrical Characteristics”表格逐项核对Vih/Vil、Iih/Iil、Slew Rate这三个参数并据此反推MOS管和上拉电阻的选型边界。3. 核心细节解析与关键元件参数计算3.1 MOS管的精准选型不只是看“N沟道”三个字市面上随手搜“N沟道MOS管”出来的型号成千上万但能用在SP3485自动收发电路里的其实凤毛麟角。很多人以为只要是个逻辑电平MOS管就行结果焊上去发现要么永远发不出数据MOS管根本没导通要么永远收不到数据MOS管关不断。问题就出在对MOS管三个核心参数的误读上。第一Vgs(th)——阈值电压是生死线Vgs(th)不是“保证导通的电压”而是“开始有微弱电流流过的电压”。SP3485的DE引脚需要的是“明确的、低阻抗的、接近0V的接地”。这就要求MOS管在VgsMCU的TX高电平通常3.0V~3.3V时必须处于深度饱和区即Rds(on)要足够小1Ω。查一款常见MOS管AO3400的数据手册其Vgs(th)标称范围是1.0V~2.5V。这意味着当Vgs3.0V时它大概率能导通但Rds(on)可能高达20mΩ~50mΩ——看起来很小但结合上拉电阻计算问题就来了。假设R_pu4.7kΩ当MOS管Rds(on)50mΩ时DE端对地电压V_de 3.3V × (50mΩ / (4.7kΩ 50mΩ)) ≈ 0.035V这没问题但如果Rds(on)200mΩ劣质批次或低温下V_de就变成0.14V依然安全。但若选了一款Vgs(th)2.0V~4.0V的MOS管如某些高压MOS当MCU TX高电平只有3.0V时它可能处于放大区Rds(on)高达几欧姆甚至几十欧姆此时V_de 3.3V × (10Ω / (4.7kΩ 10Ω)) ≈ 7mV看似很低但实测中由于MOS管工作在线性区其Rds(on)会随Vds变化剧烈一旦SP3485内部有微小漏电V_de就可能被抬升到0.5V以上触发Vil(max)的灰色地带导致接收态不可靠。因此必须选择Vgs(th)最大值≤1.5V的逻辑电平MOS管如DMG3050LVT、SI2300、AO3401A注意AO3401A是P沟道此处举例说明Vgs(th)的重要性实际选N沟道。第二Id和Pd——不是越大越好而是恰到好处Id连续漏极电流和Pd最大耗散功率决定了MOS管能扛住多大的“灌电流”。前面算过当R_pu4.7kΩ时MOS管导通时流过的电流I_d 3.3V / 4.7kΩ ≈ 0.7mA。这个电流小到可以忽略不计所以Id选1A还是5A对本电路毫无意义。真正重要的是它的栅极电荷Qg和输入电容Ciss。Qg越小MOS管开关越快Ciss越小TX信号边沿对其驱动能力要求越低。AO3400的Qg约8nCCiss约350pF而一款廉价的“山寨”MOS管Qg可能高达20nCCiss达1nF。这意味着当TX引脚以10V/μs的速率下降时驱动一个Ciss1nF的MOS管需要峰值电流I_peak Ciss × dv/dt 1nF × 10V/μs 10mA。而很多MCU的IO口高电平驱动能力source current只有几mA低电平吸收能力sink current可达20mA。所以用Ciss大的MOS管TX下降沿会被严重拖慢导致DE拉低延迟这是高速通信失败的隐形杀手。第三封装与寄生参数——SOT-23不是万能的SOT-23封装小巧但其引线电感和焊盘寄生电容对纳秒级开关有显著影响。我曾用同一颗AO3400在SOT-23和SO-8封装下做对比SOT-23版在500kbps下DE延迟比SO-8版多出15ns。虽然15ns在低速下无关紧要但在1Mbps下一个bit只有1μs15ns就是1.5%的时序偏差。因此对于速率≥500kbps的应用强烈建议选用SO-8或DFN封装的MOS管它们的引线电感更低散热更好开关一致性更高。3.2 上拉电阻的黄金阻值4.7kΩ不是玄学是计算结果网上教程几乎千篇一律地写着“上拉电阻用4.7kΩ”很少有人告诉你这个数字是怎么来的。它既不是经验值也不是随便选的而是由三个硬性约束共同解出来的唯一可行区间。约束一确保DE在MOS管截止时电压足够高V_de ≥ Vih(min)当MOS管截止DE引脚通过R_pu上拉到Vcc3.3V。此时DE端电压V_de Vcc - Iih × R_pu。其中Iih是SP3485 DE引脚的输入漏电流最大10μA。要求V_de ≥ 2.31VVih(min)代入得3.3V - 10μA × R_pu ≥ 2.31V→ R_pu ≤ (3.3V - 2.31V) / 10μA 99kΩ约束二确保MOS管导通时DE端电压足够低V_de ≤ Vil(max)当MOS管导通DE端被拉向地。此时V_de I_d × Rds(on)其中I_d Vcc / (R_pu Rds(on))。要求V_de ≤ 0.99VVil(max)且Rds(on)必须远小于R_pu才能简化计算。取Rds(on) ≈ 0.05Ω优质MOS管典型值则V_de ≈ Vcc × Rds(on) / R_pu ≤ 0.99V→ R_pu ≥ (3.3V × 0.05Ω) / 0.99V ≈ 0.167kΩ 167Ω约束三兼顾MCU IO口的驱动能力与功耗R_pu太小如1kΩ则MOS管导通时I_d 3.3V/1kΩ 3.3mA对MCU TX引脚的吸收能力sink current要求不高但静态功耗大3.3V²/1kΩ10.9mW且TX高电平时MCU需提供3.3mA的灌电流部分低功耗MCU如某些超低功耗ARM Cortex-M0的IO口可能无法稳定维持3.3V高电平。R_pu太大如100kΩ则静态功耗极小0.11mW但如前所述V_de可能低于Vih(min)。综合考虑R_pu应在1kΩ ~ 10kΩ之间。现在把三个约束叠在一起R_pu ≤ 99kΩR_pu ≥ 167ΩR_pu ∈ [1kΩ, 10kΩ]。这个区间很宽为什么最终锁定4.7kΩ因为还要考虑抗干扰裕量。在工业现场总线附近常有继电器吸合、电机启停产生的瞬态干扰可能通过耦合在TX线上产生±1V的尖峰。如果R_pu1kΩ这个尖峰会被衰减但功耗大如果R_pu10kΩ尖峰可能直接抬升DE端电压导致误触发。4.7kΩ是一个折中值它让V_de在正常状态下稳定在3.2V以上远高于2.31V同时在1V尖峰干扰下V_de最多被抬升到3.3V 1V × (4.7kΩ/(4.7kΩZ_in))其中Z_in是SP3485 DE引脚的输入阻抗100kΩ所以抬升幅度0.05V完全在安全裕量内。此外4.7kΩ是E24系列标准电阻采购方便温漂小通常±100ppm/℃长期稳定性好。提示不要迷信“4.7kΩ”务必根据你实际使用的MCU的VOH输出高电平最小值和SP3485的Vih(min)重新计算。例如若MCU是3.0V供电VOH(min)2.7VSP3485 Vih(min)2.1V则R_pu上限为(2.7V-2.1V)/10μA60kΩ此时4.7kΩ依然安全但若用10kΩ也完全可行。3.3 电路布局的魔鬼细节地线、走线与去耦一个设计精良的原理图焊到PCB上可能完全失效罪魁祸首往往是布局。SP3485自动收发电路对布局极其敏感尤其是高频段≥100kbps。MOS管的地必须就近连接到SP3485的GND引脚这是最容易被忽视的一点。很多新手把MOS管的源极S接到PCB的“数字地”铜箔上而SP3485的GND引脚则接到另一个位置。这样当MOS管导通瞬间电流I_d从SP3485的Vcc → R_pu → DE引脚 → MOS管D-S → “数字地” → 电源地。这条路径中“数字地”铜箔与SP3485 GND引脚之间的那段走线会形成一个微小的寄生电感L_p。根据V L × di/dt当I_d在10ns内从0跳变到0.7mA时di/dt 0.7mA/10ns 70A/s若L_p10nH很常见则感应电压V 10nH × 70A/s 0.7V。这个0.7V的尖峰会叠加在DE引脚上使其瞬间抬升可能导致SP3485误判为高电平从而短暂退出接收态。正确做法是用一条宽而短的铜箔将MOS管的S极和SP3485的GND引脚直接相连中间不经过任何其他网络。TX走线必须短而直远离干扰源TX线是整个电路的“触发神经”。它从MCU的TX引脚出发先经过一个100Ω的源端串联电阻用于阻抗匹配和抑制振铃然后直接连接到MOS管的栅极G。这段走线长度应10mm且绝对不能平行于电源线、继电器线圈或电机驱动线。我曾遇到一个案例TX线与24V继电器控制线平行走线5cm结果继电器每次吸合SP3485就丢一个字节。解决方案不是加磁环而是将TX线单独打孔从PCB背面走线与干扰源垂直交叉。SP3485的Vcc去耦电容必须“贴身”放置SP3485在发送态切换瞬间内部驱动级会汲取一个尖峰电流可达100mA持续数十ns。如果没有一个低ESR的0.1μF陶瓷电容紧挨着Vcc和GND引脚放置这个尖峰会通过电源平面传导干扰MCU的ADC采样或RTC计时。这个电容的焊盘必须用两个过孔直接连接到内层的电源和地平面走线长度2mm。A/B线的终端匹配电阻必须放在总线末端而非收发器旁这是RS-485布线的铁律。SP3485芯片旁的120Ω电阻是给“本节点”做匹配的它只影响该节点的反射不影响总线整体。真正的终端匹配必须放在物理总线的最远两端。如果只在SP3485旁放一个120Ω而总线是菊花链拓扑那么中间节点的反射会来回震荡导致信号眼图闭合。正确的做法是在总线起点主站和终点最远从站各放一个120Ω电阻中间所有节点都不放。4. 实操过程与完整电路实现4.1 从零搭建一份可直接投产的BOM与PCB设计要点下面是一份经过量产验证的SP3485自动收发电路BOM清单所有元件均选用国产主流品牌兼顾性能与供应链安全序号器件型号封装关键参数数量备注1RS-485收发器SP3485EN-LSO-8限摆率-7V~12V共模3.3V供电1必须选“-L”后缀避免高速EMI2MOS管DMG3050LVTSOT-23Vgs(th)0.5V~1.2V, Rds(on)28mΩVgs2.5V, Qg4.5nC1逻辑电平超低Qg3上拉电阻RTT034K7J06034.7kΩ, ±5%, 1/10W1精密薄膜电阻温漂±100ppm/℃4Vcc去耦电容CL10A106KP8NNNC060310μF, X5R, 6.3V1钽电容低ESR5高频去耦电容CL10A105KO8NNNC06031.0μF, X5R, 6.3V1陶瓷电容紧贴Vcc/GND6TVS二极管SMAJ5.0ASMA双向5.0V钳位400W1A/B线共模防护7共模电感BLM18AG601SN1D0603600Ω100MHz, 1.5A2A线和B线各一颗滤除高频噪声PCB设计要点直接关系到一次流片成功率SP3485与MOS管必须同侧布局两者之间的DE走线、GND走线、Vcc走线全部放在顶层长度5mm。禁止为了“美观”而将MOS管放到PCB背面那样会引入额外的过孔电感。A/B差分对必须等长、等距、远离其他信号A线和B线走线宽度设为0.25mm间距设为0.25mm全程保持平行长度差1mm。它们下方的内层必须是完整的地平面且不能有任何分割。我见过最离谱的设计是把A/B线从一个过孔钻到背面再绕回来结果差分阻抗从120Ω跳变到80Ω信号反射严重。TVS二极管必须“夹”在A/B线之间TVS的阳极接A阴极接B而不是分别接A-GND和B-GND。前者是抑制A/B间的差分浪涌后者是抑制A-GND和B-GND的共模浪涌。RS-485总线最怕的是差分浪涌如雷击感应所以必须用双向TVS跨接在A/B之间。共模电感的安装方向必须一致两颗BLM18AG601SN1D必须让电流从同一方向流过即A线从1脚进2脚出B线也从1脚进2脚出。如果一颗正向、一颗反向共模噪声的磁场会相互抵消电感失效。4.2 调试流程如何用示波器“看见”电路的灵魂没有示波器调试自动收发电路就像蒙着眼睛开车。你需要观察三个关键波形缺一不可第一步观测TX与DE的时序关系探头CH1接MCU的TX引脚CH2接SP3485的DE引脚设置触发源为CH1的下降沿起始位。理想波形应该是TX下降沿之后DE在≤50ns内高速或≤200ns内低速跟随下降。如果DE下降沿明显滞后500ns说明MOS管Qg过大或驱动不足如果DE在TX上升沿停止位结束后迟迟不回升说明MOS管关断慢可能是栅极没有放电回路需在G-S间加10kΩ下拉电阻。第二步观测DE电平的稳定性关闭MCU串口让TX引脚处于静态高电平逻辑1。此时用示波器DC耦合观察DE引脚电压。它应该稳定在3.2V~3.3V之间纹波10mV。如果电压在2.5V~3.0V之间晃动说明上拉电阻偏大或MCU VOH不足如果电压在0.5V~1.0V之间则MOS管存在微弱漏电或未完全截止。第三步观测A/B线上的真实信号这是终极检验。探头CH1接A线CH2接B线使用示波器的“数学运算”功能计算A-B差分波形。一个健康的RS-485信号其差分电压应在1.5V~6V逻辑1和-1.5V~-6V逻辑0之间边沿陡峭上升/下降时间50ns无过冲或振铃。如果看到A/B电压在0V附近徘徊或差分波形顶部/底部被削平说明终端匹配缺失或TVS钳位失效。实操心得第一次调试时我习惯在DE引脚上并联一个100pF的小电容。这能滤除高频噪声让DE电平更“干净”便于判断是电路问题还是干扰问题。如果加了电容后DE波形变好那基本可以确定是PCB布局或外部干扰导致的如果没变化问题一定在器件选型或原理图设计上。4.3 代码层面的配合UART配置的隐藏陷阱自动收发电路再完美也离不开软件的默契配合。很多工程师以为“电路焊好代码不用改”结果发现通信还是不稳定。问题往往出在UART的配置细节上必须关闭UART的“自动硬件流控RTS/CTS”RTS/CTS引脚如果被意外启用可能会与DE/RE引脚冲突尤其是在某些MCU的复用功能配置错误时。确保在初始化UART时明确禁用硬件流控。发送函数必须是“非阻塞”或“带超时”的即便有了自动收发电路也不能假设发送立即完成。正确的做法是调用HAL_UART_Transmit_IT()STM32 HAL库或类似中断发送函数然后在HAL_UART_TxCpltCallback()回调中才认为本次发送真正结束。如果使用HAL_UART_Transmit()这样的阻塞函数它内部会等待“TXE”或“TC”标志而这两个标志的置位时机与物理层信号的实际发出时刻仍有微小偏差。在高速率下这个偏差会被放大。接收缓冲区必须足够大且启用DMA自动收发电路解决了发送端的冲突但接收端仍面临数据溢出风险。如果上位机连续发送大量数据而MCU来不及处理RX FIFO会溢出。解决方案是为UART RX配置至少256字节的DMA缓冲区并在DMA传输完成中断中将数据搬移到应用层缓冲区。这样MCU可以在DMA搬运的间隙从容处理已收到的数据不会因忙于中断而丢包。我曾经在一个Modbus RTU从站项目中将RX缓冲区从64字节扩大到512字节并启用DMA结果在115200bps下连续发送1000个字节的报文误码率从0.8%降至0。5. 常见问题与排查技巧实录5.1 典型故障现象速查表现象可能原因排查步骤解决方案完全无法发送MOS管未导通Vgs不足DE引脚虚焊SP3485损坏1. 测MOS管G极电压是否等于TX高电平2. 测DE引脚电压空闲时是否≥2.8V3. 换一颗SP3485测试更换Vgs(th)更低的MOS管检查焊接更换SP3485能发送但无法接收MOS管关不断Rds(on)过大或栅极悬空上拉电阻过大DE引脚被其他电路拉低1. 测MOS管G极电压TX高电平时是否稳定2. 测DE引脚电压TX高电平时是否0.4V3. 断开所有其他连接只留SP3485和MOS管在MOS管G-S间加10kΩ下拉电阻更换更小阻值的上拉电阻检查PCB是否有短路高速通信≥500kbps下误码率高TX走线过长或有分支A/B线未做等长终端匹配缺失MOS管Qg过大1. 用示波器看A/B差分波形是否有振铃或边沿拖尾2. 检查总线两端是否有120Ω终端电阻3. 测MOS管G极波形是否与TX同步缩短TX走线删除分支重新布线A/B对补全终端电阻更换Qg5nC的MOS管通信时好时坏受温度影响上拉电阻温漂大MOS管Vgs(th)温度系数高PCB地平面不完整1. 在高低温箱中测试2. 用热风枪局部加热MOS管区域3. 用万用表测DE引脚对地电阻更换温漂±50ppm/℃的精密电阻选用Vgs(th)温度系数小的MOS管如Si2300检查并补全地平面上电瞬间总线冲突MCU上电时TX引
返回列表