尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

单片机选型:开发适配、应用验证与量产配套的优先级

单片机选型:开发适配、应用验证与量产配套的优先级 上周一个做智能门锁的朋友把BOM表发过来问我这颗32位单片机到底能不能用。我打开一看主控确实便宜Flash和RAM够用外设数量看着也齐全。但往下翻两页我就停住了工具链只有厂商自己维护的那一套社区里几乎找不到讨论封装是QFN32、0.5mm间距产线得重新做工装最要命的是这颗料的供货全靠现货商撑着。我回了他一句话——参数表上过不去的关通常都不是真正的关真正的关都在参数表外面。这篇东西聊的就是参数表外面的那些事。单片机、选型、开发适配、应用验证、量产配套这几个词很多人的处理顺序是反的先看价格和参数再看买不买得到最后才想开发好不好做。我这些年踩过的坑告诉我顺序应该整个倒过来。开发适配决定你能不能按时把东西做出来应用验证决定客户会不会退货量产配套决定这个项目能活多久价格只是这三样都过关之后才轮得到聊的加分项。下面按这三个维度拆开讲中间会穿插一些可以直接抄的做法以及我自己翻过的几次车。1. 先弄清这颗芯片要陪你走多久1.1 参数表的前三行藏着最贵的坑工程师看选型手册眼睛第一反应是往下找主频、Flash、RAM、外设数量这三行确实最直观也最容易让人产生这颗料够了的错觉。但这个够了是有前提的前提是你默认它一直买得到、开发环境一直能用、全温区性能一直和常温一致。这三个默认任何一个不成立前面省下来的成本都会在后面几倍还回去。我习惯看参数表的第一眼不是看主频而是看三样东西工作温度范围、封装与引脚间距、工具链支持情况。温度范围直接决定你能接什么单消费级0到70度看着能用一旦客户的设备装在户外配电箱或者车间的机柜里夏天箱内温度轻松超过60度出了问题是批量性的不是一台两台。封装和引脚间距决定量产成本同样是48脚LQFP0.8mm间距和QFN0.5mm间距在产线上的良率、返修难度、钢网厚度要求完全不是一个量级。工具链决定研发周期一颗没人讨论的芯片你遇到问题只能在厂商FAE的工作时间里等回复而一颗资料铺天盖地的芯片你半夜两点都能翻到别人踩过的坑。1.2 不同量级的项目选型逻辑根本不一样我见过最多的错误是拿毕设的思路去做量产项目或者拿量产项目的谨慎去卡一个只做十台的样机。这两种都会出问题。不同量级项目的选型优先级差别很大我大致分成三类项目量级最优先考虑可以妥协典型场景单件样机/毕设资料丰富度、评估板好买价格、封装、供货课程设计、功能验证小批量百到千台工具链闭环、烧录效率长期生命周期定制控制器、小家电长周期产品五年以上生命周期、二供、温度等级单价略高工业设备、仪表做课程设计或者功能验证你完全可以挑那种评估板九块九、例程一抓一大把的型号别人的代码直接拿来改两三天就能跑通。这时候纠结供货纯属浪费时间你一辈子也用不了一千片。反过来一个要卖五年、每年出货三万台的产品如果主控只有一家现货商在供你就是在给自己埋雷而省下来的那几毛钱抵不上一次断供带来的停线损失。还有一类容易被忽略的情况项目一开始说只做两百台做着做着客户加了三个机型年用量从两百涨到八万。这种故事我遇到过两次。所以我现在的习惯是只要客户提到后续可能有量我就直接按小批量往上的标准去选宁可单价高一点也要保证封装好焊、烧录好做、供货有至少一条正规渠道。2. 开发适配能不能在两周内把它点着2.1 工具链是不是闭环看编译、下载、调试三件套开发适配这件事最实际的衡量标准是一个熟悉这个系列的工程师拿到一块空板多久能让它跑起来并且能单步调试。这里面有三个环节必须闭环缺一个都会拖慢整个项目。编译环节看编译器支持。有些型号官方只给自家IDEKeil或者IAR要另外买License团队里五个人的话就是一笔不小的开销而且换人要重新熟悉界面。能在GCC或者通用工具链上跑起来的型号长期维护成本低很多。这里有个细节值得注意有些芯片号称支持通用工具链但链接脚本、启动文件、烧录算法都要自己写实际工作量比用官方IDE大得多选之前一定去翻一眼官方的SDK目录看看启动文件和链接脚本是不是现成的。下载环节看烧写方式。串口ISP是最省事的一根USB转TTL就能下载适合研发阶段反复改代码。SWD或者JTAG下载速度快还能配合调试器做在线仿真。我一般会确认这颗料支持至少两种烧写方式一种用于研发一种用于产线这样不会因为仿真器坏了整个项目卡住。调试环节看断点数量、变量观察能力、是否支持实时变量刷新。这个在纯逻辑调试阶段特别重要尤其是做通讯协议解析的时候不能实时看变量就只能靠串口打印效率差好几倍。另外要确认调试器和芯片的兼容性有些第三方调试器对特定型号的固件版本有要求升级之后反而连不上这种事我遇到过一次折腾了整整一个下午才发现是调试器固件版本的问题。2.2 库和手册的质量比主频重要得多主频高不高只影响你能不能跑复杂算法库和手册的质量影响的是你每天的工作效率。判断一个系列的文档质量我有个很土但很准的办法直接去翻它的参考手册里定时器和串口这两章看寄存器的位定义是不是每一bit都写了看时序图有没有标清建立时间和保持时间看有没有完整的寄存器操作示例。如果这两章写得很含糊后面用到ADC、DMA、通讯接口的时候只会更痛苦。有些厂商的手册是翻译过来的术语前后不统一同一个位在不同章节叫法不一样这种文档会让你在调试的时候反复怀疑自己。相比之下那种每个外设都配有可直接编译的例程、并且例程里注释写得清清楚楚的系列上手速度完全不是一个档次的。还有一个很现实的点中文资料的存量。这不是崇洋媚外的问题是效率问题。当你遇到一个诡异的复位问题夜深人静的时候你能搜到一个中文帖子说这个型号在XX条件下会误触发BOR需要改这个位和你只能对着英文勘误表一行行啃差的是好几个小时。勘误表这个事我要单独提一句很多型号的手册后面都有一份Errata里面列的是已知的硬件缺陷和规避方法。新手基本不看这个而老手是拿到料第一件事就翻它。我现在的习惯是选型阶段就把Errata拉出来看一遍如果某个外设的缺陷刚好落在我需要的功能上这颗料直接排除。2.3 引脚和封装的账要算到产线和返修上引脚这件事研发阶段和量产阶段的关注点完全不一样。研发阶段你关心的是我需要的功能引脚够不够、能不能布通量产阶段你关心的是焊接良率、测试点、返修难度。先说研发阶段最容易翻车的几个点。第一是启动模式引脚很多芯片靠某个引脚的上下拉状态决定从Flash启动还是从系统存储器启动这个引脚如果被你的外设占用了量产时会非常麻烦。第二是复位引脚和调试引脚这两个脚在PCB上最好引出测试点别为了省两个焊盘把它们藏起来。第三是ADC通道的分配你要注意哪些通道和调试引脚复用哪些通道在特定封装里根本不存在我见过有人在原理图上画了8路ADC结果选的那个封装只有5路引出。封装的选择直接关系到成本。QFN封装体积小、散热好但引脚在底部肉眼看不见焊接质量返修要靠热风枪小心操作一旦有虚焊就是批量性的隐患。LQFP引脚外露肉眼和放大镜都能查返修也容易。如果项目对体积不是特别敏感我一律建议优先选引脚外露的封装。还有一点很多人会忽略封装的散热焊盘要不要接地、用几个过孔、钢网怎么开这些是要和板厂、贴片厂一起确认的选型阶段就该问清楚别等投板了才发现这颗料的散热焊盘尺寸和你库里的封装库对不上。2.4 外设盘点把功能需求翻译成通道清单外设盘点是选型里最像做数学题的部分也是最容易低估的部分。很多人是按我需要串口、需要PWM、需要ADC这样感性判断的正确做法是把功能需求列成一张通道清单逐条对齐。我一般会做一个这样的对照表功能需求需要的资源容易忽略的附加条件一块串口屏1路UART是否需要DMA搬运屏的波特率是否高4路继电器4个GPIO驱动电流是否够要不要外置驱动电机调速1到2路PWM定时器是否独立会不会和系统时基冲突温度采集1路ADCADC位数、参考源噪声、通道是否复用外部存储1路SPI片选数量、DMA通道做完这张表你再去数芯片的定时器数量、串口数量、DMA通道数。这里有个关键认知外设资源不是有多少用多少而是要留余量。定时器至少要留一个做系统时基串口至少要留一路做调试和升级GPIO要留几个做后续功能扩展。如果盘点下来发现资源刚好够用、一点余量都没有这个方案在需求变更的时候会非常被动。我自己的经验值是关键外设的使用率控制在七成左右比较舒服超过八成就要认真考虑换更大的型号了。3. 应用验证能点灯和能上现场之间隔着什么3.1 时钟和波特率误差内部RC最容易阴人的地方内部RC振荡器是很多低端型号的默认时钟源因为它省掉了外部晶振和两个负载电容省成本又省板面。问题是它的精度是分档次的手册上写的±1%通常是常温典型值全温区、全电压范围下可能漂到±3%甚至更多。这个数字在跑普通逻辑的时候完全看不出来一旦用在异步串口通讯上就会出问题。异步串口没有时钟线收发双方各自靠自己的时钟计时。接收端检测到起始位下降沿之后开始计数在每个数据位的中间位置采样。两边时钟误差会累积到最后一个数据位的时候误差最大。行业里比较通用的经验是两边累计误差控制在2%以内比较稳超过3%就可能在某一帧上采错位。算一笔账如果你用内部RC跑115200波特率收发双方都是±2%的器件最坏情况累计4%那这个通讯就是时好时坏的冬天能用夏天不能用实验室能用车间不能用。所以我的习惯很明确凡是涉及异步串口、长时计时、需要时间戳精度的场合一律外挂晶振不省这两个器件。如果非要用内部RC那就在高低温环境下实测误码率别拿常温下的半小时测试结果当结论。测试方法也简单让设备连续发送固定长度的数据包接收端统计校验错误的数量跑够几万帧再看结果几千帧的样本量根本说明不了问题。3.2 复位和电源三个阻容决定返修率复位电路看起来是最简单的一坨电路实际上它决定了你的产品在现场是不是会莫名其妙重启。上电复位的时间常数要匹配芯片的复位要求典型的RC组合比如10k加100nF时间常数1毫秒左右实际复位电平要维持到电源稳定之后才能释放所以真正需要的时间往往是时间常数的几倍。如果电容给小了电源还没稳复位就释放了芯片可能跑飞电容给大了复位释放太慢某些对启动时间有要求的场合又不合适。欠压复位这个功能要重点确认。它保证电源跌到某个阈值以下时芯片被强制复位而不是在半死不活的状态下执行指令。很多异常重启、数据错乱的问题根子都在电源瞬跌而BOR阈值设得太低。选型的时候要看这颗料的BOR有几个档位、能不能软件配置、默认档位是多少然后结合你的电源情况去定。电源部分的经验就两条。第一每个电源引脚旁边就近放0.1微法去耦电容距离控制在几毫米以内放远了等于没放。第二如果板上有ADC采集模拟量模拟电源和数字电源之间要用磁珠或者电感分开地也要分开走再单点汇合。我遇到过采集值跳动的案例最后查出来是两个地混在一起走数字部分的开关噪声串进了参考电压。这种事用示波器看电源纹波能看出来但前提是你得想到去看。3.3 干扰测试怎么做出有说服力的结论抗干扰这件事最怕的就是感觉没问题。实验室里干干净净板子跑一个星期都正常一到现场就各种复位、通讯中断。要做出有说服力的结论测试条件必须尽量贴近真实工况。我会在样机阶段做三件事。第一件事是把现场最大的干扰源搬过来通常是电机、继电器、大功率开关电源让它们在同一个插座上反复启停同时监控主控的复位引脚和电源电压用示波器抓瞬态。第二件事是让设备在极限温度下运行有条件的用高低温箱做循环没条件的至少要在夏天最热的房间和冬天室外各跑一轮。第三件事是长时间连续运行我自己的门槛是七十二小时不间断跑的过程中要记录运行日志、复位次数、通讯错误次数。针对干扰源的处理手段是标准套路继电器和电机线圈两端加续流二极管或者RC吸收通讯线加TVS管做浪涌防护长距离信号用光耦或者隔离器件断开地环路MOS管的栅极串联电阻控制开关速度。这些外围器件的选型其实和单片机选型是绑在一起的因为你的GPIO驱动能力、PWM输出能力决定了能带什么驱动这一点在做整体方案的时候就要一起定别等到调试阶段才发现推不动。3.4 长周期压测和异常自恢复产品卖出去之后你不可能派人去客户现场按复位键。所以异常自恢复的设计必须在验证阶段就做完而不是留到售后。我自己总结的思路是任何可能卡死的环节都要有一个能把它救回来的机制。独立看门狗是最基础的保障喂狗的位置要小心不能放在主循环的开头否则某个子任务卡死而主循环还在跑看门狗就形同虚设。更稳妥的做法是在几个关键任务里各放一个标志主循环统一检查所有标志都到了才喂狗。窗口看门狗能进一步限制喂狗的时间窗口防止程序跑飞之后瞎喂狗。除了看门狗还要考虑数据保护。掉电的时候如果正在写存储数据可能只写了一半。解决办法是双区备份加校验A区写完写B区读取时对比校验和哪个合法用哪个。对于频繁更新的计数值不要直接往Flash里写Flash的擦写寿命通常只有十万次量级按每天写一百次算三年就把一个扇区写穿了。正确的做法是放在EEPROM里或者用多页轮换归并的方式分摊写入次数这个小技巧能显著延长器件寿命。4. 量产配套从第一台样机到一万台的落差4.1 供货和生命周期怎么问才问得出真话供货这件事问法很有讲究。直接问这颗料好不好买得到的答案永远是好买。我一般会拆成几个具体问题去问代理或者原厂这颗料目前是量产状态还是已经不推荐用于新设计最近一年的交期波动范围是多少最小起订量多少封装的供货是否和某个特定批次绑定有没有管脚兼容的替代型号。这几个问题问下来对方的回答里会露出很多信息。如果一颗料已经进入不推荐阶段原厂通常会给一个替代型号这时候你要做的不是立刻换而是评估替代型号的差异有多大改板成本多少库存能撑多久。如果交期波动范围很大说明产能不稳定那就要在备料上多留一两个月的量。还有一个很多人不做的动作看代理的层级。从原厂到一级代理再到你中间层的数量直接影响价格和响应速度。我遇到过通过三层贸易商拿货的情况价格比一级代理贵两成出了问题还找不到人。只要项目有量一定要争取和一级代理建立直接联系这件事的价值会在缺货的时候体现出来。4.2 产线烧录治具、序列号和加密研发阶段用一根下载线插一块板子没问题量产的场景完全不一样。一天的产能假设是一千五百片单板烧录二十秒一个工位一小时只能做一百八十片八个工位并联才能到一千四百片左右刚好卡在产能线上。所以烧录环节的效率是算出来的不是估出来的。提升效率靠三样东西。第一是离线编程器的一拖多方案一个主机带八个甚至十六个座子先把芯片烧好再上贴片机这种方式对贴片厂友好也方便管理。第二是在线烧录治具用探针床把调试口、串口、电源和地引出来人工放板压合就能烧这种方式适合已经贴好片的板子还能顺便做功能自检。第三是烧录文件的保护很多离线编程器支持加密文件防止程序被抄走如果产品值钱这一步别省。序列号写入是个容易被忽略的细节。如果产品需要联网、需要区分身份那每台设备出厂前必须写入唯一的序列号或者密钥。写入方式有两种一种是在烧录环节由编程器按文件里的序列号列表依次写入另一种是程序首次运行时从芯片的唯一ID派生出序列号。前者需要管理序列号列表文件后者简单但要注意唯一ID的读取方式在不同批次是否一致。治具的测试点要在画板的时候预留好我一般会留这几个电源、地、复位、调试时钟、调试数据、串口收发。探针的间距别太小1.27mm以上比较好做太小了探针容易歪压合几次就接触不良。4.3 串口升级架构51和32位机的两套思路产品装到现场之后还能升级固件这个能力的价值非常高能省掉大量的上门成本。基于串口的升级架构是我最推荐的方案它对硬件几乎没要求一根串口线或者一个无线模块就能传。整体思路是Flash分三块Boot区、App区、备份区。Boot区永远不擦除负责通讯和搬运App区放正式程序备份区放新固件。升级流程是设备收到升级命令后复位进BootBoot接收新固件写入备份区并逐帧校验全部收完再擦除App区、把备份区拷过去最后跳转执行。逐帧校验的做法是每帧带长度和CRC接收端算完对上才回ACK对不上回NAK让上位机重传。断电续传靠的是把当前进度写在固定的存储位置重新上电后从断点继续这个细节能救回很多现场升级失败的案例。32位机做这套相对舒服因为中断向量表可以重定位Boot和App可以各自有独立的中断服务程序。51单片机就麻烦一些中断向量地址是固定的没法重定位。常见的处理办法是让Boot里不放任何中断服务程序跳转前关掉所有中断、复位外设、设置好栈指针跳过去之后由App重新初始化中断。另一个坑是擦写Flash的时候程序没法从同一块Flash取指令需要在RAM里跑擦写程序或者利用芯片自带的IAP功能把擦写操作交给硬件去完成。51单片机用IAP功能做升级是很成熟的方案芯片内部有专门的寄存器组控制读写和擦除擦除粒度通常是几百字节一个扇区操作的时候注意看门狗要喂因为擦除一个扇区的时间可能超过看门狗的溢出周期。4.4 二供不是备胎要跟主料一起设计二供这个词很多团队是缺货了才想起来。等到缺货的时候你只有两三个月的时间去验证一颗新料还要改板、改程序、重新做认证时间根本不够。正确的做法是在选主料的时候就把二供方案一起定下来甚至让两颗料共用一套硬件设计。二供设计有几个层次。最理想的是管脚完全兼容、寄存器基本兼容程序改几行宏定义就能切换这种方案主要是核对封装尺寸、引脚定义、外设映射有没有细微差异改板成本接近零。次一档是外设功能对得上但管脚不兼容需要做一个兼容两种布局的PCB通过跳线或者不同版本的贴片方案切换。最差的情况是内核都不一样程序全部重写这种就不叫二供了叫备选方案。不管哪个层次二供都必须经过完整的应用验证尤其要跑一遍你产品里最关键的功能和最容易出问题的场景。我见过有人换了二供之后没测低功耗模式结果量产才发现待机电流高了一倍整批货返工。二供的验证标准和主料第一次选型时的验证标准应该完全一样不能因为它是备胎就降低要求。5. 一张打分表和两次真实复盘5.1 权重怎么分配说了这么多维度落到实际决策上还是得有个取舍的办法。我自己的做法是做一张加权打分表把各个维度按项目的实际情况给权重然后逐个打分。表里的分值是我用了几年之后固定下来的你可以根据自己的行业调整评估维度权重参考打分要点开发适配25工具链是否闭环、资料是否充足应用验证25温区、抗干扰、长跑稳定性量产配套25供货、烧录效率、二供可能性成本15量价曲线、外围器件总成本扩展性10资源余量、后续机型复用空间权重定好之后每一项按一到五分打加权求和。这个表最大的价值不是算出那个分数而是逼着团队在选型阶段把每个维度都过一遍。很多时候争论的焦点是这颗便宜两毛钱把表填完你会发现两颗料的综合得分差得很远价格那点差异根本不值得讨论。5.2 复盘一小家电项目便宜的那颗差点毁掉整个交付有个小家电的项目主控有两颗候选一颗便宜将近三成参数也够用。当时团队倾向选便宜的。我坚持做了两件事一是把烧录效率算了一遍结果发现便宜那颗的烧录工具单次时间长、工位数量少按订单量算下来整批烧录要多花两天二是把内部RC的精度在高低温下测了一遍发现低温下漂移超过预期而产品要用串口和面板通讯。最后选了贵的那颗。事后看这个决定是对的量产阶段没出过通讯异常。但即便选对了我还是被另一件事教育了那颗料的封装是QFN产线头一批货的虚焊率比预期高返修了几十台。后来调整了钢网厚度和回流曲线才稳定下来。这件事让我在后面的项目里只要体积允许就不选QFN省下来的那点板面不值得冒良率的风险。5.3 复盘二工业控制器二供救了一次急另一个项目是工业现场的控制器主料是某款32位芯片。选型的时候我特意查了有没有管脚兼容的型号找到了一个外设映射基本一致的方案做了一版能兼容两种料的PCB。当时团队还觉得这是多此一举。结果第二年主料交期从四周拉长到二十周客户那边催得紧。因为PCB是兼容设计我们直接切了二供程序改了不到十行宏定义重新跑了一遍七十二小时压测和几项关键功能验证两周之内就恢复了出货。整个过程唯一的代价是二供的单价高了不到两块。如果没有提前准备这个项目当时基本就是停摆状态。所以我现在把二供设计当成选型流程里的必选项而不是可选项。6. 几个容易被忽略的细节和我自己的习惯第一个习惯任何新料第一次上板我都会先做一个最小系统板把所有电源引脚、复位、晶振、调试口单独引出来先把它跑通再往正式板上搬。这个过程看着麻烦实际上能省掉大量的排查时间因为正式板上变量太多出了问题你没法判断是芯片的事还是你电路的事。第二个习惯选型阶段就把外围器件的清单一起过一遍。单片机的工作电压决定LDO选型GPIO驱动能力决定继电器是直驱还是加驱动芯片PWM输出能力决定电机驱动方案通讯速率决定要不要加隔离工作环境决定TVS和滤波电容的规格。这些东西如果分开选很容易出现主控定完了发现某个外围器件拖后腿的情况。我一般的做法是主控定下来的当天就把这份外围清单同步给硬件同事一起过一遍。第三个习惯样品阶段一定做够数量。三台样机里没问题的方案三十台里往往能暴露出问题比如某个批次的芯片偏移电压不同、某批电容的实际容值偏低。我现在的做法是关键项目第一批至少做二十台其中十台拿去做高低温循环十台拿去做长跑。这个投入和量产后返工的成本比起来完全不值一提。第四个习惯把所有测试数据和结论存档。每一颗料在不同项目里的表现、遇到的问题、当时的解决方案都记在一个共享文档里。下次遇到相似需求直接翻档案比重新走一遍流程快得多也能避免在同一个坑里摔两次。这份档案攒上两年之后就是团队最值钱的东西。
返回列表