简介:面向全国大学生电子设计竞赛与嵌入式开发学习场景,为需要实现自平衡和轮腿复合运动控制的团队提供完整工程参考。适合自动化、机器人方向学生及参赛队员研究动态平衡、传感器融合、电机驱动与嵌入式系统综合开发。包内为 STM32 平台工程,共 1311 个文件、约 49.48MB,以 619 个 C 源码、316 个头文件为主,配合汇编启动文件、链接脚本、Keil 工程配置(uvprojx/uvoptx)及 hex/bin 可执行文件,另有 CubeMX 的 ioc 工程与编译中间文件,方便直接打开编译和烧录验证。已有 584 人学习下载。项目内容覆盖硬件原理与元器件清单、IMU 陀螺仪与加速度计的数据融合、PID 等控制算法,以及轮腿协同运动逻辑;还涉及电路原理图、PCB 布局、传感器配置、电机控制与调试思路,适合电赛备战时作为平衡控制、姿态解算和步态规划的参考实现。
1. 电赛轮腿式平衡小车:姿态、电机与闭环控制才是真正的考点
先说一个反直觉的结论:电赛平衡小车这道题,拿分重点从来不在“能不能站起来”,而在“站不稳的时候你知不知道问题出在哪”。很多同学把精力全花在硬件组装和花哨功能上,结果现场答辩时评委一句“你这个抖动为什么消不掉”就直接卡壳。真正的考点分布很集中:姿态解算、电机控制、串级PID整定,这三块占掉了绝大部分分值。这篇就是按“考什么→高频考点→怎么答”给你拆开,中间穿插真题/面试题的答题思路和易错点,适合正在备赛电赛控制题,或者准备嵌入式、机器人方向岗位面试的人直接拿来背和练。
2. 硬件选型与传感器接线:电源域、IIC时序与电机驱动的考点分布
2.1 硬件选型:哪些器件是被反复问到的
轮腿式平衡小车和普通两轮平衡车最大的区别在结构上:轮子小,重心高,机械部分更紧凑。这样一来,硬件的选型就不是“能用就行”,而是直接影响控制难度。电赛和面试里反复出现的硬件考点主要有四个:主控、惯性测量单元(IMU)、电机和驱动、电源方案。
主控部分,最常见的是某款ARM Cortex-M内核的MCU,靠它跑姿态解算和PID控制。这里面试官爱问的问题是“为什么不用更高主频的芯片”或者“你选的这颗芯片够不够用”。答题要点是:平衡车的控制周期一般在5ms到10ms,姿态解算加PID计算在这个周期内的计算量很小,瓶颈不在算力而在传感器数据质量和电机响应速度,所以选型重点是有足够的定时器和中断资源,而不是盲目上高主频。
IMU这块,最经典的方案是MPU6050或者它的升级型号。考点通常集中在“为什么选它”以及“怎么用它的数据”。MPU6050自带加速度计和陀螺仪,还带数字运动处理器DMP,可以硬件输出姿态角,很多参赛队直接用DMP省事。但面试时你如果说“我就是用DMP读角度”,容易暴露你没有真正理解数据融合原理,后面的追问会比较难接。比较稳的回答是:先用DMP快速验证控制逻辑,再自己实现互补滤波或卡尔曼滤波来替代,说明你既懂工程效率也懂算法原理。
电机和驱动方面,轮腿式平衡车一般用带编码器的直流减速电机,驱动芯片用TB6612这类,考点集中在“电机响应够不够快”和“编码器怎么测速”。电机响应速度决定了你速度环的带宽,编码器分辨率决定了你速度环的精度,这两个参数是连在一起问的。电源部分是很多队的翻车重灾区,两节锂电池串联的7.4V供电,驱动部分直接吃电池电压,逻辑部分要稳压,如果你把逻辑供电和电机供电混在一起,电机起步时的电压跌落会直接让单片机复位,这种问题在现场基本没法快速排查。
2.2 真题/面试题:传感器与接线问题怎么答
真题一:为什么轮腿式平衡车要用带编码器的电机,用普通直流电机行不行?
这类题的答题思路是“先给结论,再给边界条件”。先说结论:不行,至少不好。轮腿式平衡车的速度环必须要一个准确的转速反馈,普通直流电机不带编码器,你就只能靠开环控制,而开环控制一个积分型不稳定的对象本身就很困难。再说边界条件:如果只是验证直立环能不能站住,短时间用手扶着调直立环参数,不带编码器也能调,但一旦跑速度环就完全没法做。面试官最想听的是你能说清楚“编码器反馈是速度环的唯一信息来源”这个因果关系。
真题二:MPU6050的IIC接口和电机驱动共用同一个单片机,怎么保证传感器数据不丢?
这题考的是实时性和资源分配。MPU6050要按固定频率读取,一般是100Hz到200Hz,而电机驱动输出是用PWM,占用的资源不同。答题分三步:第一,把读取MPU6050放在定时器中断或高优先级任务里,保证采样周期稳定;第二,IIC通信本身是主从模式,单片机占用总线时不允许被电机驱动的中断打断,用临界区保护或者DMA传输;第三,PWM输出不占用总线时间,两者可以在时间上错开。面试时加上“实际测试发现不保护临界区时偶发IIC超时,加了临界区之后读取稳定”这类真实经历,比背概念更有说服力。
真题三:轮腿式对电机驱动的要求比普通两轮车高在哪?
这题的得分点在于“机械结构变了,控制对象就变了”。轮腿式平衡车的轮子直径更小,同样的角度偏差需要更大的加速度来修正,而电机驱动芯片的峰值电流能力直接决定它的加速度上限。所以答案要落到驱动芯片的持续电流和峰值电流参数上,比如某型号持续电流1.2A,峰值电流3A,峰值电流决定了短时间内的最大力矩输出,选型时一定要留够余量。
2.3 常见方案对比
| 器件 | 常见选择 | 优点 | 坑点 |
|---|---|---|---|
| 主控 | ARM Cortex-M系列 | 外设丰富,资料多 | 中断优先级分配不好容易丢数据 |
| IMU | MPU6050 / 升级型号 | 内置DMP,免去融合算法 | DMP会掩盖你对原理的理解 |
| 电机 | 带编码器直流减速电机 | 反馈精确,控制简单 | 减速比大时速度响应变慢 |
| 驱动 | TB6612一类 | 峰值电流大,逻辑简单 | 发热快,散热贴片不要省 |
| 电源 | 2S锂电池+稳压 | 功率够,重量轻 | 逻辑电和电机电必须分开 |
3. 姿态解算:MPU6050数据流、滤波选型与欧拉角换算的采分点
3.1 从原始数据到姿态角:加速度计和陀螺仪各自的坑
姿态解算是平衡小车的“地基”,地基建歪了,后面PID怎么调都白搭。这部分考点首先集中在“为什么不能直接读某个传感器当角度”上。
加速度计测角度的原理是测量重力分量,通过反正切算出俯仰角。它的问题是动态性能差,因为小车加速或减速的时候,水平方向的加速度会混进“重力分量”里,导致角度读数出现偏移。陀螺仪测的是角速度,积分可以得到角度,它的好处是瞬态响应快,但问题是积分会漂移,陀螺仪零偏哪怕只有0.1度每秒,积分一分钟也会飘出6度,而平衡小车站几秒钟就已经受不了了。
这就在考场上构成了一对矛盾:加速度计低频准、高频不准,陀螺仪高频准、低频会漂。所以考点就是怎么把这两者的优势合起来。面试官问“你为什么不直接用加速度计的角度”,实际上是想听你说清楚这对频率特性。
处理原始数据还有一个前置步骤:标定。MPU6050出厂虽然有校准,但焊接和安装之后零偏会变,所以要在上电后静止采样几百个点,算出加速度计和陀螺仪的零偏,在代码里减掉。很多队跳过这一步直接跑,结果就是小车静止时角度不为零,直立环一直在输出一个恒定的修正力矩,表现为向一个方向缓慢倒过去。
3.2 滤波算法:互补滤波与卡尔曼滤波的考点分布
姿态解算的滤波方案是两个都考过的高频考点。互补滤波在电赛里出现频率更高,因为它简单、稳定、调参容易。它的思路是把加速度计的角度经过低通滤波,把陀螺仪积分得到的角度经过高通滤波,两者相加,本质上是一个权重分配。互补滤波只有一两个系数要调,适合比赛时间紧的情况。
卡尔曼滤波考的是原理而不是实现。面试时被问到“你用的卡尔曼滤波,能说说核心思想吗”,你要能说出:它是在已知系统的状态方程和观测方程的前提下,用一个预测-更新的迭代过程,把两个传感器的误差协方差考虑进去,得到最优估计。如果你看着卡尔曼滤波的代码但说不清预测和更新两步各在干什么,面试官基本就能判断你是抄的。
答题策略上有个经验:如果现场答辩问的是“你这个姿态角怎么来的”,先讲互补滤波的思路,然后补一句“我也实现了卡尔曼滤波做对比,在轮腿式这种小幅摆动场景下,两者角度输出差别不大,互补滤波的响应更快,所以最终用了互补滤波”。这句话既展示了原理掌握程度,又展示了工程选型能力。
3.3 真题/面试题:姿态角问题怎么答
真题四:陀螺仪有温漂,你怎么处理?
不要直接说“做标定”就结束。得分回答分三层:第一层,上电静止时采零偏,这是静态校准;第二层,运行过程中温度变化导致的缓慢漂移,靠互补滤波或卡尔曼滤波里对加速度计的信任权重来抑制;第三层,如果漂移仍然明显,检查是否因为传感器靠近电机导致发热,或者电路板散热影响传感器,这时要通过结构设计把传感器和发热源隔开。这三层从软件到硬件全覆盖,面试官才觉得你是真的调过。
真题五:加速度计数据抖动很大,角度也跟着抖,怎么办?
这题的坑在于很多人第一反应是“加大低通滤波强度”。这个回答不能算错,但不够完整。正确思路是从源头到后处理逐级排查:先看机械固定是否牢固,传感器是不是随着小车振动共振;再看采样时序是否稳定,是不是每次中断间隔不均匀导致数据跳动;最后才是加大滤波强度。三个层级在面试里答出来,和你只回答一个“加滤波”拉开差距的关键在于,你展示了排查链路的能力。
代码示例:互补滤波的核心实现
// 互补滤波,角度由陀螺仪积分和加速度计计算值融合而成 // dt: 采样周期(秒) a: 滤波系数(0.90~0.98之间) float angle_filter(float gyro_rate, float acc_angle, float dt, float a) { // 陀螺仪积分:上一次的角度加上本次角速度乘以时间 float gyro_angle = g_angle + gyro_rate * dt; // 融合:陀螺仪为主,加速度计用于校正漂移 g_angle = a * gyro_angle + (1.0f - a) * acc_angle; return g_angle; }这段代码的逻辑是:每次中断里读一次陀螺仪角速度和加速度计角度,a越接近1,说明越信任陀螺仪,抗动态干扰能力强,但校正漂移的能力弱;a越小,说明越信任加速度计,动态时角度会跟着加速度抖动。调这个系数的经验是:上车调试时先设0.95,如果发现小车在静止时有缓慢漂移,就往下调到0.92左右;如果发现角度噪声大,先检查机械振动而不是急着降低a。
4. 易错失分点:五个考场上常见的翻车现场与正确答案
4.1 电源域混用的失分点
错在哪:逻辑电路和电机驱动共用一个电源,电机一启动单片机就复位。
为什么错:直流减速电机启动瞬间的电流可以达到持续电流的数倍,电池内阻和导线电阻上产生大的压降,稳压芯片的输出被拉低到单片机复位电压以下。小车在倒向一侧时电机需要全力反转,恰好是最需要控制的瞬间,结果单片机复位,小车直接倒地。
怎么答对:先承认这是电源设计问题,然后给出正确做法:电机驱动直接从电池取电,逻辑电源经稳压芯片单独供电,两个电源域的地在单点汇合。另外在电机驱动输出端并联大容量电容吸收尖峰,在逻辑电源输入端也加一个100uF储能电容,保证瞬间压降不跌破复位阈值。面试答题时加上一句“我们当时是在电机全速换向的时候用示波器抓电源纹波才定位到这个问题”,这是很加分的工程实践表述。
4.2 陀螺仪零偏不标的失分点
错在哪:上电直接读姿态角开环看角度,发现小车静止时角度缓慢变化,还以为是滤波没调好。
为什么错:忽略了传感器零偏的基础问题。加速度计和陀螺仪在焊接受力、温度变化后,零偏和出厂标定值不一致。陀螺仪零偏每秒钟0.5度,积分一分钟就偏30度,比滤波滤镜带来的误差大几个数量级。
怎么答对:正确的启动顺序是固定的——上电后先静止采样200个点,分别求平均,得到加速度计三轴和陀螺仪三轴的偏移量,然后在校准后的基础上再读角度。完成这一步后,才能判断滤波有没有问题。现场答辩时,这个流程可以作为“软件初始化流程”的其中一项讲给评委听。
4.3 电机方向不统一的失分点
错在哪:左右轮一正一反,速度环反馈是负反馈但实际变成正反馈,小车一上电直接倒转到底。
为什么错:编码器的方向判定和PWM方向配置有一个“逻辑相等”的关系,左右电机在机械上对称安装,但在电气上需要反接或软件里取反。如果只测单个电机觉得方向对,装上车左右轮反馈方向就错了,速度环会变成正反馈,转速越控制越大。
怎么答对:在写速度环之前,先做开环方向测试,逐个电机给定正向PWM,确认轮子转向和编码器计数方向,在代码里用一个DIR_SIGN宏定义记录每个电机的方向,后续所有控制量都乘这个符号。这是一个非常朴素但极其有效的检查,很多队伍调不出来就是栽在这一步。
4.4 直立环P参数过大导致高频振荡的失分点
错在哪:小车站不起来,于是一直加大P,结果小车开始剧烈抖动,声音刺耳。
为什么错:直立环的本质是一个比例控制器,P太小时力矩不足以抵抗重力,P太大时系统阻尼不足,机械共振被激发出来。轮腿式轮子小,结构刚度高,共振频率比普通两轮车更高,更容易出现高频啸叫。
怎么答对:矛盾在P加大和系统共振之间需要折中。正确做法是:在机械上提高刚度,加固定支架减少结构形变;在软件上加入速度阻尼,也就是微分项D,用D来抑制振荡,从而允许你用一个更大的P来提高抗倒能力。调参口诀是“P负责把车拉回来,D负责别让它来回晃”,这两句能准确说出来,评委就满意了。
4.5 现场演示时滤波参数没适配的失分点
错在哪:在调试间跑得好好的,到演示场地一放下去就开始抖,或者站不住。
为什么错:不同场地的地面摩擦系数不同。调试间的瓷砖地面和演示场地的地毯或木板地面,对轮子提供的摩擦力差异很大,摩擦变小后同样的速度环参数会产生更大的打滑,轮腿式平衡车对这种差异尤其敏感。
怎么答对:现场演示前留出至少十分钟做场地适配,先空转电机确认动力,再放一个短暂的直立测试,如果明显发虚,优先调速度环的比例系数而不是直立环。这个过程要在答辩时说出来,因为评委知道场地差异是真实存在的,你的应对思路就是工程能力的体现。
5. 串级PID控制的三个环路:直立环、速度环、转向环的高频考题与参数整定方法
5.1 控制结构:环与环之间的逻辑关系
轮腿式平衡车的控制结构,考点高度集中在“为什么用串级而不是单环”。这里要记住一个核心逻辑:直立环输出的是电机加速度或力矩,速度环输出的是期望倾角,两环是串联关系而不是并列关系。
速度环在最外圈,它把速度误差映射成一个期望角度。比如设定速度是0,车往前滑,速度环输出一个朝反方向倾斜的角度,让车“向后仰一点”,从而减速。直立环在内圈,它把这个期望角度和当前角度的误差映射成电机PWM输出。所以直立环相当于执行者,速度环相当于决策者,这个关系搞反了,车就一定站不住。
转向环相对独立,它把航向角误差映射成左右轮的差速,加到直立环输出的基础上。轮腿式因为轮距窄,航向扰动很敏感,所以转向环一般用PD或PI控制,先把转向角速度反馈加上,先抑制快速晃动,再加积分消除稳态偏航。
代码示例:三环串级控制的主体框架
// 串级控制框架,外层环输出作为内层环的期望输入 void control_loop(void) { // 采样周期: 5ms, 先用编码器计算当前速度 float speed_now = read_speed(); float angle_now = read_angle(); float gyro_rate = read_gyro(); // 第一层:速度环(外环),输出期望角度 float angle_target = speed_PID(speed_set, speed_now, dt); // 第二层:直立环(内环),输入角度误差,输出基础PWM float angle_error = angle_target - angle_now; float pwm_pitch = upright_PD(angle_error, gyro_rate, dt); // 第三层:转向环,独立计算差速量 float pwm_yaw = turn_PID(yaw_target, yaw_now, dt); // 最终输出:左右轮PWM是直立环输出加减转向差速 motor_left = pwm_pitch + pwm_yaw; motor_right = pwm_pitch - pwm_yaw; }这段代码体现了串级控制的顺序:先算速度环得到期望角度,再用期望角度去算直立环输出,最后叠加转向。如果你在竞赛报告中画结构框图,按这个顺序画就不会出偏差。注意速度环的输出限幅一定要给,一般限制在±3度以内,如果速度误差很大瞬间给一个10度的倾角期望,直立环会强行拉车造成大幅摇摆。
5.2 参数整定顺序与常见问题
整定顺序是固定的:先直立环,再速度环,最后转向环。每一步都有一个标志性的调试目标。
直立环的调试目标是“车能站住,手推一下能恢复”。这个阶段只加P和D,P从小往大加,D跟着P同步加大。合适的P会让车抗倒能力强,D能抑制来回振荡。如果车呈低频来回晃,是D不够;如果高频微颤,是P偏大或机械共振。两者区分记住一句话:低频看D,高频看P。
速度环的调试目标是“车放平推出去的位移不超过一掌,且不来回走动”。速度环一般先用P,加上之后如果发现有稳态往返运动,再给I。I不要给太大,因为积分饱和会导致车速出现周期性起伏。常见问题是在设speed_set = 0时,速度环输出一个恒定角度,导致车向一侧倾斜——这是速度环反馈方向接反了,而不是参数问题。
转向环的调试目标是“直线走五米不跑偏”。先加转向角速度的D项来稳定航向,再加P项回正。轮腿式车身窄,转向环容易出现高频摆动,如果P太大会让车走S形,需要降低P提高D。另外左右电机减速比不一致、轮胎直径微差都会导致恒定的偏航,这时转向环的积分项可以兜底,但积分项太强会在原地转向时有突跳,要配合限幅。
参数整定常见现象表:
| 现象 | 原因 | 调整方向 |
|---|---|---|
| 低频来回摇晃 | 直立环D不足 | 加大D |
| 高频细颤并啸叫 | 直立环P偏大或机械共振 | 降低P,检查结构刚度 |
| 往一个方向匀速倒 | 传感器零偏未校准 | 重新做静态标定 |
| 放地上前后跑不停 | 速度环反馈方向反 | 检查编码器方向 |
| 走直线呈S形 | 转向环P过大 | 降低转向P,加大转向D |
5.3 真题/面试题:PID考法
真题六:为什么平衡车必须用PD控制直立环,只用P会怎么样?
这题的考点是理解系统特性。轮腿式平衡车本质是一个倒立摆模型,它没有自平衡能力,位置误差的微分项是一个天然的速度阻尼。只用P相当于一个人只按位置误差用力,手伸过去了但没有随时感知速度并反向制动,系统一直在误差附近振荡。D项等价于阻尼力,它通过对角速度的反馈,让系统在接近目标时逐步减速,避免过冲。回答时加上“轮腿式结构刚度高,振荡频率高,D的作用比两轮大轮子更重要”,这是贴近项目的加分句。
真题七:速度环为什么输出的是角度期望而不是直接输出PWM?
面试官想听的是你对串级控制本质的理解。直接输出PWM等于让速度环竞争同一个执行机构,两个环路同时控制电机,会发生“打架”:速度误差大了,速度环让电机猛转,直立环又要维持角度,最后系统失稳。让速度环输出期望角度,意味着速度误差只改变平衡点的姿态,而角度约束始终由直立环负责,这样就实现了两个目标的解耦。这个“解耦”这个词说出来,面试官就知道你学过控制理论。
真题八:你调PID参数用了多少时间?调不出来的时候怎么定位问题?
这是非常高频的现场追问。诚实回答:从搭好框架到车能站稳,快的队伍一个晚上,但如果机械和传感器有问题可能卡一周。卡住时按顺序排查:先看角度数据是否平滑,再看电机响应是否线性,然后看转向是否正常,最后才怀疑PID参数本身。千万别一调不出来就动参数,更别把三个环的参数同时改,一次只动一个环的一个参数,这个纪律本身就是得分点。
6. 决赛答辩的三种问法:从“颤得厉害”到“过冲严重”怎么答
6.1 评委问“你这个车颤得厉害,是什么原因?”
不要急着说“我再调小点P就行”。评委在等你答系统性的判断:先确认是否机械共振,再检查传感器采样是否稳定,再看D是否足够。把排查过程讲出来,最后补一句“实际测试中把滤波系数从0.95降到0.9并加大D之后,高频抖动明显收敛”,这种带数据的回答最有说服力。
6.2 评委问“参数是理论算出来的还是试出来的?”
这题不存在标准答案,但有个很好的回答角度:理论计算给初值,实测调优给终值。先简化为刚体倒立摆模型,算一个P的估算范围作为起步值,然后上车实测调优,记录每次参数对应的现象,用现象反推下一步的调整方向。这样既不是纯玄学试参数,也不是只会背公式,评委最想听的是这套“理论给初值、实验做收敛”的组合。
6.3 评委问“你这个方案的局限在哪?”
有些同学怕暴露缺点就不敢说,其实这道题是加分题。不回避地讲清楚三个局限:轮腿式轮径小对地面摩擦敏感,地毯上参数要微调;单一IMU方案在长时间运行后会受温漂影响;控制周期固定为5ms,速度快后模型参数会变化,没有做自适应。每提一个局限就带一句你准备怎么解决,评委听完会觉得你是真的在思考。
从那以后我每次调平衡车,都强制自己先记录电压、采样周期和波形再动参数,凡是没记录就改参数的行为一律禁止。因为调参翻车的次数多了,你会发现绝大多数问题不是靠“拧参数”能救回来的,而是前面某一步埋下的隐患。先落实硬件,再标定传感器,然后按顺序整定三环,最后才谈优化——这套流程帮我在答辩现场少踩了无数坑,希望帮到你。
本文还有配套的精品资源,点击获取