APP下载

基于STM32的硬件开发技术图形化模拟平台

2020-07-10王寅文易文淏易宇琦郑子豪

软件 2020年5期
关键词:内环语句小车

王寅文,易文淏,易宇琦,张 辉,郑子豪

(哈尔滨商业大学,黑龙江 哈尔滨 150028)

0 引言

随着世界逐步进入信息化时代,计算机技术已运用在生活的方方面面,而我国更是计算机技术的大国。在这样的时代背景下,让青少年从小接触编程教育就显得尤为重要。正是基于这样的需求,此外通过研究国内外类似产品,例如 SCRACTH、ardublock等,发现了市面上现存的图形编程平台或只局限线上编程,或单单利用了arduino或者树莓派等硬件平台进行开发。类似arduino这样的硬件平台很少用于实际工业以及嵌入式项目的专业开发。为了弥补这一不足,同时使学习过程更加完善,因此本文采用STM32作为硬件平台,使学习者能够更接近实际工程的开发,培养其计算思维。本文使用C++作为编程语言,硬件系统以 STM32作为核心处理器,以Qt作为UI界面的工具架构。

本文通过搭建一个宿主机上运行的图形编程平台,用户可以通过此平台熟悉编程,并且通过软件平台控制两个硬件子平台的运动状态来实际检验自己的编程成果,并且在硬件平台上加入多种外围设备,以提高软件编程的趣味性与多样性。

1 STM硬件开发软件模拟

本文将软件平台分为前台设计与后台设计。前台设计指利用QT软件编程的UI界面,其主要作用是面向使用者展现易于上手的编程界面,通过图形化的编程方式,得到“所见即所得”的编程效果。而后台设计主要指利用C++编程语言实现对STM32的控制,利用相应程序进入STM32的BootLoader,将编写好的程序烧录至芯片中,通过硬件平台完成相应的功能。

1.1 Qt主窗口与Unity坐标变换UI设计比较

本文将主窗口界面划分为三个部分,即画布部件,语句设计部件和工具部件。在画布部件中,分割的子窗口提供出用户想要做的事情,用户根据自己的当时想法选择并进入该事件中,用户点击语句后语句显示在语句设计窗口中并对语句进行排序,不论用户是否拼接正确,都会弹出消息框来提示用户,消息框本文采取以卡通人物或者其他的形式弹出,不同的消息框会出现不同的形式,从而吸引用户的兴趣。若用户拼接成功,在恭喜用户之后,用户可以将程序烧入致硬件平台中,以此来实现相关的功能。否则,会弹出失败的对话框来提醒用户拼接失败,并在下面的消息框中显示出用户拼接错误的地方。

在整个主窗口显示过程中,平台会插入背景动态图,在其他的子窗口本文也会插入相应的背景图,在拼接过程中,每一步都要有相应的背景音乐,并拥有不同的效果音。本文采用类似于闯关的形式设置编程难度,分别不同学习能力的用户。

本文在使用Qt软件进行实际设计中,将各部分类别以及功能进行了详细的划分:

(1)主窗口类

主窗口类的基本元素有菜单栏,状态栏、工具

栏,锚接部件和中心部件。主窗口中可以部署其他子窗口,而本文在主窗口中部署了三个子窗口,分别为画布部件,语句设计部件和工具部件。

图1 Qt界面布局Fig.1 Qt interface layout

(2)工具部件

本文通过在主窗口中添加子窗口并命名为工具部件,主要完成设置鼠标拖拽事件,即用户将要拖拽的代码条框所在区,在此窗口中的程序可以拖拽但不可修改。以及绘制场景,本文会在此子窗口中单独绘制其专属场景。

(3)画布部件

本文在主窗口中添加子窗口并命名为画布部件,主要完成绘制场景,本文会在此子窗口中单独绘制其专属场景;以及功能选择,用户可以在此窗口中选择想要小车实现的功能并再点击后将相关的代码条框在工具部件中显示。

(4)语句设计部件

本文通过在主窗口中添加子窗口并命名为语句设计部件,用以实现设置拖拽事件,用户可以在此界面中用鼠标对程序进行拖拽排序。手动添加代码,用户可以在此界面中补全程序所缺内容或自己敲写代码。

(5)记录行为类

即用户在语句设计中拼接成功的可实现小车功能的完整程序。

使用Qt完成软件前台设计理论框图如图2所示。

此外本文还通过unity实现来软件前台的制作。首先编写坐标变换函数,通过模块对于摄像机的方向来计算被拖动模块在单位向量上的法向量,从而将屏幕坐标转换为世界坐标,再将鼠标的屏幕坐标通过以上函数也转换成世界坐标,获得鼠标点击位置的坐标点,然后赋值给模块。最后计算获取鼠标拖拽后的坐标以及物体与鼠标间的偏移量实现模块的拖动功能。

图2 Qt理论框图Fig.2 Qt theoretical block diagram

通过计算模块间重心的相对距离向量、最小间距与上下高度判断从而改变世界坐标,亦或加入碰撞检测以实现模块联动间的拖动插入调整。将程序指令块以字符串的形式封装在各自的模块里,顺序拼接模块完善程序、实现功能。

通过对Qt以及unity的对比,由于Qt的方便性以及专用性,本文最终选择使用Qt软件进行软件前台的设计。

1.2 软件模拟STM32串口Bootloader烧录

本文将软件后台设计为主要完成对用户的图形模块程序的编译、综合、下载,可以分为以下几步。

1.2.1 模块编译

在本文中,系统使用模块C语言文本映射法,完成图形模块到C语言的转换,主要完成以下几个工作。

(1)确定模块的逻辑位置

将模块分为两个类别,一个是为位于程序主干的非填充类,和位于循环和选择语句中的填充类,每一个填充类对于其中的选择循环语句又属于非填充类,这样语句就有了层层链条的关系,对于同属于一个类别的模块们,使用指针将其串成链表,这样就确定了模块的逻辑顺序。

(2)循环与代码填充

通过循环与选择后的关键字确定循环与选择语句的尾部,填充到尾前即可。

(3)参数修改

用户通过接口为字符串修改参数

(4)逻辑查错

由于已经对代码进行了封装,一定程度上不会存在语法错误,而只有逻辑上的错误。

(5)字符串拼接

同样通过关键字确定每个模块的字符串的尾部,然后根据这个位置按顺序拼接字符串。

图3 模块逻辑位置确定示意图Fig.3 Schematic diagram of module logical position determination

1.2.2 C语言文件综合

用户使用特别定制编译器完成C语言到汇编语言再到hex文件的转换,编译器是专门为STM32单片机设计的,符合STM32的配置习惯。

1.2.3 将HEX转换bin文件并通过串口下载到单片机中

先将Hex文件转化为bin文件,然后根据STM32的 Bootloader协议使用动态库 STMBLLIB.dll与STUARTBLLIB.dll完成下载工作,具体步骤如图4。

图4 文件转换烧录示意图Fig.4 Schematic diagram of file conversion and programing

2 STM硬件开发平台

本文将硬件平台分为两个子平台,一个是智能小车平台,另一个是无人机平台。两个平台的主控制芯片都为STM32。通过前文所述的软件平台将编译好的程序直接烧录其中,通过小车以及无人机的相应动作来验证程序的正确性。

STM32是由ST公司开发的32位微控制器,该芯片内核是由ARM公司推出的全新的基于ARMv7架构的32位Cortex-M3微控制器内核,并由ST公司添加了相应的外围设备。而STM32凭借其产品的多样化、极高的性价比,简单易用的开发方式脱颖而出,在现代嵌入式设计中起着不可替代的作用。

2.1 PWM控制小车以及外围传感器通信

本文使用 STM32F103ZET6作为智能小车的控制芯片,通过添加光电传感器、超声波测距以及电机驱动芯片等外围设备,实现上位机程序在硬件上的运行。使青少年在学习编程中,能够直观地检查所编写的程序逻辑与语法是否有错误,此外,还能通过小车不同的行为模式来激发青少年学习兴趣,达到寓教于乐的作用。

智能小车的运动采用 PWM控制电机驱动芯片L293D,即脉宽调制方式来控制小车的前进与转向。

STM32F103ZET6包含 8个定时器,其中有 2个高级定时器,6个通用定时器;其中一个定时器拥有4路通道,每一路通道可以输出4路占空比不同的 PWM波,这极大的简化了小车的控制。本文利用TIM2定时器,输出4路PWM波,通过选用相应引脚是否开启复用功能以确定小车前进方向;利用差速转向的原理控制小车的左右;同时改变PWM波的占空比来调整小车的运动速度,达到了比较良好的小车运动状态。

图5 输出四路不同占空比的PWM波Fig.5 Output four PWM waves with different duty cycles

同时再利用其它不同的传感器,例如光电传感器,通过对光线的反射而达到避障或巡线的功能;或者使用其它传感器通过直接与 MCU相连或者使用IIC、SPI等协议进行通信,可以使小车完成许多实验与测试,可以让使用者充分发挥主观能动性,从而提高平台编程的多样性与趣味性。

2.2 串行PID解算无人机飞行姿态

本文着重介绍如何实现无人机子平台的飞行姿态解算过程。其他外围设备则可通过IIC,SPI等通信协议进行添加,实现不同的功能。

本文通过STM32读取MPU60506个原始数据,即加速度计测得的三轴的加速度与陀螺仪测得的角速度。通过加速度和角速度都可以得到Pitch和Roll角(加速度不能得到Yaw角)[13],但MPU6050的加速度计和陀螺仪各有优缺点,三轴的加速度值可以直接通过正切运算得到倾角,但是包含待测物运动震动时产生的噪声,使得误差较大;陀螺仪对外界振动影响小,精度高,通过对角速度积分可以得到倾角,但是会随着时间累计,产生的误差越大。因此,不能单独使用MPU6050的加速度计或陀螺仪来得到倾角[13],需要采取姿态融合的方法,尽量减小噪声。常见的姿态融合算法有四元数解算,一阶互补滤波,二阶互补滤波,卡尔曼滤波等。

姿态解算后,得到欧拉角,其对时间求导即得到角速度,然后利用串行PID算法对电机进行PWM控制。

内外环PID(式1)算法如下:

其中,εθ为当前角度误差,θe为期望角度,θn当前角度, Pout为外环PID的P项输出, K pout为外环PID的P项系数, εθ(t )为当前角度误差,Iout为外环PID的I项输出,K iout为外环PID的I项参数,PIDout为外环PID输出。

内环PID(式2):

其中, εω( t )为当前角速度误差, ωn(t )为当前角速度, Pin为内环PID的P项输出, 为内环PID的P项参数, Iin为内环PID的I项输出, K iin为内环PID的I项参数,Din为内环PID的D项输出,K din为内环PID的D项参数,P IDin为内环PID的输出。

图6 串行PID控制方框图Fig.6 Block diagram of serial PID control

3 结语

本文通过研究模块化编程以及建立软件与硬件之间的相互联系,找到了有效的编程烧录方法,通过软件编程的图示化,有效的达到了“所见即所得”的编程目标,同时也与硬件教具相联系,能够较好地支持与辅导青少年的编程学习。但在如何提高平台的编程趣味性以及简化软硬件平台之间的下载与通信有着较大的研究空间。

猜你喜欢

内环语句小车
博物馆文创产品设计的“内环-外循”框架研究
大车拉小车
自制小车来比赛
重点:语句衔接
刘老师想开小车
两轮自平衡小车的设计与实现
经脐两孔法腹腔镜腹股沟疝内环高位结扎加脐外侧襞加强术治疗小儿腹股沟斜疝*(附108例报告)
经脐微型腹腔镜内环高位结扎术联合包皮环套术的临床应用
如何搞定语句衔接题
黄桷湾立交二期工程跨内环桥梁方案