采用 STM32H750 实现电机控制节点维护设备设计

发布者:Shuxiang最新更新时间:2024-09-20 来源: elecfans关键字:维护设备 手机看文章 扫描二维码
随时随地手机看文章

一、项目介绍

参加STM32论坛的STM32H750B-DK评测活动,利用提供的开发板做一个前期验证项目。验证项目是做一个手持的电机运动节点维护设备,方便携带到现场对电机进行维护,这里暂且称为PAD。(实物演示视频见本文上方作品展示)PAD通过UART与电机控制节点连接通讯(如下图所示),当检测到设备接入,PAD获取其设备信息状态,包括固件版本、PCB版本、运行日志等。通过PAD还可以控制电机做一些简单的运动测试,配置电机的运动参数,如加速度、速度、电流等。由于时间有限,目前仅实现上述功能。

wKgZomUDz--AB_2GAAEmSVZC3Mc602.png

二、开发板STM32H750B-DK

开发板资源丰富,本项目比较关注的资源情况:

Arm® Cortex®-M7 内核(带双精度浮点单元),400MHz主频

4.3英寸RGB LCD,电容屏

外扩2 x 512Mbit Flash

扩128 Mbit SDRAM

UART接口

持Chrom-ART图形加速

三、设计工具

STM32CubeMX

STM32CubeIDE 1.9.0

TouchGFX Designer V4.20

wKgaomUDz_GAW7nhAAE2U2xEVl0319.png

项目中用到的TouchGFX资源

(1)控件(Widget)

Box

Button

Image

Slider

Static Graph

Swipe Container

Text Area

Texture Mapper

(2)实现UI动效使用到的TouchGFX内置的交互动作(Interactions Action)

Call new virtual function

Change screen

Move Widget

Fade Widget

Wait for

四、界面设计

不会UI设计的电子工程师不是好厨师,所以这一次亲自操刀设计,整体设计风格采用我喜欢的“毛玻璃效果”。TouchGFX Designer的模拟器非常实用,大大提高了调试效率,以下图片均来自模拟器的截图。实际上,模拟器的显示效果与直接目视比较接近,视频拍出来的效果比实际差了不少,屏幕颜色不对,还有条纹。。。截图只能看静态效果,动态效果请大家观看文章上方视频演示。目前实现了5个界面:开机、连接、功能选择、信息显示、电机控制。

4.1 开机动画

wKgZomUDz_KADZ7zAABoXYQIfsA960.png

4.2 连接界面

wKgaomUDz_OAFkHkAAEvFrI2cW8083.png

4.3 功能选择界面

wKgZomUDz_WALgZSAAGzd3XyZOM740.png

4.4信息显示界面

wKgaomUDz_aAJKQiAAJD0fc0aco402.pngwKgaomUDz_iABv2LAAIZKZvqYgg413.png

wKgZomUDz_mASf0rAAIlypdLxH8870.png

wKgaomUDz_uAQhqbAAIImB1c3iE244.png

4.5电机控制界面

wKgZomUDz_yABjYoAAIbKiSUFb0489.png

wKgZomUDz_2AJLC8AAIYwMK63FI955.png

wKgaomUDz_-AfC-yAAIdnjhp7Nc360.png

wKgaomUD0ACAEbSGAAIcXTVsqDQ674.png

五、硬件交互

使用TouchGFX的MVP框架实现GUI与硬件的双向交互。MVP的全称为Model-View-Presenter,Model提供数据,View负责显示,Controller/Presenter负责逻辑的处理。在本项目中主要是检测用户在触摸屏上的操作,转换成相应的UART命令发送至外部电机控制板;当外部电机控制板的状态发生变化时,也会主动发送数据到开发板,此时GUI负责刷新界面显示的相关内容。MVP框架应该是TouchGFX中不易掌握的部分,UI怎么和硬件交互?这个是根本,每个项目都会涉及到。这里以本项目中的UART为例说明一下,如何通过操作屏幕上的按钮来控制UART发送数据。

wKgZomUD0AKARFNfAABa9CX-8Ds965.png

以上述界面截图中的STOP按钮为例。在TouchGFX Designer中,我们给Screen1添加STOP按钮,命名为con_stop(很多资料中介绍了这些基本操作,这里不再累述),我们要实现通过电击此按钮向UART发送数据。在界面右侧的Interactions中添加con_stop按钮的点击事件。如图上所示,触发条件为按钮点击(序号1);触发源选择为con_stop按钮(序号2);触发执行的动作为调用一个虚函数,虚函数的名称我们设定为con_stop_clicked(序号3)。然后按下F4执行Generate Code生成代码。TouchGFX Designer会自动生成这个函数的定义,在STM32cubeIDE中查看Screen1VeiwBase.hpp文件,可以看到此虚函数的声明:

virtual void con_stop_clicked() { }

(1)手动在Screen1View.hpp文件中给Screen1View类添加此虚函数:

virtual void con_stop_clicked();

手动在Screen1View.cpp中添加此虚函数的实现部分:


voidScreen1lView::con_stop_clicked()
{
presenter->con_stop_clicked();
}


上面这个函数调用了presenter中的con_stop_clicked()函数(函数名可以自己定),实际上这个函数我们还没有实现,接下来给presenter添加这个函数。

(2)手动在Screen1Persenter.hpp中,给Screen1Persenter类中添加函数con_stop_clicked:

virtual void con_stop_clicked();

手动在Screen1Persenter.cpp中添加这个函的实现:


voidScreen1Presenter::con_stop_clicked()
{
model->con_stop_clicked();
}


(3)上面这个函数调用了model中的函数con_stop_clicked(这个函数名也可以自己定),好吧实际上这个函数我们也还没实现,接下来继续。

手动在model.hpp文件中给Model类添加这个函数:

void con_stop_clicked();

手动在model.cpp中添加上面函数的实现部分。


voidModel::con_stop_clicked()
{
uart_send_cmd_stop();
}


uart_send_cmd_stop()函数上就是发送UART数据的部分了,通常情况下是在uart.c中实现的,内容类似下面这个。

HAL_UART_Transmit( huart1, (const uint8_t*) str, len, 1000);

在model.cpp中我们把uart_send_cmd_stop()这个函数作为外部函数引入:


extern'C'
{
externvoiduart_send_cmd_stop();
}
#endif


实际上这里偷懒了。项目中使用了FreeRTOS,有一个Uart_Task任务,负责UART的数据收发处理。在多任务的情况下,多个任务涉及同一个硬件应该确保互斥访问。所以这里应该使用信号量,改变信号量的状态来通知Uart_Task任务实际发送数据到UART。

一波操作下来, View ---> Presenter ---> Model ---> UART,千山万水有点麻烦,不过MVP的优点还是很多的,想要了解更多大家可以问问百度。

六、总结

之前一直用LVGL,做过一些项目,也算是比较熟悉了。最近半年才开始使用 TouchGFX。一番体验下来不得不说,在 STM32上做 GUI 应用 TouchGFX 确实很有优势,毕竟是 ST 亲儿子,先天优势,生态全、控件多,实现各种炫酷效果不在话下。最方便的是几乎不需要怎么优化,不用操心什么 DMA2D、LDTC……,底层ST都帮你搞好了,跑起来效果就已经非常流畅。ST 新出的 NeoChrom GPU 看介绍更牛X,有机会到要试试到底有多牛。


关键字:维护设备 引用地址:采用 STM32H750 实现电机控制节点维护设备设计

上一篇:STM32通过命令行编译和下载keil和IAR工程的方法
下一篇:STM32CubeMx配置USART1增加打印功能

推荐阅读最新更新时间:2024-11-08 11:59

基于STM32H750的RTC自动唤醒
STM32 H750 的 实时时钟 是一个独立的 BCD 定时器 /计数器,且带了日历功能,它提供一个日历 时钟 、两个可 编程 闹钟中断,以及一个具有中断功能的周期性可编程唤醒标志。 此外RTC 还有自动唤醒单元,RTC还可以补偿闰年闰月等等,还有备份区域(BKP)写保护,这些这里不细说了。 RTC 的简化框图 时钟和分频 STM32H750 的 RTC 时钟源(RTCCLK)通过时钟控制器,可以从 LSE、LSI、HSE 时钟三选一,如图所示,有两个预分频器RTC_PRER ck_spre 的时钟可由如下计算公式计算: Fck_spre = Frtcclk/ 图中,ck_apre 也可作为 RTC 亚秒递减计数器(
[单片机]
基于<font color='red'>STM32H750</font>的RTC自动唤醒
移动机器人Loomo Go进一步提升了设备维护管理的效率
近年来,商务行业在快速崛起,从本地的网上零售到跨境电商、新零售等,未来将催生一个前所未有的巨大市场。而物流配送作为电商的辅助产业,其需求在大幅的增长。在此背景下,传统落后的人力模式成为了物流业快速发展的一个障碍,物流商正在寻找更高效的业务模式。 目前,机器换人是提升物流行业的一个绝佳方式,从货物分拣、搬运出库、运输和快递上门都可以自动化,而物流机器人将会成为时代的风口,目前资本和科技企业都在高度关注。最近,赛格威集团(Segway-Ninebot)的全资子公司赛格威机器人(Segway Robocs)推出了全新的自动送货机器人Loomo Go,一款能够突破多种复杂地型,识别手势指令的智能机器人。 赛格威机器人成立于201
[机器人]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved