简介:面向汽车电机控制开发的AN5327应用笔记,聚焦基于MC9S12ZVM的3相无传感器单分流电流检测PMSM矢量控制方案,适合嵌入式电机控制工程师、汽车电子开发者及高校相关课题研究者参考。文档围绕成本敏感场景下的驱动设计展开,覆盖系统概念、PMSM场定向控制原理、dq坐标系电机模型、输出电压激活与单电阻相电流测量、转子位置与速度估算等关键环节。包内仅含1个PDF文件,压缩包约2.58MB,便于在本地检索与查阅。软件实现部分还梳理MC9S12ZVML128的ADC、PWM、定时器等关键模块、设备初始化与软件架构,并介绍FreeMASTER调试界面和MCAT参数调校流程。已有212人学习,可帮助读者理解无位置传感器FOC的完整设计链路,对照单分流采样、观测器估算与调试调校建立可落地的分析框架。
1. 单电阻 + 无感 FOC:把 BOM 压到极限的代价在哪
做低压三相驱动的工程师大多绕不开一道选择题:位置传感器要不要、电流采样用几个电阻。三电阻加编码器的方案稳妥,但物料表一摊开,两路运放、三路 ADC、传感器和线束的成本往往超过主控本身。AN5327 这份应用笔记走的是另一条路——母线只放一个分流电阻,转子位置交给扩展反电动势观测器估出来,整套算法跑在 MC9S12ZVM 这颗面向电机控制的器件上,控制周期 100 μs,上位机用 FreeMASTER 监控,调参用嵌入式的 MCAT 工具。
这套组合适合做汽车辅助电机、泵类、风扇类驱动,对成本敏感、对低速性能要求不算极端的场景。但单电阻采样有一个绕不开的物理约束:有效矢量窗口太窄的时候,电流根本采不到,重构出来的三相电流是错的。能不能用,取决于你怎么处理这个窗口。后面几章就围绕这条主线,从采样时序、FOC 参数、外设协同一直讲到调参和排错。
2. 单分流电阻如何还原三相电流:矢量窗口与采样时序
很多人第一次接触单电阻方案会卡在同一个地方:电流环参数照着公式算了,电机也能转,但一到低速轻载就抖,示波器上相电流顶部有平顶或者缺口。根子往往不在控制环,而在采样——单电阻拿到的不是三相电流,而是母线电流在特定开关时刻的“切片”,切片位置不对,重构出来的就是错数。这一章把切片的位置、窗口宽度和重构代码讲清楚。
2.1 八种开关状态里,哪些时刻能采到电流
三相逆变器六个功率管上下互补。用 (Sa, Sb, Sc) 表示三个桥臂上管的开关状态,一共八种组合:000、001、010、011、100、101、110、111。其中 000 和 111 是零矢量,三相要么全下管导通要么全上管导通,母线电流不流过分流电阻(只剩很小的环流),剩下六个是有效矢量。
关键在于:在有效矢量期间,母线电流恰好等于某一相电流,符号取决于该相是上管导通(电流流出母线)还是下管导通(电流流回母线)。
| 矢量 (Sa Sb Sc) | 导通状态 | 母线电流 i_dc |
|---|---|---|
| 100 | A 上管,B、C 下管 | +ia |
| 110 | A、B 上管,C 下管 | -ic |
| 010 | B 上管,A、C 下管 | +ib |
| 011 | B、C 上管,A 下管 | -ia |
| 001 | C 上管,A、B 下管 | +ic |
| 101 | A、C 上管,B 下管 | -ib |
| 000 / 111 | 零矢量 | 约等于 0 |
这张表是整套重构逻辑的地基,符号错一位,后面全错。中心对齐的 PWM 一个周期内是七段式:V0 → V1 → V2 → V7 → V2 → V1 → V0,两个有效矢量各出现两次,对称分布。采样点就放在 V1 和 V2 的正中间偏后位置,等运放建立完成再触发 ADC。两次采样拿到两相电流,第三相用 ia + ib + ic = 0 算出来。
问题在于 V1 和 V2 的持续时间由占空比决定。当某一相占空比接近 0% 或 100% 时,对应的有效矢量宽度趋近于零,窗口就消失了——这就是单电阻方案天生的盲区。
2.2 最小窗口时间怎么算,占空比为什么要移相
窗口宽度的下限不能拍脑袋,要把几段时间加起来:ADC 采样保持时间、运放加 RC 滤波的建立时间、功率管死区、开关瞬间的振铃衰减时间。
T_min = t_sh + t_settle + t_dead + t_ring
举个实际配置:PWM 载波 20 kHz,周期 50 μs;ADC 采样窗口 1.5 μs;运放带宽按 1 MHz、增益 10 估算,建立到 0.1% 大约 2 μs;死区 0.5 μs;振铃按 1 μs 计。加起来 5 μs,再留 20% 余量,取 6 μs。也就是说每个有效矢量至少要占周期的 12%,否则这次采样不可信。
当占空比落到边界区间,比如某相只有 5%,它对应的有效矢量窗口只有 2.5 μs,不够。常见做法是移相(phase shifting):在一个 PWM 周期内把三相的开关时刻整体平移,人为把两个有效矢量都撑到 T_min 以上,代价是输出电压矢量产生一点偏差,下一拍再补偿回来。我一般会设一个门限,占空比落在 [0, 8%] 或 [92%, 100%] 区间时启动移相,移相量按窗口缺口动态算,并限幅在周期的 1/8 以内,避免把波形拉得太歪。
还有一个容易被忽略的点:移相只解决“能不能采到”,不解决“采到的是不是准”。移相之后有效矢量偏离了原本的 SVPWM 占空比,电压输出会有一个小台阶,电流环如果在几十微秒内就把这个台阶当成扰动去追,反而会震荡。通常的做法是把移相量记下来,在下一拍的占空比计算里做反向补偿,让平均电压回到期望值。
2.3 电流重构的代码骨架与边界处理
下面是重构和窗口检查的核心骨架,直接能对着改。
/* 单电阻电流重构:在 PWM 周期内两个采样点各调用一次 * 输入 raw0/raw1 为两次 ADC 原始值,sector 为 SVPWM 当前扇区 * 输出 ia/ib/ic 为 Q15 定点电流,window_invalid 标志供上位机观察 */ #define T_MIN_TICKS 120 /* 6us,按 1 tick = 50ns 估算 */ #define I_OFFSET 2048 /* 运放静态偏置对应 12bit ADC 中点 */ #define CURRENT_SCALE 18 /* 由分流电阻、运放增益、Vref 共同决定 */ static inline q15_t adc_to_current(uint16_t raw) { /* 扣偏置 → 按标度折算成安培 → 归一化到 Q15 */ return (q15_t)((int32_t)(raw - I_OFFSET) * CURRENT_SCALE); } void reconstruct_currents(uint16_t raw0, uint16_t raw1, uint8_t sector, pmsm_iabc_t *out) { q15_t i0 = adc_to_current(raw0); q15_t i1 = adc_to_current(raw1); switch (sector) { case 1: /* V1=100 采 ia, V2=110 采 -ic */ out->ia = i0; out->ic = -i1; out->ib = -(out->ia + out->ic); break; case 2: /* V2=110 采 -ic, V3=010 采 ib */ out->ic = -i0; out->ib = i1; out->ia = -(out->ib + out->ic); break; case 3: /* V3=010 采 ib, V4=011 采 -ia */ out->ib = i0; out->ia = -i1; out->ic = -(out->ia + out->ib); break; case 4: /* V4=011 采 -ia, V5=001 采 ic */ out->ia = -i0; out->ic = i1; out->ib = -(out->ia + out->ic); break; case 5: /* V5=001 采 ic, V6=101 采 -ib */ out->ic = i0; out->ib = -i1; out->ia = -(out->ib + out->ic); break; case 6: /* V6=101 采 -ib, V1=100 采 ia */ out->ib = -i0; out->ia = i1; out->ic = -(out->ia + out->ib); break; default: out->window_invalid = 1; /* 窗口失效时保持上一拍值 */ break; } } /* 在 PWM 中断里判断窗口是否足够,不够就改比较寄存器移相 */ void pwm_window_check(uint16_t cmp_a, uint16_t cmp_b, uint16_t cmp_c) { uint16_t w1 = min3(cmp_a, cmp_b, cmp_c); /* 第一个矢量宽度 */ uint16_t w2 = PWM_PERIOD - max3(cmp_a, cmp_b, cmp_c); /* 第二个矢量宽度 */ if (w1 < T_MIN_TICKS || w2 < T_MIN_TICKS) { apply_phase_shift(w1, w2); /* 平移量限幅在周期 1/8 内 */ phase_shift_flag = 1; } }adc_to_current里I_OFFSET取 ADC 量程中点,对应运放输出的静态偏置电压;CURRENT_SCALE由分流电阻阻值、运放增益和 ADC 参考电压共同决定,理论算完一定要用钳形表实测比对一次再微调,光靠理论值经常差几个百分点。sector的编号必须和 SVPWM 那段代码用的是同一套,我见过两个模块各自定了一套扇区编号、错开一位的工程,电机能转但电流环一直在追一个错误方向,查了整整两天。
窗口不足时不要硬算,宁可保持上一拍的值并置标志位。错一个周期,好过错一个量级。上位机 recorder 上把这个标志和三相电流一起录下来,低速区的波形问题一眼就能定位。
3. 无感 FOC 的数学落地:dq 模型、PI 增益与反电动势观测器
采样解决的是“看得见”,这一章解决“算得准”。FOC 的整个链路是:采到三相电流 → Clarke 变换到 αβ → Park 变换到 dq → 两个 PI 分别控 id 和 iq → 逆 Park 回 αβ → SVPWM 输出。中间任何一步的坐标约定错了,现象都是“能转但不对”。这一章把 dq 轴模型、PI 增益的算法和观测器的切换策略讲透。
3.1 dq 轴电压方程与交叉耦合补偿
PMSM 在同步旋转坐标系下的电压方程是这样的(Rs 定子电阻,Ld/Lq 为 dq 轴电感,ωe 为电角速度,ψPM 为永磁体磁链):
ud = Rs·id + Ld·(did/dt) − ωe·Lq·iq uq = Rs·iq + Lq·(diq/dt) + ωe·Ld·id + ωe·ψPM后面那一串 −ωe·Lq·iq、+ωe·Ld·id、ωe·ψPM 就是交叉耦合项和反电动势项。它们的存在意味着:你调 d 轴电流的时候,q 轴会有反应,反过来也一样。如果不做补偿,两个电流环互相打架,阶跃响应上能看到明显的耦合振荡。
常见做法是在 PI 输出后面加前馈:
/* 电流环输出加前馈解耦,u_d_cmd / u_q_cmd 为 PI 原始输出 */ ud_ref = ud_cmd - omega_e * Lq * iq_fbk; /* 抵消 −ωe·Lq·iq */ uq_ref = uq_cmd + omega_e * Ld * id_fbk + omega_e * PSI_PM; /* 抵消 +ωe·Ld·id 和反电动势 */补偿之后,被控对象退化成两个独立的一阶系统:Ld·did/dt + Rs·id = ud',Lq·diq/dt + Rs·iq = uq'。这样两个 PI 可以分开整定,互不干扰。注意前馈里用的电感值要和电机实际参数一致,参数偏差大的时候前馈反而会引入稳态误差,一般先用铭牌值,再用 MCAT 微调。
3.2 用极点配置把电流环 PI 增益算出来
补偿之后的被控对象是一阶的,套标准 PI(u = Kp·e + Ki·∫e dt),闭环特征方程是:
s² + ((R + Kp)/L)·s + Ki/L = 0
期望的闭环极点按二阶系统配置:s² + 2ξω0·s + ω0² = 0,其中 ω0 是自然频率,ξ 是阻尼比。对比系数得到:
Kp = 2ξω0·L − R Ki = ω0²·L
代入一组实际参数:Ld = 0.42 mH,Lq = 0.58 mH,Rs = 0.35 Ω,目标带宽 600 Hz(ω0 = 2π×600 ≈ 3769.9 rad/s),取临界阻尼 ξ = 1。
d 轴:Kp = 2×3769.9×0.00042 − 0.35 ≈ 2.82,Ki = 3769.9² × 0.00042 ≈ 3965。 q 轴:Kp = 2×3769.9×0.00058 − 0.35 ≈ 4.02,Ki ≈ 5476。
带宽怎么选?理论上限是开关频率的 1/10 到 1/20,20 kHz 载波对应 1~2 kHz。但实际上还有两个限制:采样周期 100 μs 带来的一拍延迟,以及单电阻窗口导致的采样不确定性。我一般把带宽压在 600~800 Hz,留足相位裕度。贪高带宽的后果是电流环在窗口抖动的时候把噪声放大,波形上全是毛刺。
还要注意离散化。上面算的是连续域参数,实际代码里 PI 是离散执行的,积分项用后向差分。100 μs 的控制周期对应 10 kHz 采样,相对 600 Hz 带宽大约是 16 倍过采样,离散化误差可以接受。如果控制周期降到 200 μs,同样的带宽下相位滞后会明显变大,就得重新降带宽。
3.3 扩展反电动势观测器与开环启动对齐
无感的核心是从电压方程里把反电动势提出来,用观测器估角度。低速时反电动势幅值和噪声差不多大,观测器不可信,所以启动必须分三段走。
第一段是对齐(alignment):在 d 轴注入一个直流电流,幅值取额定电流的 30%~50%,持续 200~500 ms,把转子强行拉到 d 轴对应的位置。这一步的目的是建立一个已知的初始角度,避免启动时转子位置随机导致反转。
第二段是开环加速(open-loop ramp):按设定的加速度把电角度开环往上推,电流保持在固定幅值,本质上是“拖着转子走”。加速度不能设太大,否则转子跟不上旋转磁场,表现为启动堵转或者过流保护动作。
第三段是切换(transition):转速达到额定的 5%~10% 之后,观测器输出逐渐接管。切换是整套无感方案里最容易翻车的地方——开环角度和观测器角度之间有偏差时直接硬切,转矩会突然掉一下甚至反向。常见做法是先把观测器估计的角度误差通过一个 PI 把速度积分器的初值拉齐,再按比例混合两个角度,混合窗口设 100~200 ms。
观测器本身的实现方式,AN5327 用的是扩展反电动势(EEMF)模型,把凸极效应也纳进去了。工程上更常见的简化写法是:
d(îα)/dt = (1/Ld)·(uα − Rs·îα − êα) d(îβ)/dt = (1/Ld)·(uβ − Rs·îβ − êβ) êα、êβ 由电流估计误差经 PI(或锁相环)更新 角度 θ = atan2(−êα, êβ)符号约定各家不一样,写完一定要用一台已知转向的电机做一次正反转验证,确认角度增加的方向和实际转向一致。这一步省不得。
4. MC9S12ZVM 上的软件实现:100 μs 节拍与外设协同
算法想清楚了,落到芯片上还有一层硬约束:外设怎么排、中断谁先谁后、100 μs 里塞不塞得下。这一章按“时序表 → 初始化顺序 → 上位机联调”的顺序讲,都是可以直接搬的工程习惯。
4.1 ADC、PWM、定时器的时序分配
AN5327 给的配置是控制周期 100 μs,也就是 10 kHz 的 FOC 节拍。PWM 载波一般取 20 kHz,一个控制周期包含两个 PWM 周期,电流采样每个 PWM 周期都做,但完整的 FOC 计算两个周期执行一次。这样安排的好处是采样密度够,计算负载又不至于爆掉。
一个 PWM 周期内的时序大致是这样:
| 阶段 | 典型时长 | 动作 | 是否采样 |
|---|---|---|---|
| V0 零矢量 | tz | 三相下管导通 | 否,母线电流≈0 |
| V1 有效矢量 | ≥ 6 μs | 触发 ADC 第一次 | 是,采第一相 |
| V2 有效矢量 | ≥ 6 μs | 触发 ADC 第二次 | 是,采第二相 |
| V7 零矢量 | tz | 三相上管导通 | 否 |
| V2 镜像 | ≥ 6 μs | 不采 | 否 |
| V1 镜像 | ≥ 6 μs | 不采 | 否 |
| V0 镜像 | tz | 周期结束 | 否 |
ADC 触发点不要设在有效矢量的起点,要往后挪一点,等运放建立完成。具体挪多少,用 GPIO 翻转打点、示波器上看运放输出和触发沿的相对位置,一次就能定下来。
4.2 初始化顺序与中断优先级安排
初始化顺序有个基本原则:时钟先于一切,PWM 输出最后使能。下面是一个可以直接套的骨架。
void system_init(void) { clock_init(); /* PLL 和总线时钟,必须先于所有外设 */ gpio_init(); /* 引脚复用:PWM 输出、ADC 输入、调试串口 */ pwm_init(); /* 20kHz 中心对齐,互补输出,死区 0.5us,输出先关 */ adc_init(); /* 12bit,双通道,触发源选 PWM 比较匹配 */ timer_init(); /* 100us 控制节拍定时器 */ opamp_init(); /* 内部运放,增益按分流电阻摆幅配置 */ fault_init(); /* 过流比较器输出直连 PWM 故障关断引脚 */ pwm_output_enable(); /* 最后一步才开功率输出 */ } void pwm_isr(void) /* 最高优先级:决定控制节拍 */ { clear_pwm_flag(); if (fault_flag) { pwm_output_disable(); return; } update_duty(); } void adc_isr(void) /* 次高:两次采样完成后做重构 */ { reconstruct_currents(adc_raw[0], adc_raw[1], sector, &iabc); adc_done = 1; }中断优先级上,PWM 重载中断排最高,ADC 转换完成次之,通信类(FreeMASTER 的 SCI 收发)放最低。过流保护不要依赖软件中断,直接走比较器硬件关断,软件轮询永远慢半拍,等它反应过来功率管已经炸了。
还有一个细节:fault_init里配的过流阈值要和分流电阻的量程匹配,阈值设在 ADC 满量程的 80%~90%,留出余量给电流纹波。设太紧会误触发,设太松起不到保护作用。
4.3 FreeMASTER 与 MCAT 的联调路径
FreeMASTER 通过串口和板子通信,MCAT 是嵌在工程里的一个调参页面,读写的是工程里暴露出来的全局变量。联调的顺序固定,跳步容易白忙:
- 编译带 FreeMASTER 驱动和 MCAT 变量描述文件的工程,确认 map 文件里参数结构体有明确地址;
- 连上目标板,打开 MCAT 页面,先录电机参数:极对数、Rs、Ld、Lq、额定电流、额定转速;
- 调电流环,给定 id/iq 阶跃,看 recorder 上的响应;
- 调观测器,低速段看估算角度和实际角度的偏差;
- 最后调速度环,带宽比电流环低 5~10 倍。
一个常被忽略的点:MCAT 写下去的参数是落在 RAM 还是 Flash。落在 RAM 的,掉电就丢,每次上电都要重新写;落在 Flash 的,写之前要确认擦写次数和保护机制。工程交付前务必把这一条确认清楚,不然现场调试时参数“莫名其妙变回去了”,能查很久。
5. 常见问题排查:单电阻无感方案最容易翻车的五处
这套方案能跑起来之后,剩下的时间基本都花在排错上。下面五条是从实际调试里攒出来的,按“现象 → 原因 → 解决”写,对得上就能省不少时间。
5.1 低速轻载时电流波形出现台阶或断续
现象:示波器上看相电流,转速低于 10% 额定、负载小于 20% 时,波形顶部出现平顶或者缺口,电机有轻微抖动,转速越低越明显。
原因:占空比接近 0% 或 100%,有效矢量窗口小于 T_min,ADC 采到的不是真实电流,重构出来的第三相也跟着错。移相补偿没启用,或者门限设得太宽没触发。
解决:先确认 ADC 触发点确实落在窗口内(GPIO 打点加示波器比对),再把移相门限收紧到占空比 [0, 8%] 和 [92%, 100%] 两个区间,T_min 按实际建立时间重新标定。如果低速要求高,可以在电流环里对不可信采样做一阶预测,但预测值不要直接进 PI,加个权重衰减更稳。
5.2 上电启动时反转或者直接堵转
现象:给启动命令后电机先反向动一下再正转,或者干脆卡住不动,过流保护动作。
原因:对齐阶段注入的 d 轴电流方向和实际角度约定不一致;对齐时间太短,转子还没稳定就进入开环加速;或者开环加速度设得太大,转子跟不上旋转磁场。
解决:先用直流注入法单独验证对齐方向——只给 d 轴电流,看转子是不是停在你期望的位置。对齐时间至少 200 ms,注入电流取额定值的 30%~50%。开环加速度先设保守值,观察相电流幅值是否在限幅内,再逐步往上加。
5.3 观测器发散,转速估计出现跳变
现象:FreeMASTER recorder 上估算转速正常运行时突然跳到正负几倍额定值,电机异响、抖动,严重时直接过流停机。
原因:观测器增益在低速段设得过高,反电动势信噪比低,估计误差被放大;或者磁链 ψPM、极对数输入和电机实际参数不符;切换瞬间开环角度和观测器角度差太大,混合时产生跳变。
解决:把观测器带宽降下来,低速段靠电流注入辅助;核对铭牌上的极对数和磁链,参数不对时观测器永远收敛不到正确值;切换阶段用角度误差 PI 把积分器初值拉齐,再按比例混合,混合窗口拉到 200 ms。
5.4 三相电流和为零但相位不对
现象:ia + ib + ic ≈ 0,波形看起来也正常,但同样转速下电流比预期大很多,转矩输出偏小,效率明显偏低。
原因:采样极性或者矢量表符号错位,某一路取反了;或者 ADC 通道顺序和相序对应错了。这种情况最隐蔽,因为“和为零”这个校验条件本身是满足的。
解决:用直流注入法逐相校验——只给 A 相注入电流,看采样通道读数符号和幅值对不对,B、C 相同样做一遍。再对着 2.1 那张矢量表逐行核对代码里的符号,一行一行对,别跳。
5.5 FreeMASTER 连不上或者参数改了不生效
现象:MCAT 页面上参数写下去,电机响应没变化;或者通信每隔几秒断一次,recorder 波形有断点。
原因:变量没声明成全局或者被编译器优化掉;参数写到 RAM,但应用读的是另一份副本;通信波特率和后台任务抢占导致丢包。
解决:查 map 文件确认变量有独立地址,参数结构体加volatile;把通信收发放到低优先级任务里,避开 PWM 中断密集区;确认参数只有一份权威副本,写和读指向同一个结构体。
6. 从能转到转得好:用 MCAT 把参数调成闭环
电机能转只是及格线,能稳定地转、低速不抖、加载不掉速,才是这套方案真正的价值。这一章讲一个我自己常用的调参顺序,以及一个验证闭环是否真的收敛的技巧。
调参按“先内后外、先静后动”的顺序走,每一步都要有明确的验收标准,不然很容易在几个环之间来回打转:
| 步骤 | 调什么 | 验收标准 |
|---|---|---|
| 1 | 电流环 Kp/Ki | id/iq 阶跃响应超调 < 10%,调节时间 < 5 ms |
| 2 | 观测器带宽 | 转速 10% 额定以上,估算角度误差 < 5 电角度 |
| 3 | 切换混合窗口 | 切换过程转速波动 < 3%,无过流 |
| 4 | 速度环 Kp/Ki | 加载 50% 额定,转速跌落 < 5%,恢复时间 < 100 ms |
第一步有个细节:阶跃给定不要一步到位,用斜坡给,斜率控制在电流环带宽的 1/5 左右,否则 PI 输出直接饱和,看到的响应全是限幅,看不出真实带宽。用 FreeMASTER 的高速 recorder 抓 id/iq 和 ud/uq,四个通道一起看,耦合振荡一眼就能分辨出来——如果 id 阶跃时 iq 有明显波动,说明前馈解耦的参数不对或者根本没开。
验证闭环是否真的收敛,我习惯做一个“反向扰动”测试:电机稳定运行在 30% 额定转速,突然把母线电压拉低 10%,看观测器估算的转速和实际转速是否同步恢复。如果估算转速恢复得比实际慢很多,说明观测器带宽不够;如果估算转速先于实际跳变,说明观测器增益过高,在放大噪声。这个测试比单纯看稳态波形有用得多,因为稳态下什么问题都藏着。
还有一个容易忽略的验证点:把移相补偿打开和关闭,各录一段低速轻载的相电流。正常情况下打开移相之后波形顶部应该变平,如果反而更差,说明移相量算错了方向或者补偿没有闭环回去。这个对比做一次,比盯着代码看半天有效。
说个我自己的教训。早些年调一套类似的单电阻方案,低速抖动查了两周,电流环参数来回改了十几版,最后发现问题出在 ADC 触发点比运放建立时间早了 0.8 μs——就这不到一微秒的偏差,采样值系统性偏低,重构出来的电流幅值一直偏小,PI 为了追给定就把增益越调越大,越调越震。从那以后我每次上手单电阻方案,第一件事都是拿示波器把触发沿和运放输出打在同一个屏幕上,确认建立完成之后再触发采样,然后才动参数。这个习惯帮我省下的时间,比任何调参技巧都多。
希望这套流程能帮到你,少走几段弯路。
本文还有配套的精品资源,点击获取