1. 从一堆散件到能站住的平衡小车先搞清楚这套硬件到底在干什么平衡小车这个项目很多人第一次做的时候会觉得最难的是PID算法但实际焊完板子、烧完程序之后才发现真正让人抓狂的往往是电机不转、编码器读数乱跳、TB6612莫名其妙发烫这些硬件层面的问题。我前后做过五六台不同方案的平衡小车从最开始的L298N到后来的TB6612从直流减速电机到带霍尔编码器的JGB-520踩过的坑基本覆盖了从选型到调参的完整链路。这篇文章就把这些经验完整地梳理一遍重点放在JGB-520编码电机和TB6612驱动模块的配合使用上同时把PID调参的实操细节讲透。先明确这套硬件的分工。STM32是整个系统的大脑负责读取传感器数据、执行PID运算、输出PWM控制信号。JGB-520是执行机构它本质上是一个带减速箱的直流电机尾部集成了霍尔编码器可以输出脉冲信号反馈转速和方向。TB6612是功率驱动模块它接收STM32输出的PWM信号和方向信号把它们转换成能够驱动电机的大电流输出。三者之间的关系可以用一个简单的类比来理解STM32是驾驶员TB6612是油门和方向盘JGB-520是车轮和速度表。驾驶员根据速度表的读数来决定踩多少油门、往哪个方向打方向盘。这套方案之所以在平衡小车项目里特别常见核心原因有三个。第一JGB-520的编码器分辨率适中减速比通常在1:30到1:48之间配合13线或11线霍尔编码器四倍频之后每转可以产生几百到上千个脉冲对于平衡小车这种需要实时速度反馈的场景来说精度足够。第二TB6612的驱动能力刚好匹配JGB-520的工作电流持续1.2A、峰值3.2A的输出能力可以轻松带动这款电机而且它的待机功耗极低适合电池供电的场景。第三STM32的定时器资源丰富可以同时输出多路PWM并捕获编码器脉冲硬件上不需要额外的扩展芯片。但这里有一个很多人一开始不会注意到的问题JGB-520的编码器输出是霍尔式的输出信号是方波而STM32的编码器接口模式对信号的边沿质量有要求。如果电机引线太长或者没有做滤波处理方波上会出现振铃和毛刺导致编码器计数出现误触发。我在第一台车上就遇到过这个问题电机一转编码器读数就疯狂跳动后来在编码器A/B相线上各加了一个100nF的电容到地问题才解决。这个细节在后面讲硬件连接的时候会详细展开。2. JGB-520编码电机和TB6612的接线细节比你想的更容易出错2.1 JGB-520的六根线到底怎么接JGB-520电机尾部一共引出六根线标准配色是红色和白色是电机电源线直接接TB6612的AO1/AO2或者BO1/BO2输出端黑色和绿色是编码器的电源和地通常黑色接GND、绿色接VCC一般是3.3V或5V具体看编码器规格黄色和蓝色是编码器的A相和B相信号输出接到STM32的定时器编码器接口引脚上。这里有几个容易踩的坑。第一个坑是电机电源线的极性。红白两根线接反了电机会反转但这个问题在调试阶段很容易发现不算大坑。真正麻烦的是编码器的电源电压。有些批次的JGB-520编码器供电范围是3.3V到5V有些只支持5V。如果你直接接3.3V编码器可能输出信号幅度不够STM32识别不到。我的建议是先用万用表量一下编码器输出信号的高电平幅度如果在3.3V以上就可以直接接STM32的IO口如果只有2V左右就需要加电平转换或者改用5V供电再分压。第二个坑是A相和B相的接线顺序。A/B相接反了不会导致编码器不工作但会导致计数方向相反。这个问题在调试的时候表现为你让电机正转但速度反馈是负值。解决方法是把A/B两根线对调或者在软件里把计数方向取反。我个人的习惯是在硬件上就把线序调对这样软件层面不需要做额外的处理代码更干净。第三个坑是编码器电源和电机电源的隔离。JGB-520的电机和编码器虽然封装在一起但它们的电源是独立的。电机电源来自TB6612的VM端编码器电源来自STM32的3.3V或5V。如果共地处理不好电机的换向噪声会通过地线串到编码器电源上导致编码器输出误脉冲。正确的做法是在TB6612的电源输入端和编码器电源输入端各加一个100uF的电解电容和一个100nF的陶瓷电容并且在PCB布局上让电机电源线和编码器信号线尽量远离。2.2 TB6612的引脚功能与STM32的对应关系TB6612模块通常有16个引脚但实际用到的核心引脚只有几个。VM接电机电源VCC接逻辑电源3.3V或5VGND共地。STBY是待机控制引脚接高电平模块才工作我一般直接接STM32的一个GPIO方便在紧急情况下快速切断电机输出。AIN1和AIN2是A通道的方向控制引脚BIN1和BIN2是B通道的方向控制引脚。PWMA和PWMB是A/B通道的PWM输入引脚接STM32定时器的PWM输出通道。AO1/AO2和BO1/BO2是电机输出端分别接两个JGB-520的电机线。TB6612的真值表很关键很多人不看手册直接接线结果电机不转或者只会一个方向转。简单来说AIN1和AIN2不能同时为高电平否则电机制动AIN1高AIN2低时电机正转AIN1低AIN2高时电机反转AIN1和AIN2都为低时电机停止滑行。PWMA输入PWM信号占空比决定转速。这里有一个细节TB6612的PWM频率建议在10kHz到100kHz之间太低会有可闻噪声太高会导致开关损耗增加。我一般用20kHz刚好在音频范围之上电机运行很安静。STM32这边我通常用TIM1或TIM8的高级定时器来输出PWM因为这两个定时器支持互补输出和死区控制虽然TB6612不需要互补输出但高级定时器的PWM分辨率更高。编码器接口用TIM2、TIM3、TIM4、TIM5这几个通用定时器它们都支持编码器模式。具体引脚分配要看你的STM32型号以STM32F103C8T6为例TIM1的CH1和CH2可以输出PWMTIM2的CH1和CH2可以接编码器A/B相TIM3的CH1和CH2接另一个编码器。2.3 电源方案的选择与噪声抑制平衡小车的电源方案直接影响系统的稳定性。我推荐用2节18650锂电池串联标称电压7.4V充满8.4V。这个电压可以直接接TB6612的VM端同时通过一个降压模块降到5V给STM32和编码器供电。注意不要用9V碳性电池它的内阻大电机启动瞬间电压会被拉低导致STM32复位。噪声抑制是电源方案里最容易被忽视的部分。电机换向时会产生大量的高频噪声这些噪声会通过电源线和地线传播。我在实际项目中总结了一个有效的滤波方案在TB6612的VM和GND之间并联一个470uF的电解电容和一个100nF的陶瓷电容在STM32的5V输入端加一个LC滤波10uH电感加100uF电容编码器的电源引脚上再加一个100nF的陶瓷电容。这套组合下来电机运行时示波器上看电源纹波可以控制在50mV以内。3. STM32的编码器接口配置与PWM输出CubeMX里几个关键选项别选错3.1 编码器模式的配置逻辑STM32的定时器编码器模式是一个硬件级的正交解码器它可以自动根据A/B相的边沿关系进行加减计数不需要CPU干预。配置的时候有几个关键参数需要理解。首先是编码器模式的选择CubeMX里提供了TI1、TI2和TI1TI2三种模式。TI1模式只对A相的边沿计数TI2模式只对B相的边沿计数TI1TI2模式对A/B两相的所有边沿都计数也就是四倍频。对于平衡小车来说我推荐用TI1TI2模式因为四倍频可以提高分辨率让低速时的速度反馈更平滑。计数器周期设置为6553516位最大值这样正转时计数器递增反转时递减溢出后自动回绕。读取速度的时候我通常用定时器中断每隔固定时间比如10ms读取一次计数器的值然后计算差值得到速度。这里有一个细节读取计数器后需要把计数器清零否则下一次读取的差值会累积。但清零操作要在读取之后立即执行避免在清零和读取之间丢失脉冲。编码器的计数方向可以通过交换A/B相的接线来改变也可以在软件里对读数取反。我倾向于在硬件上就把方向调对因为软件取反会增加代码的复杂度而且容易在调试的时候搞混。判断方向是否正确的方法很简单用手正向转动电机轴观察计数器的值是递增还是递减如果递减就把A/B相线对调。3.2 PWM输出的频率与分辨率权衡PWM频率和分辨率是一对矛盾。STM32的定时器在给定时钟频率下PWM频率越高分辨率越低。以STM32F103的72MHz主频为例如果定时器预分频设为0自动重装载值设为3599那么PWM频率就是72MHz/360020kHz分辨率是3600级。这个分辨率对于电机控制来说足够了因为电机本身的响应速度远低于这个精度。但如果你把PWM频率提高到100kHz分辨率就降到720级低速时的控制精度会下降。我实测下来20kHz是一个比较好的平衡点既避开了音频噪声又保证了足够的分辨率。如果你对噪声特别敏感可以用25kHz或30kHz分辨率仍然在2000级以上。还有一个容易忽略的点是PWM的初始状态。在电机使能之前PWM输出应该是0占空比否则上电瞬间电机会突然转动。我在代码里会在初始化完成后先把PWM占空比设为0再拉高STBY引脚使能TB6612这样上电时电机不会动。3.3 定时器中断的优先级安排平衡小车系统里通常有多个中断编码器定时器中断、MPU6050数据就绪中断、PID控制定时器中断、串口中断等。这些中断的优先级安排直接影响系统的实时性。我的经验是把PID控制定时器中断设为最高优先级因为PID运算的周期必须严格固定否则积分项和微分项的计算会出错。编码器读取中断设为次高优先级MPU6050中断设为中等优先级串口中断设为最低优先级。PID控制周期我一般设为5ms也就是200Hz的控制频率。这个频率对于平衡小车来说足够了因为小车的机械响应时间通常在几十毫秒级别。控制周期太短会导致CPU负载过高太长会导致响应迟钝。5ms是一个经过验证的平衡点。4. PID调参不是玄学但确实需要一套系统的方法4.1 先搞清楚位置式PID和增量式PID在这个项目里的分工平衡小车通常需要三个PID环直立环、速度环和转向环。直立环控制小车的倾角让小车保持直立速度环控制小车的行驶速度让小车按照设定的速度前进或后退转向环控制小车的转向让小车按照设定的方向行驶。这三个环里直立环和转向环通常用位置式PID速度环通常用增量式PID。位置式PID的输出直接对应控制量的绝对值适合直立环这种需要精确控制角度的场景。增量式PID的输出是控制量的增量适合速度环这种需要平滑调节的场景。很多人一开始不理解为什么速度环要用增量式其实原因很简单增量式PID的输出是累加的即使反馈值有轻微波动输出也不会突变电机的转速变化更平滑。而位置式PID在速度环里使用时反馈值的微小波动会导致输出大幅变化电机转速会抖动。直立环的输入是MPU6050测得的倾角输出是PWM占空比。速度环的输入是编码器测得的速度输出是直立环设定值的修正量。转向环的输入是陀螺仪的Z轴角速度输出是左右电机的差速。这三个环的关系是速度环的输出叠加到直立环的设定值上转向环的输出叠加到左右电机的PWM上。4.2 直立环的调参步骤与常见问题直立环的调参是整个PID调参里最关键的环节。我的调参步骤是这样的先把速度环和转向环的参数全部设为0只调直立环。直立环的Kp从0开始逐渐增大直到小车能够快速响应倾角变化但不会剧烈振荡。然后加入KdKd的作用是抑制振荡让小车在倾角变化时能够平滑地回到平衡位置。Kd太大会导致小车对噪声敏感太小则振荡抑制不够。具体操作的时候我先把Kp设为10Kd设为0用手扶着小车感受电机的响应。如果小车往一边倒的时候电机能够快速往同方向加速说明Kp的方向是对的。然后逐渐增大Kp直到小车在平衡位置附近开始振荡。这时候加入Kd从Kp的1/10开始逐渐增大直到振荡消失。最后微调Kp和Kd让小车在受到轻微扰动时能够快速恢复平衡。这里有一个很多人会遇到的坑直立环的Kp方向搞反了。如果小车往一边倒的时候电机往反方向加速小车会瞬间倒下。判断方向的方法很简单用手把小车往一边倾斜如果电机试图把小车推回平衡位置方向就是对的如果电机把小车往倾倒方向推方向就是反的。方向反了的话把Kp取负值即可。另一个坑是MPU6050的安装方向。MPU6050的X轴和Y轴对应小车的俯仰和横滚方向如果安装方向不对直立环的输入就是错的。我一般把MPU6050的X轴对准小车的前进方向这样俯仰角就是小车前后倾斜的角度。安装的时候要注意MPU6050要尽量靠近小车的重心减少振动对测量的影响。4.3 速度环的增量式PID实现与参数整定速度环的作用是让小车在保持直立的同时按照设定的速度行驶。速度环的输入是编码器测得的速度输出是直立环设定值的修正量。增量式PID的公式是Δu Kp*(e(k)-e(k-1)) Kie(k) Kd(e(k)-2*e(k-1)e(k-2))。其中e(k)是当前速度误差e(k-1)是上一次速度误差e(k-2)是上上次速度误差。速度环的调参比直立环简单一些因为速度环的响应速度要求不高。我一般先把Ki设为0Kp从0开始逐渐增大直到小车能够按照设定速度行驶但速度有轻微波动。然后加入KiKi的作用是消除稳态误差让小车能够精确达到设定速度。Ki太大会导致速度超调太小则稳态误差消除不够。Kd在速度环里通常不需要因为速度环的反馈值本身比较平滑加入Kd反而会引入噪声。速度环的采样周期和直立环不同。直立环的采样周期是5ms速度环的采样周期通常是20ms到50ms。因为速度的变化比倾角的变化慢得多速度环的采样周期太长会导致响应迟钝太短则编码器读数噪声会被放大。我一般用20ms也就是50Hz的采样频率。4.4 转向环的串级控制与差速分配转向环通常用串级PID外环是方向角内环是角速度。外环的输入是目标方向角和当前方向角的偏差输出是目标角速度。内环的输入是目标角速度和陀螺仪测得的角速度的偏差输出是左右电机的差速。串级控制的好处是内环可以快速抑制扰动外环可以精确控制方向。差速分配的逻辑是左电机PWM 直立环输出 速度环输出 转向环输出右电机PWM 直立环输出 速度环输出 - 转向环输出。这样当转向环输出为正时左电机加速右电机减速小车向右转转向环输出为负时左电机减速右电机加速小车向左转。转向环的调参顺序是先调内环再调外环。内环的Kp从0开始逐渐增大直到小车能够快速响应角速度变化但不会振荡。然后加入内环Ki消除角速度的稳态误差。外环的Kp从0开始逐渐增大直到小车能够按照设定方向行驶。外环的Ki通常不需要因为方向角的稳态误差可以通过内环消除。5. 调试过程中那些让人抓狂的问题我是这样一个个解决的5.1 电机不转或者只往一个方向转这个问题最常见的原因是TB6612的STBY引脚没有拉高。TB6612的STBY引脚是待机控制低电平时模块不工作电机不转。很多人忘了接这个引脚或者接了但没有拉高。解决方法很简单把STBY接STM32的一个GPIO初始化的时候拉高。另一个原因是方向控制引脚的电平组合不对。TB6612的AIN1和AIN2不能同时为高电平否则电机制动。如果AIN1和AIN2都为低电平电机滑行。正确的组合是AIN1高AIN2低正转或AIN1低AIN2高反转。如果你发现电机只往一个方向转检查一下方向控制引脚的电平是否在切换。还有一个不太常见但很隐蔽的原因是PWM信号的极性。有些STM32的定时器通道默认输出高电平有效有些默认低电平有效。如果极性搞反了PWM占空比越大电机反而越慢。解决方法是检查定时器的OCPolarity配置确保高电平有效。5.2 编码器读数跳动或者不计数编码器读数跳动通常是因为信号噪声。JGB-520的编码器输出是霍尔式的信号边沿不够陡峭容易受到电机换向噪声的干扰。我在编码器A/B相线上各加了一个100nF的电容到地同时在软件里对编码器读数做了滑动平均滤波问题基本解决。如果编码器完全不计数先检查编码器的电源是否正常。用万用表量一下编码器电源引脚的电压如果是0V说明供电有问题。然后检查A/B相信号是否有输出用手慢慢转动电机轴用万用表量A/B相电压正常应该在0V和3.3V之间切换。如果电压不变说明编码器损坏或者接线错误。还有一个容易忽略的问题是STM32的编码器接口配置。如果定时器的编码器模式配置错误比如选成了TI1模式但只接了A相编码器就不会计数。检查CubeMX里的编码器模式配置确保选的是TI1TI2模式并且A/B相分别接到了对应的引脚上。5.3 小车振荡或者往一个方向加速小车振荡通常是因为直立环的Kp太大或者Kd太小。Kp太大会导致小车在平衡位置附近来回振荡Kd太小则振荡衰减太慢。解决方法是减小Kp或者增大Kd。我一般先把Kp减小20%如果振荡消失说明Kp确实太大了如果振荡仍然存在再增大Kd。小车往一个方向加速通常是因为速度环的极性搞反了。速度环的输出应该叠加到直立环的设定值上如果极性反了小车会越走越快直到倒下。判断方法很简单用手推一下小车如果小车往推的方向加速说明速度环极性反了。解决方法是在速度环的输出上乘以-1。还有一个原因是MPU6050的零偏没有校准。MPU6050的陀螺仪有零偏如果不校准积分得到的角度会漂移。我一般在初始化的时候让MPU6050静止采集1000个样本计算平均值作为零偏然后在后续的角度计算中减去这个零偏。5.4 TB6612发热严重甚至烧毁TB6612发热严重通常是因为电流过大或者散热不良。JGB-520的堵转电流可以达到2A以上如果小车在堵转状态下长时间运行TB6612会发热。解决方法是加散热片或者在软件里加入过流保护当电流超过阈值时自动降低PWM占空比。TB6612烧毁通常是因为电源接反或者电机线短路。TB6612的VM和GND接反会瞬间烧毁芯片所以接线的时候一定要仔细检查。电机线短路也会导致TB6612输出端过流烧毁所以在焊接电机线的时候要确保没有短路。还有一个不太常见的原因是PWM频率太低。TB6612的PWM频率低于1kHz时电机电流纹波会很大导致TB6612发热增加。我一般用20kHz这个频率下TB6612的温度在可接受范围内。6. 从能站住到能跑起来几个进阶优化的方向6.1 前馈控制让小车响应更快前馈控制是在PID反馈控制的基础上根据设定值的变化直接给出一个控制量不需要等待误差产生。在平衡小车里前馈可以用在速度环上当设定速度变化时直接给电机一个前馈PWM然后再用PID修正。前馈控制的好处是响应速度快因为不需要等待误差积累。前馈系数的确定方法有两种一种是根据电机的电压-转速特性计算另一种是实验整定。我一般用实验整定的方法先给电机一个固定的PWM测量小车的稳态速度然后计算前馈系数 PWM / 速度。这个系数就是前馈增益当设定速度变化时前馈输出 前馈系数 * 设定速度。6.2 串级PID在直立环上的应用直立环也可以用串级PID外环是角度内环是角速度。外环的输入是目标角度和当前角度的偏差输出是目标角速度。内环的输入是目标角速度和陀螺仪测得的角速度的偏差输出是PWM占空比。串级控制的好处是内环可以快速抑制扰动外环可以精确控制角度。串级直立环的调参顺序是先调内环再调外环。内环的Kp从0开始逐渐增大直到小车能够快速响应角速度变化但不会振荡。然后加入内环Kd抑制角速度的振荡。外环的Kp从0开始逐渐增大直到小车能够保持直立。外环的Kd通常不需要因为内环已经抑制了振荡。6.3 用MATLAB PID Tuner辅助整定参数MATLAB的PID Tuner工具可以根据系统的阶跃响应自动整定PID参数。使用方法很简单先在Simulink里搭建小车的模型包括电机模型、编码器模型和PID控制器然后用PID Tuner工具自动整定参数。整定完成后把参数导出到STM32的代码里。但要注意MATLAB整定出来的参数是基于理想模型的实际系统里会有摩擦、间隙、噪声等非线性因素所以整定出来的参数只能作为初始值还需要在实际系统上微调。我一般用MATLAB整定出来的参数作为起点然后在实际系统上调整Kp和Kd直到小车运行平稳。6.4 串口调试与实时数据可视化串口调试是平衡小车调参的重要工具。我一般用STM32的串口把PID的输入、输出、误差等数据发送到电脑然后用串口示波器软件实时显示。这样可以看到PID的运行状态判断参数是否合适。串口数据的格式我一般用简单的文本格式比如angle, target, pwm\n每行三个数据。串口波特率用115200发送周期用20ms。串口示波器软件我推荐用SerialPlot或者VOFA这两个软件都支持实时显示和数据分析。还有一个技巧是在串口数据里加入时间戳这样可以分析系统的响应时间。时间戳可以用STM32的定时器计数每次发送数据的时候把定时器的值一起发送。这样在电脑端可以画出时间-角度曲线分析系统的动态响应。7. 一些容易被忽略但很关键的细节7.1 电机死区补偿JGB-520电机有死区也就是PWM占空比低于某个阈值时电机不转。这个阈值通常在5%到10%之间。如果不做死区补偿PID输出在死区范围内时电机不响应会导致控制精度下降。死区补偿的方法是在PID输出上叠加一个死区补偿量当PID输出为正时加上正补偿为负时加上负补偿。死区补偿量的大小需要实验确定。我一般从5%开始逐渐增大直到电机在最小PWM下能够转动。补偿量太大会导致电机在零输出附近抖动太小则死区补偿不够。我实测下来JGB-520的死区补偿量在8%左右比较合适。7.2 电池电压监测电池电压下降会影响电机的转速因为PWM占空比相同的情况下电池电压越低电机转速越慢。如果不做电压补偿小车的速度会随着电池放电而下降。电压补偿的方法是在PID输出上乘以一个系数系数 标称电压 / 实际电压。这样当电池电压下降时PID输出会自动增大保持电机转速不变。电池电压监测可以用STM32的ADC来实现。我一般用分压电阻把电池电压降到3.3V以内然后接到ADC引脚上。ADC采样周期用100ms采样后做滑动平均滤波减少噪声。电压补偿系数在代码里实时计算不需要手动调整。7.3 陀螺仪温漂补偿MPU6050的陀螺仪有温漂温度变化时零偏会漂移。如果不做温漂补偿小车的直立环会随着温度变化而漂移。温漂补偿的方法是在MPU6050旁边放一个温度传感器根据温度变化修正陀螺仪零偏。但这个方法需要事先标定温度-零偏曲线比较麻烦。更简单的方法是用互补滤波或者卡尔曼滤波把加速度计的角度和陀螺仪积分角度融合这样可以自动修正陀螺仪的零偏。我一般用互补滤波系数用0.98也就是98%的陀螺仪积分角度加上2%的加速度计角度。这个系数下角度输出既平滑又不会漂移。7.4 电机同步校准两个JGB-520电机的特性不可能完全一致同样的PWM占空比下转速可能有差异。如果不做同步校准小车会往一边偏。同步校准的方法是在小车上电后让两个电机以相同的PWM运行一段时间测量两个编码器的读数计算转速差异然后在代码里对PWM输出做补偿。同步校准的补偿系数需要定期更新因为电机的特性会随着磨损和温度变化而改变。我一般在上电初始化的时候做一次同步校准运行过程中如果发现小车跑偏再手动触发一次校准。8. 最后分享几个我在实际项目中总结的调参口诀直立环调参口诀先Kp后KdKp管响应Kd管振荡。Kp从小往大调调到小车快速响应但不过冲Kd从Kp的1/10开始调调到振荡消失。方向反了取负值MPU6050装正了再调参。速度环调参口诀先Kp后KiKp管响应Ki管稳态。Kp从小往大调调到小车能按设定速度行驶Ki从Kp的1/10开始调调到稳态误差消失。极性反了乘-1编码器读数正了再调参。转向环调参口诀先内环后外环内环管角速度外环管方向角。内环Kp从小往大调调到角速度响应快速外环Kp从小往大调调到方向跟踪准确。差速分配要对称左加右减不能反。这三个口诀是我做了五六台平衡小车之后总结出来的基本上按照这个顺序调参一两个小时就能让小车从站不住到跑起来。当然每台车的机械结构和电机特性都不一样具体参数需要根据实际情况微调。但调参的思路和方法是通用的掌握了这套方法换任何硬件平台都能快速上手。还有一个我踩过的坑值得单独提一下不要一上来就同时调三个环。我第一台车就是三个环一起调结果小车要么往一个方向加速要么剧烈振荡根本找不到问题出在哪里。正确的做法是先调直立环让小车能站住再调速度环让小车能按速度行驶最后调转向环让小车能按方向行驶。每个环调好之后再调下一个这样问题定位起来容易得多。另外调参的时候一定要有耐心。PID调参不是一次就能调好的需要反复尝试和微调。我一般会花半天到一天的时间专门调参期间不断记录参数和对应的现象找到最优参数组合。调参的过程中如果遇到问题先检查硬件连接和传感器数据确认硬件没问题之后再调软件参数。很多时候问题不在PID参数上而在硬件或者传感器上。
