
简介面向智能车竞赛、直流电机控制课程设计与大功率驱动调试的读者这份资料包提供BTS7960大功率电机驱动模块的完整硬件设计文件涵盖原理图、PCB工程及配套使用说明。模块支持627V电机电压、最大43A输出具备PWM平滑调速、正反转控制、全光电隔离输入、信号与电源指示及内部续流保护控制信号端为312V适合飞思卡尔智能车等低压大电流场景。压缩包共11个文件、约5.08MB以Altium Designer工程文件.PrjPCB、.SchDoc、.PcbDoc为核心另含结构预览、状态报告、使用手册与图表说明文档便于直接查看原理、核对封装并复用PCB设计。已有3970人学习可帮助读者理解大功率H桥驱动电路的器件选型、隔离与保护设计并对照手册完成接线、调速与正反转调试。1. 需求切入一块能扛住 20A 堵转的驱动板24V 直流减速电机堵转电流 20A 往上底盘要频繁正反转还要能刹停——这是我在做某机器人底盘驱动板时遇到的第一道坎。最初用继电器换向两周触点就烧黑换成分立 MOS 加栅极驱动死区、续流、过流保护全得自己搭调试周期直接翻倍。后来把方案换成两片大功率电机驱动 BTS7960 半桥芯片拼 H 桥一片管一路逻辑电平直接吃 3.3V电流检测也内置了外围只剩去耦、采样电阻和端子。这份原理图加 PCB 的完整设计就是围绕这个方案展开的适合正在做电机驱动课设、毕设或者要给小车底盘、升降机构、履带平台做一块能持续跑 15A 以上驱动板的同学和工程师。下面按照需求、参数、原理图、PCB、避坑、验收的顺序把能直接照抄的部分和容易翻车的地方都说明白。2. 总体方案双半桥拼 H 桥的拓扑与六项参数定档2.1 四种候选方案的实际取舍先说清楚为什么不直接用继电器。继电器换向靠机械触点24V/20A 的直流负载在断开瞬间会拉弧触点两三个月就发黑而且吸合时间在 10ms 量级做不了 PWM 调速也没法在堵转时快速切断。它只适合启停不频繁、不需要调速的场合比如简单的推杆伸缩。L298N 这类双极型达林顿驱动是很多人的入门选择但它的问题在压降饱和压降 2V 以上10A 时片上功耗超过 20WTO-220 封装根本压不住温升。做小电流玩具可以做 24V 底盘属于硬撑。分立 N 沟道 MOS 加半桥驱动 IC 是最灵活的路线效率也最高代价是自举电路、死区、米勒效应、短路保护、电流采样全都要自己处理。没有功率电路经验的人第一版板子大概率会在直通和振铃上卡两周。两片 BTS7960 拼 H 桥是折中方案单片内部集成高边 NMOS、低边 NMOS、电荷泵、栅极驱动、电流镜采样和过温过流保护外部只需要给电平和 PWM。导通电阻典型值 8.5mΩH 桥路径上串两颗合计约 17mΩ20A 时导通损耗约 6.8W——这个数字后面会反复出现它是散热设计的起点。代价也很明确一片只是半桥换向逻辑要靠 MCU 保证芯片内部的限流点是固定值典型 43A不能精确调节功率损耗集中在一个小封装里必须配散热。2.2 六项关键参数的定档依据参数不能拍脑袋定每一个都要能说出「为什么是这个值」。下表是我在这块板子上最终定下来的六项参数定档值依据母线电压12–24V芯片 VS 上限约 27V6S 锂电满电 25.2V 留 1.8V 裕量24V 铅酸满电 29V 会顶到耐压边缘持续电流15A配 20×20mm 铝散热片受限于导通损耗与结温不是芯片标称值峰值电流30A / 5s内部限流点典型 43A留出降额空间PWM 频率16–20kHz高于人耳听感阈值开关损耗又可接受换向死区3–5us感性电流泄放窗口只在方向切换时插入电流采样0–30ARsense 1kΩ30A 对应 3.5mA 输出1kΩ 上得到 3.5V母线电压这一项值得单独说。很多方案直接写 24V但 24V 铅酸电池满电是 29V 左右6S 锂电满电 25.2V7S 就到 29.4V。芯片的 VS 工作范围上限在 27V 出头一旦电池满电加上电机回馈的泵升电压很容易超。我一般会在入口加一颗工作电压 24V、钳位 32V 以下的双向 TVS同时在文档里写清楚「24V 铅酸系统要么加一级降压要么把电池组控制在 6S 以内」。这一句写进毕设的「设计约束」里答辩时是很加分的细节。PWM 频率这一项也有取舍。1kHz 以下电机会有明显的电流啸叫电流纹波大低速时抖动40kHz 以上开关损耗上升芯片发热明显而且电荷泵的补充能力开始吃紧。16–20kHz 刚好在听感阈值之上、损耗曲线的拐点之前是实测下来最舒服的区间。死区不是给同一片半桥的上下管留的——BTS7960 内部有互锁IN 为高时高边导通、为低时低边导通不会直通。真正的风险在换向瞬间正转时左桥高边斩波、右桥低边常通切成反转时如果两片同时收到新指令电机两端会瞬间被短路20A 的电流突变在母线寄生电感上激出很高的尖峰。所以死区的本质是「先全关让电机电流走续流二极管泄放再反向」。2.3 四个域的划分与接口定义板子上有四种性质完全不同的信号画原理图之前先在纸上把它们分开后面 PCB 就不会乱域包含信号接地点特点功率域VBAT、OUT1、OUT2PGND20A 级di/dt 大逻辑域3.3V、IN、INHLGND毫安级怕干扰采样域IS1、IS2跟随芯片 GND毫伏级怕地压降接口域排针、接线端子就近机械强度优先逻辑地和功率地不要各铺一块然后随便连。通常的做法是整板以功率地为主平面逻辑地单独走一条线回到电源入口处用 0Ω 电阻或磁珠单点连接位置选在输入电解电容的负极焊盘旁边。这样 20A 电流在地平面上产生的毫伏级压降不会叠加到 MCU 的 GND 参考上。接口定义要在原理图第一页就写死别等到画 PCB 再改。我这块板子的定义是左侧 6pin 排针依次为 3.3V、GND、L_EN、L_PWM、R_EN、R_PWM右侧 2pin 为 IS1、IS2下方大电流端子为 VBAT、GND、M1、M2。排针和端子之间留 8mm 以上距离避免接线时的螺丝刀碰到弱电。3. 原理图设计从母线入口到电机端口的五段网络3.1 母线入口与两级去耦电源入口的顺序是接线端子 → 自恢复保险丝或快断保险→ 防反接 PMOS → 双向 TVS → 电解电容 → 陶瓷电容 → 芯片 VS 引脚。这个顺序不是随便排的防反接放在 TVS 前面是为了让反接时电流不经过 TVS避免 TVS 长期承受反向电流而失效。电解电容选 470uF/35V 低 ESR位置紧贴端子它负责吸收电机换向和堵转时的低频大电流冲击。陶瓷电容分两级10uF/50V 的 1210 封装放在电解旁边100nF/50V 的 0603 放在每片芯片的 VS 与 GND 引脚之间距离控制在 5mm 以内。提示100nF 这颗电容不是可选项。BTS7960 内部电荷泵在工作时会对 VS 引脚产生脉冲电流如果去耦不足这个脉冲会在走线电感上产生压降表现为高占空比时高边驱动欠压、上管发烫。这一颗电容的位置比容值更重要。防反接用 PMOS 而不是二极管是因为二极管在 20A 下有 0.5V 以上的压降10W 的损耗足以让 TO-220 封装烫手。PMOS 的导通电阻选 5mΩ 以下的型号20A 时损耗只有 2W而且不需要额外散热。栅极加一颗 10k 下拉电阻和一颗 12V 稳压管做栅源钳位防止母线尖峰打穿栅极。3.2 输入网络3.3V 电平、上下拉与 RCBTS7960 的 IN 和 INH 都是高阻 CMOS 输入逻辑高阈值在 2V 左右3.3V 单片机可以直接驱动不需要电平转换。但有两个细节必须处理第一IN 和 INH 都必须加 10k 下拉电阻。MCU 复位或下载程序时引脚处于高阻态如果输入悬空芯片内部的电平不确定可能出现上电瞬间电机自己转一下的情况。下拉电阻放在靠近芯片引脚的位置不要放在排针旁边。第二长线驱动要加 RC。如果 MCU 和驱动板之间的排线超过 10cmPWM 边沿会在线上振铃严重时超过芯片的绝对最大输入电压。我的做法是串 100Ω 电阻加 100pF 对地电容截止频率约 16MHz对 20kHz 的 PWM 几乎没有影响但能把振铃压下去。/* 输入侧初始化先把两个使能拉低再配置 PWM */ void drv_init(void) { /* 顺序不能反先关使能避免配置过程中电机抽动 */ HAL_GPIO_WritePin(EN_GPIO, L_EN_PIN, GPIO_PIN_RESET); HAL_GPIO_WritePin(EN_GPIO, R_EN_PIN, GPIO_PIN_RESET); /* 20kHz PWM中心对齐模式计数器 0-999 */ pwm_config(PWM_L_CH, 20000, 1000); pwm_config(PWM_R_CH, 20000, 1000); pwm_set_duty(PWM_L_CH, 0); pwm_set_duty(PWM_R_CH, 0); }这段初始化的关键在于顺序先拉低使能再配置定时器。如果先开 PWM 再拉使能中间那几毫秒里 IN 引脚的状态是不确定的电机可能猛地抽一下。参数上20kHz 对应周期 50us计数器 1000 对应 50ns 的分辨率做 1% 的调速绰绰有余。3.3 电流检测IS 引脚、采样电阻与滤波IS 引脚输出的是与负载电流成比例的电流源比例系数典型值 8500以数据手册为准也就是说 20A 负载对应约 2.35mA 输出。这个电流流过对地的采样电阻 Rsense得到电压V_IS I_load × Rsense / 8500按 30A 满量程、3.3V ADC 计算Rsense 取 1kΩ 时满量程电压是 3.5V略微超出取 680Ω 时是 2.4V留有余量。我在这块板子上用的是 1kΩ因为 MCU 供电是 5VADC 参考也是 5V3.5V 刚好在量程内。采样电阻后面必须加 RC 滤波1kΩ 加 100nF截止频率约 1.6kHz。这个值不能随意加大有人用 10kΩ 加 1uF截止频率降到 16Hz堵转发生的前 200ms 内采样值根本跟不上保护逻辑形同虚设。1.6kHz 对 20kHz 的 PWM 有 12 倍以上的衰减对 100Hz 以内的机械动态又几乎没有延迟是比较合适的折中。注意IS 引脚不能开路。内部是电流源输出开路时引脚电压会一直往上飘可能超过 ADC 的输入范围。调试时如果暂时不接采样电路也要焊一颗 1kΩ 到地。还有一个容易被忽略的点IS 只能测单方向电流。H 桥正转时电流从左桥流向电机反转时方向相反两个半桥的 IS 输出分别对应两个方向。做堵转保护时要把两路都采进来取绝对值再比较只采一路会在反转时失去保护。3.4 电机端口吸收网络与端子电机端子两端各并一组 RC 吸收10Ω 电阻串 100nF 电容跨接在 M1 和 M2 之间。它的作用是抑制换向瞬间的电压尖峰尤其是电机引线较长时分布电感会在断流瞬间产生几百伏的尖峰虽然芯片内部有续流二极管但二极管的反向恢复过程仍会产生振铃。端子选大电流螺钉式间距 5.08mm额定 30A 以上。端子的焊盘要开窗正面和背面都铺铜过孔至少 8 个 0.3mm 并联不然 20A 电流全压在几个过孔上温升会很可观。端子与芯片 OUT 引脚之间的走线要短于 15mm这段走线不走信号也尽量不要在下方穿敏感信号线。电机引线本身也有讲究。两根线要双绞长度控制在 30cm 以内超过这个长度辐射会明显增强附近的 ADC 采样线容易受干扰。如果结构上必须走长线在电机端加一颗共模电感或者在驱动板入口加 TVS 对地钳位。3.5 换向时序与死区的固件约定原理图画完之后死区这件事必须和固件同学对齐否则板子做得再好也白搭。约定是方向切换时先把两个 EN 拉低延时 4us再打开新方向的 EN最后给 PWM。正常运行时不插入死区否则每个 PWM 周期损失 8% 的占空比。/* duty: -1000 ~ 1000正为前进负为后退0 为自由停车 */ #define DEAD_TIME_US 4 static int8_t last_dir 0; void motor_set(int16_t duty) { int8_t dir; uint16_t mag; if (duty 1000) duty 1000; if (duty -1000) duty -1000; dir (duty 0) - (duty 0); /* 提取方向-1 / 0 / 1 */ mag (uint16_t)((duty 0) ? duty : -duty); /* 只在方向发生变化时插入死区避免每周期的占空比损失 */ if (dir ! last_dir) { HAL_GPIO_WritePin(EN_GPIO, L_EN_PIN, GPIO_PIN_RESET); HAL_GPIO_WritePin(EN_GPIO, R_EN_PIN, GPIO_PIN_RESET); delay_us(DEAD_TIME_US); /* 感性电流泄放窗口 */ last_dir dir; } if (dir 0) { HAL_GPIO_WritePin(EN_GPIO, L_EN_PIN, GPIO_PIN_SET); pwm_set_duty(PWM_L_CH, mag); /* 左桥高边斩波 */ pwm_set_duty(PWM_R_CH, 0); /* 右桥低边常通 */ } else if (dir 0) { HAL_GPIO_WritePin(EN_GPIO, R_EN_PIN, GPIO_PIN_SET); pwm_set_duty(PWM_R_CH, mag); pwm_set_duty(PWM_L_CH, 0); } else { pwm_set_duty(PWM_L_CH, 0); pwm_set_duty(PWM_R_CH, 0); } }last_dir这个静态变量是关键。没有它每次调用都会走一遍关断延时20kHz 下每周期 50us 里有 4us 是关断的实际占空比只有 92%电机高速时会明显没劲。加上方向判断之后死区只在真正换向时出现正常运行零损失。刹车和自由停车要分开两个 EN 都拉低、PWM 置零是自由停车电机惯性滑行两个 EN 都拉高、两路 PWM 都为 0 是刹车电机两端被低边 MOS 短接动能转成电流消耗在回路电阻上。后者电流冲击大只在需要快速停止时用且要配合电流采样做过流判断。4. PCB 设计功率回路、铜厚与散热的落地尺寸4.1 叠层与铜厚选择这块板子的尺寸大约 50×40mm双层板也能画但功率回路和地平面会打架。我最终选的是四层层用途铜厚L1功率走线、器件面2ozL2完整地平面1ozL3电源分配1ozL4信号、采样线1ozL2 做成完整地平面不做任何分割。L1 上的功率走线尽可能宽L4 只走 IS 采样和排针信号避免与功率线平行。四层板的成本比双层高一些但换来的是稳定的地参考和更好的散热对于要跑 15A 的板子这笔钱值得花。如果成本卡得紧必须用双层那就用 2oz 铜厚顶层走功率、底层整片铺地功率走线开窗加锡。开窗加锡能增加约 30% 的载流能力但焊锡厚度不均匀不能作为精确设计依据只能当额外裕量。4.2 走线宽度把电流算成毫米走线宽度不能凭感觉。按 IPC-2221 的简化公式外层走线允许温升 30℃ 时# IPC-2221 走线宽度估算先由电流反解截面积再除以铜厚 def trace_width_mm(current_a, delta_t30, copper_oz1.0, outerTrue): k 0.048 if outer else 0.024 # 外层/内层系数 area_mil2 (current_a / (k * delta_t ** 0.44)) ** (1 / 0.725) thickness_mil 1.378 * copper_oz # 1oz 铜厚约 1.378mil return area_mil2 / thickness_mil * 0.0254 for oz in (1, 2, 3): row f{oz}oz 温升30℃: for i in (10, 15, 20, 30): row f{i}A{trace_width_mm(i, copper_ozoz):.1f}mm print(row)跑出来的结果是铜厚10A15A20A30A1oz3.7mm6.5mm9.6mm16.8mm2oz1.9mm3.2mm4.8mm8.4mm3oz1.2mm2.1mm3.2mm5.6mm结论很直接20A 持续电流如果走 1oz 铜需要将近 10mm 宽板子上根本放不下。所以要么用 2oz4.8mm、要么开窗加锡、要么在端子到芯片这一段直接用铜排或多层并联。我选的是 2oz 加开窗走线宽度 5mm同时在下方 L2 地平面做完整参考实际温升比计算值低 5℃ 左右。提示这个公式算的是「导线自身本文还有配套的精品资源点击获取