ARTICLE DETAIL

资讯详情

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

工训赛开源电路与方案设计:从模块选型到PCB落地的完整指南

工训赛开源电路与方案设计:从模块选型到PCB落地的完整指南 工训赛的备赛周期通常只有一到两个月很多时候还要和课程设计、期末考试挤在一起。真正让队伍被淘汰的往往不是任务本身太难而是方案设计阶段埋下的坑电源模块带不动电机、编码器信号被干扰、电路板改版四次却找不到问题根源。这些问题的共同根源是队伍把开源电路当成了“拿来就能用”的现成答案却缺少一套把开源资源消化成自己方案的工程设计方法。这篇文章想讲清楚的不是某一个电路模块的原理图怎么抄而是工训赛背景下开源电路与方案设计的完整关系开源资源到底解决了什么问题、哪些环节必须自己设计、从需求分解到原理图和 PCB 的完整流程是什么、以及最容易让队伍返工的坑在哪里。文章会从模块化架构讲起给出电源、电机驱动、编码器等核心模块的设计要点再附上可落地的控制代码和排查清单。无论你参赛的方向是循迹、搬运、物流还是竞速这套方法都能直接套用。1. 这篇文章真正要解决的问题很多工训赛队伍的开局方式高度相似先到电商平台买一套现成小车底盘再找一份开源控制代码然后开始“排雷”。排雷过程通常是这样——电机能转但转速不受控传感器数据一直在跳换上大电池后主控频繁复位临近比赛时电路板烧了却没有备用方案。这些问题的技术难度并不高但它们暴露了一个共同弱点缺乏方案设计能力。方案设计不是画一张漂亮的系统框图而是把比赛任务翻译成可量化、可测试、可迭代的工程指标。开源电路在这个过程中的作用是减少重复劳动而不是替你做决策。具体来说本文解决三个问题开源电路在工训赛方案中应该怎么用哪些可以直接复用哪些必须自己重做一个工训赛电路系统通常包含哪些模块每个模块的选型逻辑和关键参数是什么从需求分解、原理图设计、PCB 布局到软硬件联调完整流程应该怎么走以及最常见的坑在哪里。如果你所在的队伍正处于“能转起来但跑不稳”的阶段或者刚从零开始准备下一届比赛这篇文章值得收藏后按章节实践。2. 开源电路的价值边界它降低了什么成本又没有解决什么2.1 开源电路到底提供了什么开源硬件项目通常包含四类资产原理图、PCB 封装与版图、固件源码、BOM 元器件清单。以常见的开源小车项目为例下载一个仓库你就能看到 STM32 最小系统板的设计文件、TB6612 电机驱动电路、编码器接口电路以及配套的 PID 控制代码。这意味着你不需要从第一颗电阻开始理解电路。一个成熟的电源拓扑、一个经过验证的 H 桥驱动电路直接复用可以省下大量设计迭代时间。对备赛周期紧张的队伍来说这是开源电路最实在的价值。素材来源上国内开发者常用的平台包括立创开源硬件平台、Gitee 上的竞赛开源项目仓库、GitHub 上的开源小车和机器人项目。这些项目的优点是文档完整、社区活跃、相关讨论多缺点是质量参差不齐有的原理图存在错误有的代码只在自己的硬件上能跑。2.2 开源电路没有解决什么开源电路解决的是“已知问题”的重复实现成本但它无法解决三个关键问题第一它无法替代任务分析。不同赛道的比赛任务对车速、精度、续航、场地适应性的要求完全不同。原始开源方案是针对某个特定场景设计的直接照搬意味着把别人的隐含假设也搬了进来。第二它无法替代系统集成。开源模块单独测试都正常连在一起就可能出问题共地干扰、电源跌落、引脚冲突、通信时序不匹配。这些问题只有在集成阶段才会暴露而集成能力恰恰是工训赛考察的核心能力之一。第三它无法替代测试验证。开源的原理图是否在你的器件批次上稳定工作PCB 布局的寄生参数是否可控这些都必须在自己的硬件上验证。只看文档不动手永远发现不了问题。2.3 常见误区误区一最新最贵的硬件就是最好的。工训赛比拼的是系统稳定性不是元器件单价。一个货源充足、例程丰富、团队熟悉的主控芯片远胜一个参数更强但没人会用、例程稀少的芯片。误区二开源代码下载下来就能直接跑。硬件引脚定义、定时器配置、传感器型号都可能不同改代码的时间经常比重新写一份还久。正确做法是把开源代码当作参考实现重点理解控制逻辑然后针对自己的硬件重新适配。误区三原理图复制过来就等于完成了方案设计。真正的设计工作是理解每个模块为什么这样接关键器件参数如何计算以及极端情况下电路会怎样失效。这个理解过程才是比赛评分和答辩时真正的加分项。3. 工训赛电路系统的模块化架构与选型思路3.1 系统框图先行无论赛道类型工训赛的电路系统几乎都可以拆成五个层次能源层、驱动层、控制层、感知层、通信层。能源层负责电池管理和电压变换驱动层负责电机功率放大控制层是主控芯片和最小系统感知层包括编码器、IMU、循迹传感器等通信层负责调试数据回传和遥控指令接收。先画出系统框图再逐个模块深挖这是避免“想到哪做到哪”最有效的方法。框图不需要画得多精美重点是明确每个模块的输入输出、接口电平、供电来源和通信协议。3.2 核心模块与选型参考下面这张表是工训赛小车最常见的模块选型参考。注意具体型号只是参考方向实际选型要结合货源、成本、团队熟悉度和比赛规则确认。模块常用器件关键参数选型要点电源保护自恢复保险丝、TVS、防反接二极管动作电流、钳位电压、压降防止电池接反和浪涌损坏主控DC-DC 降压MP1584、XL4015、TPS5430输入范围、最大输出电流、纹波动力供电与逻辑供电分路处理LDO 稳压AMS1117-3.3、ME6211压差、输出噪声给传感器和 ADC 供电尽量用 LDO主控芯片STM32F103C8T6、ESP32引脚数、定时器资源、Flash选团队熟悉、例程多的型号电机驱动TB6612FNG、BTN7971持续电流、峰值电流、逻辑电平小型直流电机用 TB6612 足够编码器霍尔编码器、AB 相正交输出线数 PPR、供电电压闭环速度控制必备无线通信nRF24L01、ESP-NOW距离、波特率、延迟调试阶段至少保留串口回传3.3 选型的三个原则选型不是看参数表挑最大的那个而是围绕比赛任务做约束匹配。第一个原则是留余量。电机启动电流通常是额定电流的数倍驱动模块的持续电流额定值至少要覆盖电机堵转电流的 1.5 倍以上。电源模块同理峰值输出能力要大于全系统最大瞬时功耗。第二个原则是降低复杂度。能用现成封装和成熟库解决的不自己造轮子。比赛现场没有时间调试复杂的电源管理策略模块越简单出问题的概率越低。第三个原则是考虑供应链。选型前先确认淘宝、立创商城等渠道是否常年有货价格是否稳定。临近比赛才发现芯片停产或涨价是每年都会发生的悲剧。4. 设计工具链与环境准备4.1 EDA 工具原理图和 PCB 设计推荐使用 KiCad 或立创 EDA。KiCad 免费、跨平台、社区资料丰富适合系统学习 PCB 设计立创 EDA 与立创商城元器件库打通选型、画图、下单链路短对国内学生更友好。Altium Designer 功能强大但许可证成本和上手难度都更高除非学校提供授权否则不推荐备赛阶段投入过多时间。版本统一是团队协作的前提。确定工具后整个团队用同一版本避免文件格式无法打开的问题。4.2 主控开发环境以 STM32 为例推荐使用 STM32CubeMX 生成初始化代码配合 Keil MDK 或 STM32CubeIDE 编写业务逻辑。CubeMX 能帮你快速完成时钟配置、引脚复用、定时器 PWM 输出等底层初始化减少手工查寄存器的时间。如果队伍更熟悉 Arduino也可以用 STM32 的 Arduino 支持或直接用 Arduino 板卡参赛。比赛对主控型号通常没有强制限制关键在于能否稳定完成任务。本文示例代码会同时覆盖 Arduino 和 STM32 HAL 两种写法。4.3 硬件调试工具工训赛电路调试最基础的硬件工具是万用表、可调电源、示波器、电烙铁。可调电源建议带电流显示用于观察系统功耗和排查短路示波器至少双通道用于测量 PWM 波形、电源纹波和编码器信号。这些工具不一定都要买学校实验室或向学长借用也是常见做法。另外准备一个 Git 仓库管理代码、原理图和 BOM 版本。备赛过程中方案会频繁修改没有版本管理改到后面连哪个版本能跑都不知道。5. 方案设计核心流程从需求分解到 PCB5.1 第一步需求分解拿到比赛任务后先不要急着画图把任务拆成可量化指标。例如任务要求“小车在 10 米直线赛道内完成搬运”你可以拆出以下指标最大速度、加速度、定位精度、电池容量下可完成的任务次数、单次任务最长工作电流。把这些指标整理成一张需求表作为后续所有设计的输入。需求表里每一项都应该能被测量和验证不能出现“尽量快”“更稳定”这类无法量化的描述。5.2 第二步建立系统框图与接口定义根据需求表确定模块组成然后定义模块之间的接口供电电压、逻辑电平、信号类型、数据协议、引脚分配。这一步最关键的是引脚分配一定会和编码器、传感器、电机驱动全部列在同一张表里避免后期出现引脚冲突。5.3 第三步模块选型与风险确认按前面提到的选型三原则做方案评审。评审时重点确认电机驱动芯片的电流余量、电源芯片的输入电压范围和效率、传感器供电是否需要独立 LDO、主控 Flash 是否放得下控制代码。建议把每个器件的 datasheet 关键页下载下来放在项目仓库的 docs 目录里。5.4 第四步原理图设计原理图设计遵循分层和模块化原则。电源部分单独画一页主控最小系统单独画一页外围接口单独画一页。每个模块旁边写上设计说明标注关键参数的计算过程。这样后期排错和答辩时都能快速定位。这里特别提醒原理图上的每个电源网络都要标明电压值每个信号网络都要标明连接对象。工训赛队伍最容易犯的错误是凭记忆接线不标注网络名和电压导致后面画 PCB 时分不清网络。5.5 第五步PCB 布局与布线PCB 布局的核心原则是功能分区。电源电路放在板子输入侧主控放在中间驱动和电机接口放在输出侧传感器接口靠近机械安装位置。动力电流路径和信号线要分开走线避免大电流环路耦合到传感器的微弱信号上。布线时的几个硬性要求电源线按电流选择线宽一般 1A 对应至少 1mm 宽度驱动电路的功率地和信号地在单点汇合晶振、去耦电容尽量靠近芯片引脚编码器信号线如果较长增加 RC 滤波或使用双绞线。第一次画 PCB 的队伍建议把板子做厚一点铜厚选 2oz能显著降低大电流走线的发热风险。5.6 第六步生产与焊接PCB 打样周期一般 3 到 7 天备赛一定要留足两次改版的时间。焊接到手后先做空板检查用万用表确认电源正负极没有短路再逐模块焊接和测试。不要一口气把所有元件焊完再上电否则出问题很难定位。6. 核心电路模块实战拆解6.1 电机驱动模块以小型直流电机驱动的经典方案 TB6612FNG 为例。TB6612FNG 是东芝推出的 H 桥驱动芯片持续输出电流约 1.2A峰值 3.2A逻辑电压 2.7V 到 5.5V非常适合工训赛常见的 3S 锂电池供电的直流减速电机。引脚接线逻辑不复杂AIN1、AIN2 是电机 A 的方向控制PWMA 是 PWM 调速输入STBY 是待机控制VM 接电池电压VCC 接逻辑电压GND 与主控共地。真正容易出问题的有三个点STBY 引脚没有拉高导致电机完全不转VM 电源端的去耦电容容量不足导致大电流时电压跌落逻辑地和功率地没有处理好导致主控复位。如果电机功率超过 3ATB6612 就不够用了应改用 BTN7971 或采用独立的半桥驱动芯片加 MOS 管的方案。大功率方案的 PCB 布线难度明显上升功率回路需要大面积铺铜和足够的过孔散热。6.2 电源系统设计工训赛小车最典型的供电方案是2S 或 3S 锂电池 → 保险丝和防反接保护 → DC-DC 降压到 5V → LDO 降到 3.3V。这里的关键设计决策是动力和逻辑分路供电。电机启动电流会拉低电池电压如果主控和电机共用同一条降压链路电池电压的波动会直接传导到 5V 和 3.3V 上导致主控复位或传感器读数异常。正确做法是电池出来后先分两路一路给电机驱动一路给逻辑电路。DC-DC 降压芯片的输出电容容量不能只看手册最小值。电机频繁启停时负载变化很快输出电容要按实际纹波要求加大通常建议在芯片手册推荐值的基础上并联一个 100uF 到 470uF 的电解电容。3.3V 供电给 MCU 和传感器时推荐使用 LDO。如果传感器的 ADC 参考电压也来自 3.3VLDO 的输出噪声直接影响测量精度这时还要在 LDO 输出端并联 0.1uF 和 10uF 的电容组合。6.3 编码器接口设计霍尔编码器通常输出 AB 两相正交信号通过脉冲计数计算电机转速。编码器接口电路的设计重点是信号质量和电平匹配。编码器供电最好单独用 LDO避免电机电流波动通过供电影响霍尔元件。信号线上加 100Ω 到 1kΩ 的串联电阻和 10nF 到 100nF 的对地电容可以有效抑制电机产生的 EMI。如果编码器输出是开漏信号还需要加上拉电阻。接线时 AB 两相必须使用支持外部中断的引脚并且两根信号线尽量靠近走线保持相同的长度和阻抗以减少两相信号间的相位误差。编码器线束不要和电机动力线捆在一起这是很多队伍调试时计数漂移的根源。6.4 保护电路设计一个常见的保护配置电源入口串联自恢复保险丝防止短路烧板并联 TVS 管吸收浪涌电源反接保护用 PMOS 管或二极管实现。主控的电源入口再加一个 100uF 电容吸收瞬时压降。保护电路平时看起来“没用”但比赛现场一旦出现接线错误保护电路的冗余设计就是让设备能继续完成下一轮任务的保障。7. 控制代码与闭环逻辑从 PWM 调速到编码器反馈7.1 Arduino 风格电机控制先把最小可控逻辑跑通。下面的代码用三个引脚控制一个电机AIN1、AIN2 决定转向PWM 引脚决定速度。// 文件路径firmware/arduino/motor/motor.ino #define PIN_PWM 9 #define PIN_AIN1 8 #define PIN_AIN2 7 void setup() { pinMode(PIN_PWM, OUTPUT); pinMode(PIN_AIN1, OUTPUT); pinMode(PIN_AIN2, OUTPUT); motor_set(0); } // speed_range-100 ~ 100负数反转 void motor_set(int speed_range) { if (speed_range 100) speed_range 100; if (speed_range -100) speed_range -100; if (speed_range 0) { digitalWrite(PIN_AIN1, LOW); digitalWrite(PIN_AIN2, LOW); analogWrite(PIN_PWM, 0); return; } if (speed_range 0) { digitalWrite(PIN_AIN1, HIGH); digitalWrite(PIN_AIN2, LOW); } else { digitalWrite(PIN_AIN1, LOW); digitalWrite(PIN_AIN2, HIGH); } int pwm map(abs(speed_range), 0, 100, 0, 255); analogWrite(PIN_PWM, pwm); } void loop() { motor_set(50); // 前进50% 占空比 delay(2000); motor_set(-30); // 后退30% 占空比 delay(2000); motor_set(0); // 停止 delay(1000); }这段代码的关键在于转向和调速是分两路控制的方向引脚负责 H 桥的导通组合PWM 引脚负责平均电压。很多新手把方向控制也接在 PWM 引脚上导致电机只能正转不能反转这类问题通过逻辑检查就能排除。7.2 STM32 HAL 风格电机控制STM32 的代码结构分为 CubeMX 初始化和业务逻辑两部分。在 CubeMX 中把定时器通道配置为 PWM 输出周期设为 1kHz 到 20kHz 之间。电机驱动常用的 PWM 频率建议不低于 10kHz低于这个频率会听到明显的啸叫电流纹波也更大。// 文件路径Core/Src/motor.c片段需在 CubeMX 中完成初始化 #include motor.h #include main.h extern TIM_HandleTypeDef htim1; void motor_set_speed(int8_t speed_percent) { if (speed_percent 100) speed_percent 100; if (speed_percent -100) speed_percent -100; if (speed_percent 0) { HAL_GPIO_WritePin(AIN1_GPIO_Port, AIN1_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(AIN2_GPIO_Port, AIN2_Pin, GPIO_PIN_RESET); __HAL_TIM_SET_COMPARE(htim1, TIM_CHANNEL_1, 0); return; } if (speed_percent 0) { HAL_GPIO_WritePin(AIN1_GPIO_Port, AIN1_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(AIN2_GPIO_Port, AIN2_Pin, GPIO_PIN_RESET); } else { HAL_GPIO_WritePin(AIN1_GPIO_Port, AIN1_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(AIN2_GPIO_Port, AIN2_Pin, GPIO_PIN_SET); } // 假定定时器计数周期为 1000 uint32_t pulse (uint32_t)(abs(speed_percent) * 999 / 100); __HAL_TIM_SET_COMPARE(htim1, TIM_CHANNEL_1, pulse); }CubeMX 工程里的引脚定义是自动生成在 main.h 里的AIN1_GPIO_Port、AIN1_Pin 这些宏可以直接使用。需要修改代码时优先在 CubeMX 里改引脚配置并重新生成代码而不是手写覆盖。7.3 编码器读取与 PID 速度闭环开环调速在空载环境下问题不大但小车实际跑起来后电池电压变化、摩擦阻力变化都会导致速度偏离目标值。要稳定完成任务必须引入编码器反馈做闭环控制。下面的代码演示了四倍频编码器读取和增量式 PID 的核心逻辑。编码器 A 相接中断引脚B 相接普通 IO在 A 相上升沿判断 B 相电平就能得到方向和计数。// 文件路径firmware/control/pid_speed.ino片段 #define ENCODER_A_PIN 2 #define ENCODER_B_PIN 3 volatile int32_t encoder_cnt 0; void encoder_isr_a() { if (digitalRead(ENCODER_B_PIN) HIGH) { encoder_cnt; } else { encoder_cnt--; } } float speed_pid(float target_rpm, float current_rpm, float dt) { static float integral 0.0f; static float last_err 0.0f; float err target_rpm - current_rpm; integral err * dt; integral constrain(integral, -150.0f, 150.0f); float derivative (err - last_err) / dt; last_err err; return Kp * err Ki * integral Kd * derivative; }PID 调试的顺序是先调 Kp再调 Ki最后调 Kd。Kp 太小反应慢太大容易震荡Ki 负责消除稳态误差但过大积分会饱和导致超调Kd 能抑制震荡但对噪声敏感编码器信号质量不好时反而会放大抖动。每次只改一个参数记录下波形和现象再调下一个这是最稳的调参节奏。8. 运行结果与效果验证方法8.1 上电前检查清单给新板子上电前花五分钟做一次静态检查能避免烧板用万用表二极管档测量电源正负极确认没有短路检查电源芯片输入输出电压方向电解电容极性是否接反核对电机驱动逻辑脚与主控引脚连接确认没有和电源网络短路确认 BOOT0 跳线状态避免 STM32 无法进入运行模式第一次上电使用限流电源电流限制设为目标工作电流的一半。8.2 分步上电验证第一步只接主控供电观察电源指示灯和电流。3.3V 输出正常、电流在几十毫安级别说明逻辑供电没问题。第二步接上电机驱动芯片的 VM 供电但不接电机。用万用表测量驱动输出端确认无异常压降。第三步接电机发送一个很小的速度指令比如 10% 占空比观察电机是否平滑转动、方向是否正确、电流是否符合预期。此时如果电机抖动或发烫先检查 PWM 频率和 STBY 引脚。第四步接编码器手动转动电机在串口监视器观察计数是否随方向正确增减。8.3 闭环效果的判断标准PID 闭环调通后可以通过串口打印目标转速和当前转速。每次速度指令改变后实际转速应该在几百毫秒内跟上稳态误差在 5% 以内不出现持续震荡。给车加上模拟负载比如放一块配重转速应该仍能回到目标值附近这就是闭环相对开环最直观的优势。如果效果不达标用示波器看 PWM 波形和编码器信号PWM 占空比是否按预期变化编码器信号是否有毛刺。毛刺通常来自共地干扰或线束过长优先从物理布线层面解决而不是靠软件滤波掩盖。9. 常见问题与排查思路问题现象可能原因排查方式解决方案上电后主控反复复位电源跌落或纹波过大示波器观察 3.3V 波形增大输入电容动力与逻辑独立供电电机抖动但不转STBY 未拉高、PWM 频率过低测 STBY 电平监听 PWM 波形拉高 STBYPWM 频率提到 10kHz 以上编码器计数漂移共地干扰、线序接反、线束与动力线同管检查接线和中断引脚信号单独供电、加滤波电容、物理分离线束程序下载失败BOOT0 配置错误、串口接线异常、供电不足检查 BOOT0 电平、CH340 驱动确认 BOOT0 跳线使用独立串口模块供电传感器 ADC 读数跳动模拟电源噪声大、参考电压不稳示波器测 VREF 和供电波形改用 LDO 供电加 0.1uF 与 10uF 去耦电池很快耗尽驱动待机电流大、DC-DC 效率低万用表测整机静态电流增加总电源开关休眠时切断动力电源某一路电机比另一路慢电机个体差异、两侧 PWM 引脚频率不同交换电机与控制通道对比测试统一 PWM 频率做两轮速度标定排查问题的原则是从电源到信号、从硬件到软件、从单模块到联调。不要一上来就怀疑代码先确保电源引脚电压正确再检查信号波形最后才看软件逻辑。10. 最佳实践与工程建议10.1 文档先行接口统一备赛团队至少保留三份文档需求表、系统框图、引脚分配表。每次方案修改同步更新文档否则两周后没人记得为什么这样接线。接口统一规范要提前定比如所有传感器供电统一走 3.3V、所有信号线用同一颜色、所有接插件型号一致。10.2 模块化设计板级隔离尽量把电源板、主控板、驱动板分开或者至少在原理图上严格分区。模块化最大的好处是故障隔离电机驱动烧了只换驱动板不需要重焊整块主板。机械结构改动时模块化电路也能更快适配。10.3 版本管理与备份PCB 工程和固件代码从第一天就纳入 Git 管理。每次改版标记一个版本号比如 v1.0、v1.1、v2.0。打样和生产记录也同步保存这样能追溯哪一版硬件配哪一版固件是正常的。比赛前一晚改坏代码是常见事故有版本管理就能快速回滚。10.4 预留调试接口电路板上至少保留一个串口调试口和两个备用 GPIO。串口用于打印运行状态备用 GPIO 用于排查时临时接逻辑分析仪或应急控制。比赛现场不能重新编译烧录时这些预留接口能救命。10.5 元器件备货与复用每个关键模块至少备两份库存驱动芯片、主控芯片、编码器、线材、接插件都要有冗余。比赛前两周停止更换器件型号所有硬件冻结。备赛后期任何器件变更都可能引入新问题这个阶段的目标是消除变量而不是引入变量。10.6 安全操作提醒调试锂电池供电系统时注意电池充电和放电安全不要对鼓包的锂电池继续充电。焊接时注意通风避免吸入助焊剂烟雾。给系统上电前先目视检查有无明显短路。涉及高电压或大电流的调试尽量使用隔离电源并在指导下进行。11. 总结与后续学习方向工训赛的电路方案设计本质上是一套把比赛任务转成工程指标的完整方法。开源电路提供了可靠的起点但它只是输入真正的价值在于你对需求的理解、对模块选型的判断、对电源和信号完整性的把握以及软硬件联调的工程能力。这篇文章讲清楚了模块化架构、选型原则、核心模块设计、控制代码示例和排查清单下一步可以按三个方向继续深入。第一系统学习 PCB 设计。试着从零画一块最小系统板包括 STM32 主控、电源、调试接口然后打样焊接跑通。这个过程能让你真正理解开源原理图里每一个电容和电阻的作用。第二吃透关键器件的 datasheet。电机驱动芯片、电源芯片、编码器的 datasheet 是电路设计的第一手资料比任何教程都准确。学会快速找到需要的参数是硬件工程师的基本功。第三建立自己团队的模块库和代码库。把每一次比赛验证过的电路模块、控制代码、调参记录沉淀下来。这些资产比比赛名次更值钱因为它们是可复用的工程经验。最后留一个提醒方案设计的核心不是“用什么器件”而是“为什么在这个约束条件下选这个方案”。带着这个思路去读开源项目你会越读越清楚带着这个思路去答辩评委也能明显感受到你的工程素养。
返回列表