本帖最后由 Moonlight 于 2023-7-13 11:20 编辑
开发平台:EKT043开发板
弹簧振子模拟器 一、作品功能介绍 基于迪文显示屏的C51内核单片机的开发,实现弹簧振子的运动模拟。通过在显示屏上改变振子的固有频率和阻尼,拖动振子改变其初始位置并释放后,单片机自动计算在这个条件下振子位移曲线并显示在屏幕上,同时以动画的形式显示振子的运动过程。当幅值小于一定数值时,运动停止。
二、工作原理 由弹簧振子的物理规律得出其运动的二阶微分方程,采用离散化分析的方法得出公式求解出振子的位移X,即通过前一个时刻的振子的状态可以求解出后一个时刻振子的状态。首先在屏幕上改变振子的固有频率及阻尼,拖动振子赋予其初始位置,并且通过读取系统变量中0X16和0X17的位置获取屏幕状态信息,释放振子后在定时器的中断中根据公式开始计算下一个时刻的位移,在定时器中设定了每20ms更新一次位置信息,即每20ms计算出一个新的位移X。将弹簧振子的位移以曲线的形式显示在屏幕上。
三、设计思路 1、硬件设计 本实验所需模块主要有三部分:计算机、开发板、通讯板,需要将各个模块连接成系统。开发板引出了5路串口,所有IO口,IO口连接编码器开关。在没有外接编码器开关的情况下也可以正常运行本工程。 2、软件设计 首先,了解弹簧振子的运动规律,编写C51代码。接着,根据设置的固有频率、阻尼及时间间隔计算出状态转移矩阵。释放后根据初始位置计算下一时刻振子的位置,并通过曲线显示在屏幕上。每20ms更新一次振子的位置信息计算出新的时刻的X并更新位移曲线,同时每20ms重新绘制一次弹簧,当曲线幅值小于一定数值时,振子停止运动。此时可以再进行下一次的运动仿真。 3、GUI设计 采用DGUS软件对界面进行了简单的设计,使界面简洁美观。采用了两个拖动调节和数据变量显示来改变固有频率及阻尼的值并将其显示在屏幕上。振子采用拖动调节控件来对振子进行拖动。弹簧的绘制采用基本图形显示中画直线的方式来进行绘制,根据每一段直线端点的坐标自动连线绘制。设计了动态曲线显示区域显示振子的位移。 四、工程代码及演示视频 工程文件、工程代码、演示视频打包见附件。
|