ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

帆板转角控制系统实战:国赛F题从硬件选型到PID调参全复盘

帆板转角控制系统实战:国赛F题从硬件选型到PID调参全复盘 简介2011年全国大学生电子设计竞赛F题帆板控制系统论文面向参加电子设计竞赛的高校学生及电子控制技术学习者。文档以MC9S12XS128为主控芯片围绕直流风扇风速控制实现帆板转角调整完整呈现系统方案论证、帆板受力分析、倾角传感器原理、数字PID电机调速算法以及基于光电编码器与倾角传感器的闭环反馈设计。同时包含电路设计、软件设计和调试手段等工程实践细节适合想进阶自动控制与嵌入式应用开发的读者参考。压缩包仅含1个doc文档文件大小1.31MB内容集中且结构完整便于按章节研读。已有101人学习浏览可用于备赛复盘、课程设计或项目预研。 2011年国赛F题“帆板转角控制系统”在我带过的所有控制类题目里属于那种看着人畜无害、做起来全是坑的典型。题目本身很朴素一个直流风扇吹一块可以在转轴上摆动的帆板通过调节风扇转速让帆板转到指定角度角度用传感器读回来构成一个闭环控制系统。可恰恰是这种“朴素”把不少队伍挡在了国奖门外——机械结构没装好传感器标定不准PID调不出来论文又写成流水账每个环节都在丢分。这篇文章用参赛队员加上后来带队辅导的双重视角把这道题从题目拆解、硬件选型、控制算法到论文成稿完整复盘一遍。正在备战国赛控制题的同学或者想搞明白“一个闭环系统从零开始到底怎么做”的人都可以把这份记录当参考。1. 先拆题F题到底在考什么1.1 题目任务与系统构成F题给出的基础条件就是一套最原始的“风力摆”模型一个转轴支架一块轻质帆板一个12V直流风扇。风扇固定在支架的一头帆板装在转轴上改变风扇电压就改变了风速帆板在风力作用下绕轴转动转过的角度由装在转轴上的角度传感器检测。参赛队伍要做的是在这套裸件上搭建完整的控制系统通过按键输入目标转角系统自动调节风扇风力让帆板转到目标位置并稳定保持同时在显示模块上同时看到设定值和实时值。系统拆开看就是一条标准闭环链路传感器测量、主控计算、功率驱动、风扇执行。每一环看着都不难串在一起就到处都是坑。当年不少组把精力全砸在算法上结果传感器读数本身都有好几度误差算法再漂亮也是白搭。1.2 基本要求与发挥部分的评分逻辑按当年题目给出的阶梯式要求基本部分主要考察“稳态性能”从任意角度开始系统能够快速把帆板带到设定角度误差要压进题目规定的范围并且长时间保持不漂移。发挥部分则考察“动态性能”帆板需要跟随设定的角度曲线运动常见的是正弦波或三角波在帆板上加负载后系统依然要能维持角度这是对鲁棒性的直接考验。我听不少评委私下聊过评分思路这类控制题的分数分配往往不是“功能有没有”而是分层次的能稳定停住拿基本分停得准再拿一部分跟得上曲线、扛得住扰动才是冲国奖的关键。所以备赛重点很清楚先保证静差达标再谈动态跟踪别一上来就搞花哨算法把基本功丢了。2. 系统方案设计与关键选型2.1 整体架构为什么必须闭环这个系统的核心矛盾是风扇风速和帆板角度之间没有可靠的对应关系。同样一个占空比第一次吹是35度第二次可能变到38度风向稍微偏一点、环境气流变一下角度就不一样。如果把系统做成开环——按键设置多少角度就给多少占空比——那只能凭运气没有任何实用价值。所以必须做成闭环把角度传感器实时值读回来和目标值比较得到误差控制器根据误差输出PWM占空比去驱动风扇误差大就使劲吹误差小就减风这就是负反馈。闭环的好处在于它不要求风速和角度一一对应只要传感器读数准、控制器调得好系统就能自动逼近目标值。这也是为什么F题本质上是一道控制理论基础应用题而不是一道风扇驱动题。2.2 核心硬件选型与避坑先列一份当年我们组最终确定的硬件清单和选型理由这里面有几个地方是真正决定成败的。模块选型关键点角度传感器多圈导电塑料电位器WDD35一类便宜、线性度好、只需一路ADC主控STM32F10312位ADC、PWM资源足、调试方便风扇驱动N沟道MOS管如IRF540N互补PWM驱动低导通电阻PWM调速线性好风扇12V直流无刷风扇风量够大电流0.2A左右显示/输入1602LCD 4×4矩阵键盘满足参数设置和状态显示需求供电12V稳压电源 5V/3.3V两路DC-DC电机和主控隔离供电防止风扇反电动势干扰角度传感器这里多说两句。当年可选方案有电位器、增量编码器、MPU6050姿态传感器。电位器的优势是模拟直读接一个ADC通道就能用线性度好价格也便宜缺点是机械磨损、有接触噪声而且转轴不能无限转。编码器精度高但增量式要自己处理方向和计数比赛时间这么紧容易折腾MPU6050免安装但要处理零点漂移和振动干扰融合算法复杂。对F题这种摆动范围小、精度要求又不算变态的场合电位器是最稳的答案。我后来带队伍时也一直推荐能用一块钱解决的可靠性问题不要去赌一块贵的传感器一定好用。机械结构是最容易被低估的扣分点。转轴要顺滑但不能旷量太大否则角度读数会晃帆板重心要尽量靠近转轴不然不同角度下重力矩不一样风扇控制会左右不对称转动范围两端要加限位防止电位器超行程损坏。这些看着都是“手工活”但直接影响后面PID能不能调出来。2.3 风扇非线性的处理思路直流风扇有一个特别坑的特性低占空比下有明显的死区。我们实测过手里那只12V风扇占空比低于12%左右时转子根本不转从12%到30%这段转速上升又特别陡再往上反而趋于平缓。整条“占空比-转速”曲线是严重非线性的。这给PID调试会造成一个现象系统在小误差时PID输出落在死区内风扇不动积分项越积越多等累积到越过死区风扇突然猛转一下角度一下就冲过头接着又进入死区……表现出来就是帆板来回一顿一顿地爬永远稳不下来。处理上最实用的办法是两段式补偿先把风扇的“占空比-角度”开环特性标定出来做成一张表实际控制时给PID的输出叠加上一个死区补偿量让输出平滑跨过非线区。当年我们做了一张32点的标定表效果立竿见影。3. 控制算法F题的核心战场3.1 被控对象的近似模型在写控制代码之前有必要先把被控对象“画出来”。帆板被风吹动的过程粗略看是一个一阶惯性环节风力转换成帆板角速度要克服转动惯量和阻尼可以用 G(s) K / (Ts 1) 近似由于风扇转速响应和气流传播都有延迟还要再串一个 e^(-Ls) 的延迟环节。这个模型不用建得多精确但能帮你想明白两件事时间常数T大说明系统反应慢PID的微分项要适当加强去抵消延迟纯延迟L的存在决定了Kp不能取得过大否则系统必然振荡。我当时把这两个参数粗估出来后调参方向就非常明确了先用纯比例把系统推到临界稳定记下临界增益和振荡周期再用工程经验公式给出PID初值省了无穷无尽的瞎试。3.2 PID结构与工程细节F题的控制律用位置式PID就够了公式很经典u(k) Kp * e(k) Ki * Σe(j)*Ts Kd * (e(k)-e(k-1))/Ts这里的输出u(k)是PWM占空比百分比e(k)是当前角度误差。工程实现时有几个细节直接决定成不成。第一是采样周期。角度采样和控制周期我们取20ms比风扇响应快很多又不会太频繁导致计算抖动PWM频率取20kHz避开可听噪声区间。第二是积分限幅。没有限幅的积分项会在启动阶段疯狂累积导致第一次冲过目标后半天拉不回来一定要把积分项限制在输出范围的10%以内。第三是输出限幅占空比0到100%必须写死防止计算溢出损伤MOS管。第四启动时给一个阶跃式的前馈补偿比如先把占空比一下提到40%让帆板快速接近目标角再交给PID精细调节能显著缩短稳定时间。核心代码逻辑不长写出来大概是这个感觉float pid_process(float target, float current) { float err target - current; integral err * Ts; if (integral INT_LIMIT) integral INT_LIMIT; if (integral -INT_LIMIT) integral -INT_LIMIT; derivative err - last_err; last_err err; float out Kp * err Ki * integral Kd * derivative / Ts; if (out 100.0f) out 100.0f; if (out 0.0f) out 0.0f; return out; }实际控制时把pid_process返回的占空比叠加上死区补偿值再给到定时器的比较寄存器就行。3.3 调参实战记录调参数我没有用玄学用的是“频域思想指导下的时域试凑”。第一步先让PID里只剩PKp从很小开始逐步增加观察角度阶跃响应曲线直到出现等幅振荡记录临界增益和振荡周期第二步按Ziegler-Nichols公式算一组初值再把I放进去压掉静差第三步加D抑制超调最后在整定好的参数附近微调。因为不同队伍机械结构不同参数不能照抄但可以给个量级参考如果误差按“度”算、输出按“占空比百分比”算Kp大概在0.8到1.5Ki在0.03到0.08Kd在1到2。我当时的最终参数大约在这个区间配合死区补偿后从按下启动到稳定在目标角误差正负1度以内2秒左右就能完成。这个过程中最重要的一件事是用串口把设定值、实时角度、PID输出三路数据发到上位机画曲线光盯LCD猜状态效率实在太低了。4. 从调通到成稿F题论文怎么写4.1 设计报告的评分逻辑一个“论文F题.doc”文件其实对应的是竞赛官方要求的设计报告不是学术论文。评委要在很短时间里读完几百份报告你的结构必须清晰到他们可以快速找到得分点。标准结构一般是摘要、方案设计与论证、理论分析与计算、电路与程序设计、测试方案与结果、总结。摘要是最重要的部分200到300字必须把“做了什么、关键指标、亮点”写清楚。方案论证要说清“为什么选这个”而不是只罗列选了什么。理论分析和计算要有公式推导比如PID参数的依据、传感器标定的曲线。程序部分放流程图和核心代码篇幅不用长但要能看出程序逻辑清晰。测试结果用表格和曲线截图说话最后一定要有误差分析。4.2 数据、图表与测试方案怎么呈现另一个高频丢分点是测试数据质量。很多队伍只放一组“最好成绩”的数据评委一看就觉得不完整。正确的做法是设计一组有梯度、可重复的测试设定角取0、15、30、45、60、75、90度每个点测3次记录稳态误差和稳定时间跟踪测试选正弦波和三角波两种波形给跟踪误差的统计值。把原始测试记录整理成表格配上系统框图、程序流程图、实物照片、示波器波形截图整篇报告的说服力一下子就不一样了。4.3 论文中最容易丢分的低级错误我每年评审季都会看到一些硬伤图表没有编号和标题电路图和实物对不上程序参数和测试结果自相矛盾摘要写了一页纸还没进入正题方案论证部分全在抄资料。这些问题单看都不致命但累积起来会让评委产生“这支队伍不严谨”的整体印象在打分时非常吃亏。所以写完报告之前一定要互相找茬让一个没参与调试的队友拿报告对着系统实物逐步核对数据和流程有任何对不上就返工改掉这类错误很蠢但每年都有人犯。5. 问题排查实录与独家心得5.1 帆板抖动、来回扫现象是帆板在目标角附近不停小幅震荡甚至发散成大幅来回摆动。优先检查比例项是否过大这是震荡最直接的原因然后看传感器ADC采样值是否跳动如果有毛刺先做滑动平均滤波再看PID输出最后确认PWM频率是不是太低风扇转速波动会持续激励系统。排查顺序按“软、固、硬”来先软件降增益再看采样最后检查风扇供电和机械松动。5.2 静差压不下去角度离目标总差2到3度怎么调Kp都没用。别急着加Ki先检查传感器标定是不是零点和满量程线性不对导致读回来的“准”其实是假的。把角度传感器转到机械零度处看ADC读数和软件映射值是否对应确认无误后再看积分项是否被限幅限制住了。风扇死区也会制造静差PID输出落在死区里积分再大也推不动这时候要做死区补偿。5.3 角度上不去或失控飞车角度上不去先看机械阻力、帆板位置、风扇距离再查PWM输出限幅是否太小最后确认供电电压是否被拉低。飞车往往是角度传感器接线松动、ADC读数跳变或者PID输出符号搞反了一定要思考“风扇越吹越远”是不是控制方向反了——这种低级错误我们当时也犯过把误差定义成目标减实际还是实际减目标搞反排查了整整一个上午。现象首要排查点次要排查点原因归类小幅震荡Kp过大、PWM频率低ADC噪声、积分饱和控制参数、传感器大幅来回扫积分饱和后冲击死区补偿失效控制参数、非线性静差明显传感器标定积分限幅、风扇死区测量、非线性角度上不去机械阻力、供电PWM限幅太小执行机构飞车失控控制方向反了传感器断线低级错误、接线5.4 最后再分享一点备赛心得带过几届队伍之后我越来越确认一个规律控制类题目本质是“测控一体”的综合工程题算法只是最后一块拼图。传感器标不准机构不顺滑风扇非线性不处理再高级的控制器也救不回来。反过来如果把这些基础工作做扎实一个标准PID就能拿到相当好的分数。另外强烈建议提前做好串口调试上位机和标定工具比赛那四天时间紧张调试工具顺手等于给全队节省至少半天时间。这篇复盘写下来也算是对当年那份《论文F题.doc》的一个交代希望对正在备赛的你有帮助。本文还有配套的精品资源点击获取
返回列表