尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
DRV8818与dsPIC30F3014的步进电机控制方案设计与实践
1. 方案选型为什么我最终用了 DRV8818PWPR 配 dsPIC30F30141.1 做步进控制其实是在解一道分工题做工业设备和机器人关节控制几年后你会发现步进电机方案从来不是选个电机、插块驱动板、能转就行那么简单。去年我调一套桌面六轴机械臂的关节模组目标是每个轴用双极步进电机控制器要兼顾成本、实时性和现场抗干扰能力最后定下来的方案就是 DRV8818PWPR 加载 dsPIC30F3014。整套从画板到调通大约三周中间踩了不少坑这篇文章就把我实际验证过的硬件参数、固件思路和排查记录完整写出来给正在做同类项目的朋友一个可复现的参考。先说说为什么选这对组合。dsPIC30F3014 是 Microchip 的 16 位 DSC指令周期最高 40MHz片上带着 24KB Flash、2KB RAM还有电机控制专用的 PWM 模块、多路 10 位 ADC 和 UART/SPI/I2C。单看资源2KB RAM 在现代嵌入式里寒酸得有点搞笑但跑步进控制反而绰绰有余——因为我根本不需要在中断里做重型算法步进控制最核心的实时任务只是按当前速度产生脉冲而这活儿完全可以交给外设硬件完成CPU 只负责算速度、改寄存器。选型时不是没考虑过 STM3232 位芯片做这个当然更轻松问题出在两件事上一个是交期和供货某些主流 32 位芯片在当时动不动交期二十周量产项目根本等不起另一个是外设结构dsPIC30F 的 PWM/输出比较模块做步进脉冲发生器非常顺手而且它的 I/O 有较强的抗干扰设计在电机驱动器旁边这种电磁环境里比预想中稳。我知道很多人觉得 8 位单片机也能发脉冲但到了 1/16 微步、每秒几万步、还要同时处理多轴插补的场景8 位机的定时器分频和中断开销就很吃力了。dsPIC30F3014 属于刚好够用又不过剩的定位。1.2 DRV8818PWPR 把最脏最累的活全包了驱动侧选 DRV8818PWPR 的原因更直白。它是 TI 的双 H 桥步进驱动芯片支持 8V 到 45V 的电机电源单桥峰值电流能到 2.5A内部集成了 PWM 恒流斩波、微步进索引器和一堆保护功能。对我来说最有价值的不是那个 H 桥本身而是它内置的微步进索引器——也就是说 MCU 完全不需要知道微步进电流表现在走到哪一相、该用多大的 sin/cos 系数它只需要在 STEP 引脚上送一个脉冲芯片内部会自动把线圈电流按微步进表切换过去。这种分工在工业现场意义很大。只要驱动器把电流环、换相逻辑和微步进表都吃掉MCU 的实时任务就被压到极简一个 DIG 方向的 GPIO一个输出比较模块给 STEP 脉冲剩下的 CPU 时间全部留给运动规划、通信和逻辑控制。DRV8818 还支持 STEP/DIR 和 PHASE/ENABLE 两种接口模式通过 PHEN 引脚选择机器人控制我建议一律用 STEP/DIR逻辑清晰、可读性好后续换驱动芯片也不需要大改固件。另外 DRV8818 的电流调节是硬件自动完成的通过 VREF 引脚设定电流阈值采样电阻反馈回来做恒流斩波。这对纯 MCU 方案来说非常省事——要是靠 MCU 做电流环PWM 频率、ADC 采样时刻、换相抖动都会带来一堆破事。硬件恒流说白了就是模拟电路替我打工我只负责把参考电压和采样电阻算对。2. 硬件电路设计把 DRV8818PWPR 接稳后面能少哭三个月2.1 电源、去耦和采样电阻一个都不能省我调试这类驱动板有个习惯先看电源再看信号最后看地。DRV8818 的 VM 脚接电机电源我用的是 24V 工业稳压源。芯片规格书写的 VM 范围很宽但实际项目里电源质量往往比电压值更致命。VM 引脚旁边必须有一颗容量足够的电解电容和一颗高频陶瓷电容我的做法是 47µF 电解加 0.1µF X7R 陶瓷紧贴引脚这个组合扛住了 1.5A 电流阶跃示波器上电源跌落控制在几百毫伏以内。如果省掉这颗大电容每次斩波换相都会在母线上拉出尖峰轻则电流波形畸形重则把 MCU 甚至驱动芯片自己干扰复位。DRV8818 有一个内部稳压出来的 VREG 引脚给芯片内部逻辑供电。这个引脚的滤波电容别省我按手册要求放了 1µF 陶瓷位置就在引脚旁边。曾经有一版板子为了省空间把电容放远了 2cm结果驱动器在负载切换时偶尔出现逻辑错乱电机原地抽搐一下又恢复正常排查了整整一天才定位到是 VREG 电容距离问题凡是芯片内部的模拟/逻辑供电引脚电容距离就是生命线。采样电阻的选型更要较真。DRV8818 两个 H 桥各有一组采样电阻电流调节阈值 ITRIP 与 VREF 电压、采样电阻和芯片内部增益有关系我用的公式是 ITRIP VREF / (8 × Rsense)——注意这个 8 是芯片内部增益系数不同批次的手册可能存在差异设计前一定要拿你手上的数据手册核对别抄网上老版本公式就完了。以我目标电流 1.2A 为例选 Rsense0.22Ω反推 VREF1.2×8×0.22≈2.11V。用 3.3V 基准做分压R15.6kΩ 串联到 3.3VR210kΩ 到地分压值约 2.11V正好落在目标上。采样电阻的功率很多人会算错我自己就翻过车。1.2A 流过 0.22Ω 电阻发热功率 PI²R≈0.32W看起来 0.5W 电阻够用但机器人关节里电机经常长时间堵转或重载电流波形是斩波后的方波而非纯正弦等效发热比想象中高。我最后选了 1W 规格而且特意选低电感型号金属膜或合金电阻都行千万别用绕线电感型的。如果你把电流往上调到 2A采样电阻功率到了 0.88W稳妥做法是两颗 0.47Ω 并联既降单颗功耗又减少电感。2.2 控制接口怎么接从信号引脚到逻辑电平控制链路其实非常短dsPIC30F3014 输出一个 STEP 脉冲和一个 DIR 电平再加上使能、复位、睡眠几个控制脚。DRV8818 的 PHEN 引脚选择接口模式我拉低选 STEP/DIR。STEP 信号接在 MCU 的一个输出比较引脚上DIR 接普通 GPIOUSEL0/1/2 三个引脚用来选择微步进档位。微步进档位的连接方式我建议做成板上可选而不是固件强制。USEL 引脚直接配三组电阻位上拉到 3.3V 或下拉到地现场调试时用跳线或 0 欧电阻切换。整步、1/4、1/8、1/16、1/32 这几档组合在手册里都有对应表具体解码值我不在这里背了因为不同批次手册表格可能画得不一样上电前花两分钟翻一遍比什么都靠谱。实际项目中我用 1/16 做默认噪声和分辨率的平衡点最好。1/32 确实更细腻但高速时对 STEP 脉冲频率要求翻倍CPU 和外设压力跟着上来收益却没那么明显。nFAULT 是开漏输出必须接上拉电阻到 MCU 侧逻辑电源。我用 10kΩ 上拉到 3.3V同时把 nFAULT 引到 MCU 的外部中断引脚。这是全板最值得接的一条信号线——驱动芯片过热、过流、欠压都会拉低 nFAULT固件里做成紧急停机中断比轮询快得多。我在这套板子上就是靠这个中断避免了一次因散热不良导致的绕组烧毁。逻辑电平呢DRV8818 的逻辑输入不一定是纯 5V 兼容我的 dsPIC30F3014 工作在 3.3VSTEP/DIR/USEL 这些信号全部 3.3V 直连没问题。如果你手头的 MCU 是 5V 逻辑最好串个电阻或做电平转换别指望芯片内部钳位来保平安。还有一个细节STEP 脉冲宽度必须满足手册要求的最短高/低电平时间。我后文会讲固件里如果用 PWM 产生 STEP占空比要随着频率变化否则高速丢步的第一个怀疑对象就是这个脉冲宽度。2.3 散热与布局HTSSOP 封装不是焊上就能跑DRV8818PWPR 的 PWPR 后缀是带 PowerPAD 的 HTSSOP 封装底部那个大散热焊盘必须焊接到 PCB 的铜皮上而且铜皮要足够大。我第一版设计图省事只铺了一小块焊盘区域1.2A 连续运行二十分钟后芯片表面温度到了 85℃ 以上虽然没触发热保护但长期来看肯定不行。后来改成底层大面积铺铜过孔阵从芯片底部一直引到背面温度直接降了十几度。具体来说散热铜皮至少做到 2cm×2cm 以上的等效面积过孔用 0.3mm 孔径、间距 0.8mm 打一排确保热量能往下传。布局顺序上我把 VM 电解电容放在驱动器电源脚旁边采样电阻挨着芯片的 ISEN 脚VREF 分压电阻远离功率走线逻辑信号线全部从芯片另一侧引出。这样做的好处是功率回路面积最小化辐射干扰小很多。地线处理用了一点星型地思路采样电阻的地端单独汇到驱动器的功率地MCU 的数字地通过一个小磁珠或 0Ω 电阻跟功率地在电源输入端单点连接。工业现场环境复杂这个细节能省掉大量莫名其妙的复现问题。3. 固件实现让 dsPIC30F3014 把速度变成脉冲3.1 初始化时序开机顺序错了电机先给你脸色看固件里第一步不是配 PWM而是把驱动芯片的上电握手做对。我给 DRV8818 的供电顺序是先上 VM 电机电源MCU 自身稳定后再拉高 nSLEEP 唤醒芯片最后释放 nRESET。实际代码里每个环节之间留了足够延时VM 上电后等 100ms 让电源稳定nSLEEP 拉高后等 1ms 以上让内部电路就绪然后才允许发送 STEP 脉冲。这套顺序看着啰嗦但真有人跳过唤醒延时直接发脉冲结果第一个 STEP 被芯片丢掉了索引器状态错位电机原地颤一下现象跟失步一模一样排查能把你绕到沟里去。初始化代码大致是这个结构#define FCY 40000000UL // 指令周期按你的 PLL 配置调整 void Driver_Init(void) { // 1. GPIO 初始化DIR、nSLEEP、nRESET、nFAULT、USEL TRISDbits.TRISD0 0; // DIR 输出 TRISEbits.TRISE0 0; // nSLEEP 输出 TRISEbits.TRISE1 0; // nRESET 输出 TRISEbits.TRISE2 1; // nFAULT 输入 LATDbits.LATD0 0; // 初始方向随便 LATEbits.LATE0 0; // nSLEEP 先拉低 LATEbits.LATE1 0; // nRESET 先拉低 // 2. 等待 VM 上电稳定 delay_ms(100); // 3. 唤醒并释放复位 LATEbits.LATE0 1; // nSLEEP 1 delay_us(10); LATEbits.LATE1 1; // nRESET 1 delay_ms(2); // 4. 配置 STEP 发生器见 3.2 StepGen_Init(); }这里有个容易被忽略的点nRESET 拉高之后芯片索引器会回到 HOME 位置内部状态确定在初始微步但如果你之前已经发过一些 STEP释放复位会让电机跳回初始相位。所以在运动中途不要随便拉 nRESET要么在系统完全静止时复位要么复位后重新做绝对位置校准。3.2 用输出比较 PWM 做 STEP 脉冲发生器STEP 脉冲的硬件方案我试过三种纯 GPIO 中断翻转、定时器中断翻转、输出比较 PWM。前两种在低速时表现尚可一到每秒上万步就开始出问题——中断延迟抖动导致脉冲间隔忽长忽短电机噪声变大偶尔还丢步。第三种方案最干净用 dsPIC30F3014 的 OC1 输出比较模块配 Timer2 做时间基准工作在 PWM 模式。原理很简单把 OC1 引脚作为 STEP 输出PR2 寄存器写周期OC1R 写脉宽那么 PR2 就决定了步进频率。关键换算关系是步进间隔的定时器周期值 FCY / 目标步进频率。比如目标每秒 16000 步FCY40MHz 时PR2 大约要写 2500。每次换速只需要更新 PR2 和 OC1R 两个寄存器完全不用进中断CPU 闲着都可以。产生脉冲的初始化代码void StepGen_Init(void) { // Timer2 作为基准1:1 分频 T2CONbits.TCKPS 0; // 1:1 PR2 0xFFFF; // 初始长周期别乱动 TMR2 0; T2CONbits.TON 1; // 启动 Timer2 // OC1 配成 PWM 模式输出高电平有效 OC1R 100; // 初始脉宽 OC1RS 100; OC1CONbits.OCTSEL 0; // 时基来自 Timer2 OC1CONbits.OCM 0b110; // PWM 模式 } void StepGen_SetRate(uint32_t stepsPerSec) { uint32_t period; if (stepsPerSec 0) { PR2 0xFFFF; // 停发脉冲 return; } if (stepsPerSec 200000) stepsPerSec 200000; // 上限保护 period FCY / stepsPerSec; if (period 64) period 64; // 最小周期保护 PR2 period; OC1R period / 8; // 脉宽取周期 1/8稳定识别上升沿 OC1RS OC1R; }这里有个实操细节OC1R 不能固定写成某个值因为当步进频率提高时周期变短固定脉宽可能反而超过周期PWM 就畸形了。所以脉宽要跟着 PR2 缩放我取周期值的 1/8大约 12.5% 占空比。这个宽度对 DRV8818 的索引器来说识别毫无压力又不会在高频时占满整个周期。另外PR2 寄存器在 dsPIC 上并不是写完立即生效而是在定时器周期匹配时自动装载所以直接写 PR2 会有一两个周期的过渡抖动。严谨做法是在 Timer2 溢出中断里改 PR2但实测下来对于工业运动控制这种场景直接在运动循环里写 PR2 的抖动完全可接受省一个中断资源。3.3 微步进与运动换算别把步数算成小学生数学硬件脉冲有了接下来把每秒多少步换算成电机什么转速。双极步进电机的步距角常见 1.8°也就是整步 200 步一圈。用了微步进之后每圈步数 200 × 微步倍数。1/16 微步下就是 3200 步/圈。举个例子机械臂关节要输出 300rpm如果电机直连转速就是 5rps那么需要的 STEP 频率 5 × 3200 16000 步/秒。对应 PR2 40000000 / 16000 2500完全在 16 位定时器能力范围内。如果是带减速器的关节比如 1:10 行星减速器电机端 300rpm 对应输出端 30rpm这时候电机转速实际可以更高步进频率也要按电机端转速算千万别拿输出端转速直接乘每圈步数否则加减速曲线会差十倍。丝杆直线模组我就直接用导程换算导程 5mm 的丝杆转一圈进给 5mm300rpm 电机直连时每秒进给 25mm步进频率同样按 16000 步/秒算这样固件里所有运动距离、速度、加速度全部统一到步这个单位上位机发位置指令下位机只做步数累加逻辑非常干净。3.4 加减速与运动曲线别让电机自杀式起步直接给电机发一个高频脉冲串它大概率不会理你——不是因为驱动器不行而是转子惯性跟不上定子磁场的突跳。丢步的本质就是负载惯量超过电机在给定频率差下的同步能力。所以固件里必须做加减速曲线。我用的是梯形加减速加速段步进频率线性升高匀速段保持目标速度减速段线性降低到目标位置附近前把速度降到能可靠停止的低速段。速度更新我在一个 1kHz 的定时中断里做每次中断根据当前速度和目标速度的差值调整速度累加量再把速度换算成 PR2 写入。以目标 16000 步/秒、加速时间 0.4s 为例加速度就是 40000 步/秒²每毫秒速度增量 40 步/秒。伪代码如下volatile uint32_t curSpeed; // 当前速度单位 step/s volatile uint32_t targetSpeed; // 目标速度 #define ACCEL 40000UL // step/s² void SpeedLoop_1kHz(void) { // 1ms 定时中断 if (curSpeed targetSpeed) { curSpeed ACCEL / 1000; if (curSpeed targetSpeed) curSpeed targetSpeed; } else if (curSpeed targetSpeed) { curSpeed - ACCEL / 1000; if (curSpeed targetSpeed) curSpeed targetSpeed; } StepGen_SetRate(curSpeed); }1kHz 更新率在日常工业点位运动中足够但如果你做高速高精轨迹比如 5 万步/秒以上1ms 的速度阶梯会带来明显的加速度跳变这时候得改成事件驱动式每次步进事件发生时都重新计算并写入 PR2让速度变化更连续。两种方案我都在项目里验证过低速场景用 1kHz 循环省资源高速场景用步进事件循环更平滑。另外有个共振避让的实战经验步进电机在某个速度区间会有明显共振通常是每秒几转到十几转这个量级微步进能削弱但不能根除调机时扫一遍速度曲线把工作点避开共振峰就好我在这套关节里把常用速度定在 300rpm恰好避开共振带。4. 调试实录我在现场踩过的坑与排查思路4.1 第一步就翻车上电后电机嗡嗡响但不动第一次上电电机发出那种典型的被镊住了的嗡嗡声一点都不转。用示波器一看STEP 引脚波形干净漂亮DIR 电平正常驱动器供电也正常问题藏在哪最后查到是 nSLEEP 和 nRESET 的时序不对——芯片一直处于睡眠状态电机绕组被锁住但不响应步进命令。这类问题对照手册的上电时序图一查一个准。还有一次是 USEL 档位配置错误索引器工作在整步模式我按 1/16 的频率发脉冲电机实际转速比我预期高 16 倍表现为转得飞快且扭矩很小这个和不动的排查思路正好相反遇到异常速度先检查微步进档位。4.2 高速丢步原因居然是脉冲宽度跑加减速测试时低速一切正常速度到 12000 步/秒以上开始偶发丢步位置误差累积。一开始怀疑加速度太大把加速度降到原来的三分之一依旧丢步。后来在示波器上抓到 STPE 引脚的脉冲串发现高频时脉冲宽度变窄因为我当时把 OC1R 写死了 100 个计数周期一短占空比就接近 100%DRV8818 索引器识别不了连续的无效电平跳变。改成脉宽跟随周期缩放后丢步现象完全消失。这是我在这个项目里印象最深的一次排查——问题不在运动学参数而在最底层的波形完整性。4.3 发热与空闲电流关节停下来不代表可以不管另一个印象深刻的坑是热设计。机械臂调试时经常让关节保持在一个位置等待指令驱动器却还在以恒流方式锁住电机。DRV8818 的电流调节是持续工作的保持力矩虽然不如运动力矩大但发热线性累积。长时间通电调试后散热铜皮温度高到接近 70℃nFAULT 偶尔被热保护触发。解决办法很朴素系统空闲超过设定时间拉低 EN 或让驱动进入 nSLEEP 状态完全关断输出等到要运动前先唤醒再走一遍初始化时序。代价是唤醒后电机相位状态可能不确定所以上位机协议里我加了一个回零指令每次从睡眠唤醒后先让机械臂回绝对原点再执行后续轨迹可靠性高很多。4.4 常见问题排查速查表我把这个项目中最常遇到的现象、原因和对应处理整理成了一张表方便现场快速定位现象大概率原因处理办法上电后电机嗡鸣但不转nSLEEP/nRESET 时序不对芯片在睡眠按手册时序重新唤醒等待就绪后再发 STEP转速是预期的好几倍USEL 微步进档位被拉低/拉高错核对 USEL 组合与手册表格确认微步倍数高速丢步、位置累积误差加速度过大或 STEP 脉宽过窄降低加速度把 OC1R 改为跟随 PR2 缩放电机发热严重电流设置过高或长时间保持力矩降低 VREF空闲时关断输出或进 nSLEEPnFAULT 频繁触发散热铜皮不够或采样电阻功率偏小加大散热铜皮/过孔换大功率低感采样电阻多轴联动时某轴偶发抖动电源母线电压跌落或共地噪声VM 加大电解电容功率地与数字地单点连接5. 项目收尾时想留给你的几句话这套 DRV8818PWPR 加 dsPIC30F3014 的组合最终在机械臂关节里跑了几个月故障率比预想低。回头看整个项目我最想强调的其实不是某个具体寄存器或电阻值而是两条工程经验。第一步进控制项目的坑大多数不在能不能转而在连续跑几小时后稳不稳。硬件上把供电去耦、采样电阻功率、散热铜皮这些看似基础的细节做扎实比追求花哨算法更重要。我见过太多板子跑演示视频很惊艳一上产线就三天两头出问题最后查出来都是电容位置不对、地线乱接这种低级原因。第二选型时优先选能把实时压力从 CPU 上搬走的器件。DRV8818 的内置索引器和恒流斩波帮我省掉了至少一半的固件复杂度dsPIC30F3014 的外设又把脉冲产生从中断里解放出来。做工业运动控制CPU 越闲系统越稳这句话在性能过剩的单片机时代经常被人忽略但在这种讲求实时性和可靠性的场景里永远不过时。如果你也正在做类似的双极步进电机项目建议先拿着我的电路参数和固件框架搭一版验证板跑通后再根据你的电机型号、负载惯量和现场供电环境去调整电流档位和加减速曲线。每一台机器人的脾气都不一样但把这些基础的底子打好后面的调试会顺畅很多。
RELATED

相关推荐

微信点餐系统源码部署与排错指南:从MySQL到小程序联调

微信点餐系统源码部署与排错指南:从MySQL到小程序联调

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/11/1 1:05:41
DRV8818PWPR+PIC18F47J53:工业级步进电机控制方案全解析

DRV8818PWPR+PIC18F47J53:工业级步进电机控制方案全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/11/1 1:05:41
DRV8818PWPR+PIC18F45K80双极步进电机控制方案实战

DRV8818PWPR+PIC18F45K80双极步进电机控制方案实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/11/1 1:05:41
MORE NEWS

更多资讯

📰

启动报Port 8088 was already in use?先查是谁占的

启动报Port 8088 was already in use?先查是谁占的 项目启动报 Port 8088 was already in use,意思很直白:这个端口已经有人占了。 先说原理:端口是"门牌号",一间房只住一个进程 端口就是一台机器上的门牌号…

📰

担心文档上云?本地运行的办公AI才敢放心用

单位上周开了个会,主题是"AI 提效",散会时领导补了一句:涉及客户资料的文档,不许往云端传。这话一出,会议室里本来跃跃欲试的同事全蔫了——大家平时用的那些在线 AI,文档一上传就不知道存哪儿去…

📰

先能用,再好用:从烂尾复盘到两周上线,全栈项目的‘原型—快速迭代‘方法论

先能用,再好用:从烂尾复盘到两周上线,全栈项目的“原型—快速迭代”方法论 全栈学习路径的文章已经很多了:怎么选技术栈、怎么搭环境、怎么记文档,几乎每个方向都有人写。但一个更扎心的问题很少有人正面讨论——为什…

📰

深度思考模式把 ARC-AGI-2 从 17.6% 拉到 45.1%:对照 Gemini 3 Pro 的三份能力评测,看‘会思考‘改写了哪些边界

深度思考模式把 ARC-AGI-2 从 17.6% 拉到 45.1%:对照 Gemini 3 Pro 的三份能力评测,看“会思考”改写了哪些边界 一、先说结论:变强的不是“知识”,而是“解法” 每次新模型发布,评测榜单都会涨几个点,大…

📰

1.c++入门篇

1.c中的关键字asmdoifreturntrycontinueautodoubleinlineshorttypedefforbooldynamic_castintsignedtypeidpublicbreakelselongsizeoftypenamethrowcaseenummutablestaticunionwchar_tcatchexplicitnamespacestatic_castunsigneddefaultcharexportnewstructusingfriendclassext…

📰

《江灯合声》:有可行的分框版,也仍可以选择连续鸣谢

武汉江岸区栎坡合唱团在免费节目册《江灯合声》中,以表格集中鸣谢资助者。各家共同要求改为独立小框,团里仍想保留表格。现有全名与支持事项清楚可见,双方此前未承诺具体排版。我支持保留表格。补充的试排材料让选择更具体:分框能…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬