一、设计背景和目标分析
1、设计背景
风洞是研究气流对物体影响的关键工具,其历史可追溯到19世纪。风洞实验通过模拟各种气流条件,广泛应用于航空航天、汽车制造、建筑工程等领域,以优化设计、提高性能和安全性。然而,传统风洞通常是大型且昂贵的设备,仅适用于专业实验室和大型科研机构。随着科技的发展,教育和科研对小型、低成本风洞系统的需求逐渐增加,特别是在高校教学和小型实验室中。
这促使人们开始探索简易风洞系统的设计,利用嵌入式技术,实现小型化、低成本和高精度的风洞实验平台。嵌入式技术的飞速发展为简易风洞控制系统的实现提供了可能。单片机(MCU)作为嵌入式系统的核心,具有体积小、成本低、功耗低和高度集成等特点,广泛应用于各种控制系统中。通过利用MCU,可以构建一个高效的风洞控制系统,实现对气流和小球位置的精确控制。
2、设计目标
本设计的主要目标是构建一个简易风洞控制系统,使小球能够在风洞中稳定地悬浮和移动,并满足特定的控制要求。具体设计目标如下:
基本要求:
(1)小球从圆管底部启动,在5秒内上升到BC段,并能够稳定悬浮在此段至少5秒。
(2)在外界干扰(使用宽度为风机直径三分之一的纸板遮挡风机进风)情况下,小球仍能稳定在BC段。
(3)能通过键盘输入设定小球的高度位置(相对于C点的坐标),启动后小球稳定在设定高度3秒以上,波动不超过±1cm。
(4)小球从圆管底部启动,5秒内上升到圆管顶部A端,并在此位置稳定维持5秒以上。
进阶要求:
(1)实时监测并显示小球的高度位置,以及小球在指定位置维持的时间。
(2)复杂运动控制:小球从底部启动,在30秒内完成复杂的上下运动,包括在AB段和CD段各维持3-5秒,并最终冲出圆管。
二、设计方案论述
整体方案设计分为四个部分,分别是电源部分、检测部分、控制部分和机械结构部分。
1、电源部分
(1)电机供电:由于选用的风机的额定电压为12V,所以可以选择3s锂电池进行供电,但是装置本身不需要移动,所以最终选择使用非移动电源,通过PD诱骗芯片获取12V直流电源为风机供电。
PD诱骗芯片选用的是CH224K,根据芯片手册可以画出它的外围电路,电路图和PCB如下:
(2)单片机系统供电:单片机系统需要5V供电,因此需要设计降压模块。降压芯片选择是TPS54331,它是DC-DC降压芯片,可以满足需求,其电路设计如下图:
2、检测部分
预备方案有两种,一是使用K210,使用色块捕捉,通过建立模型,将色块位置变换后的数据发送给控制芯片,但经过试验后发现效果并不好,识别效果和精度都不算优秀。最终我们选择了另一种方案,使用STM32控制VL530L0x激光测距模块,将测得距离经过变换后发送至控制部分。
图1、测量任务代码框架
测试任务在定时器中断中进行,每100ms测量一次。每次测量后,先对数据进行滑动均值滤波,然后通过串口将滤波后的数据发送至控制部分,同时将数据显示到OLED屏幕上。
每次测量时会点亮板载led,用来观测程序是否正常进行。
VL530L0x有四种测量模式,默认模式能够满足需求,因此使用的是默认模式。
在测试例程的过程中,测量是放在main-while循环中进行的,测量的频率很低,后来发现最耗费时间的是模式配置,通过修改测量函数,让每次未修改测量模式时不再配置模式,提升了测量速度。
而main-while循环中进行的是OLED显示任务。OLED使用的是wouoUI框架,相比于u8g2能以更少的内存显示更有动态的画面和进行更具任务性的操作,同时封装程度更高,移植操作也更加方便。本设计中使用OLED以数字和波形显示小球位置,并且对波形显示进行了优化,使波形更加连贯和平滑。
3、控制部分
控制部分使用的是MSPM0L1306核心板,同时外接了OLED显示屏,按键以及蜂鸣器。
OLED同样使用的wouoUI框架,按键通过发送msg控制OLED完成菜单的显示。在UI框架中,不同界面会执行相应的回调函数来进行任务。
按键、串口以及位置状态控制均使用状态机思想。
对于按键,每10ms检测一次按键状态,初始状态为KEY_UP,当检测到按下时,状态转为KEY_CONFIRM;在KEY_CONFIRM状态下,再次检测到按下时,状态转为KEY_DOWN;若检测到未按下,则跳回KEY_UP,以此来完成消抖;在KEY_DOWN状态下,再通过变量cnt的累加来完成按下时间的记录,当检测到未按下时,按键状态转为KEY_RELEASE;在KEY_RELEASE状态下,根据cnt来返回短按或是长按指令,清零后再跳回KEY_UP。
图2、串口通信状态机流程
串口通信使用的是自定协议,使用状态机判断接收。数据通过验证后,会进行计算来得到小球的实际位置,然后再进行PID计算更新驱动风机的PWM占空比。小球的位置控制使用的是位置式PID算法,每更新一次目标位置(100ms周期),就会重新计算PWM_VAL,稳定小球在目标高度。
图3、控制任务流程
控制部分会一直接收并更新小球位置,小球的位置状态机在定时器中进行(100ms周期),当没有任务进行时,目标高度被设定在最低点,风机以最低转速运行;当有任务进行时,会根据小球实际位置和目标位置判断并更新任务状态,同时根据小球状态以及持续时间,蜂鸣器会以不同频率鸣叫。
4、机械结构部分
按照需求,我使用0.8mm亚克力板卷成一只透明外壳的直筒,可供小球顺利穿梭,电机通过纳米胶和塑料板粘到外壁上,再在对边固定激光测距模块,使模块大致在直筒中央。最后使用塑料薄膜完成电机和直筒之间的气密性连接。整个测距部分固定在直筒外侧,方便进行观测,并且使其和控制部分孤立开。
三、设计过程简述
在程序框架确定之后,需要解决的几个问题:
第一个是VL530L0x测得数据和实际位置的变换,同时在控制部分中,输入的目标位置对应的测得数据的转换。首先,通过手动固定小球位置,记录其在各个高度时的测量值与标定值,建立EXCEL表格,作图并求得对应函数,就完成了测得数据和实际位置的相互变换。
表1、测量距离转换为实际距离
表2、实际距离转换为测量距离
第二是PID参数的整定。通过实验,测得pwm_val等于1360左右时小球刚好离地,此时测距示数为52,在pwm_val等于1530左右时到达最顶端,测距示数为479,因此,
经过不断尝试后,确定了
在这样的PID参数下,能取得比较好的控制效果。
四、设计成果展示和优化分析
1、硬件展示
电源部分(降压模块和pd诱骗模块)
检测部分(stm32c8t6核心板和vl53l0x激光测距模块)
控制部分(msp430m0l1306套件)
硬件整体照片
2、控制效果展示
图4、Target_height = 15时的响应曲线
图5、Target_height = 20的响应曲线
图6、Target_height = 25的响应曲线
图7、Target_height = 30的响应曲线
上图为不同输入下的响应曲线,可以看到波形都非常的不错,但是很明显的是,目标位置越低(Target _height的值是相对于直管顶端的距离,因此越大,目标位置相对于地面就越低),超调量越大,这是因为积分限幅比较大,此时可以通过增大 Kp,减小积分限幅减小超调,但是实际效果不理想。这可能是因为用风力去“托起”小球的响应可能太滞后了,当 Kp较大时,会很容易出现震荡,目前的参数已经是比较不错的参数。
同时,还可以使用串级PID,增加一个对风扇转速的闭环控制,接口均已经写好,但是由于参数调整太复杂,并没有继续完善,是本设计的一个遗憾。
效果展示:
https://www.bilibili.com/video/BV1uw4m1i7Bt/
参考资料:
【1】https://www.wch.cn/products/CH224.html
USB PD受电协议芯片 CH224 数据手册 - 南京沁恒微电子股份有限公司 (wch.cn)
【2】https://www.ti.com.cn/product/cn/TPS54331