完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
硬件准备
最近要用STM32控制一个三轴伺服系统,在网上找了半天资料,最终基于安富莱的一个MODBUS例程写好了程序。
下面我就直接贴设计文档了,希望各位耗子尾汁。 文档里把串口2和串口3搞反了,应该是串口2与电机通讯,串口3与上位机通迅,我大意了啊。 基于STM32的伺服电机控制程序 软件架构 主控芯片采用STM32F407ZGT6,该伺服电机控制程序基于TODA电机经销商华创商城提供的模板程序进行编写,开发环境采用Keil v5,采用的MODBUS通讯协议参照“GB/Z 19582.1-2004 基于Modbus协议的工业自动化网络规范-第一部分”与“TSDA-C12B低压伺服用户手册”进行编写实现,程序包括主程序与中断共两部分,软件架构如图1所示: 该程序整体实现的功能包含以下几点:
主程序流程图如图2所示,STM32上电后进行硬件初始化,包括GPIO口初始化,定时器初始化,串口初始化,电机上电初始化。硬件配置成功后循环执行:上位机通讯串口轮询,串口1消息队列轮询,IO端口扫描。 中断设计 程序共开启了三个中断,分别为串口2接收中断,串口3接收中断,systick定时器中断。 串口2中断用于接收上位机发送的控制帧,每当接收到完整的一帧时,则产生接收到新帧信号,并进行校验与数据分析,具体流程如图3所示。 串口3中断用于与电机驱动器进行MODBUS协议通信,每当向驱动器发送一帧03,06或10指令帧时,会接收到对应帧的响应信号,每当接收到完整一帧时,则对数据进行校验与分析,具体流程如图4所示。 systick定时器基础中断间隔为1ms,并从中分频产生出10ms间隔,与全局运行时间等计时操作。 UART通信及数据解析 当程序接收到上位机的一帧新数据帧时,即对该数据帧进行解析,具体帧格式参照“上位机控制机器协议帧_新”进行定义: (1) 0x02_配置数据帧:对灯板的一号灯位置坐标,灯间距,灯个数等进行配置。 (2) 0x03_走位数据帧:控制机器标定头移动到X轴与Y轴对应标号的灯位上方。 (3) 0x04_Z轴下移帧:控制机器标定头Z轴下移。 (4) 0x05_状态设置帧:设置机器三轴为锁定或释放状态。 (5) 0x06_移动控制帧:控制机器三轴分别移动到相应的位置。 (6) 0x07_位置信息请求帧:读取机器三轴当前所处的位置。 (7) 0x08_状态信息请求帧:读取机器当前三轴状态为释放或锁定。 (8) 0x09_回零帧:机器三轴执行回零操作。 当程序接收到上位机发送的控制帧并执行完相应动作后,会给上位机发送一帧响应帧,在通常情况下为“EF/GOOD!!!/GH”,若发生错误则会返回“EF/ERROR!!!/GH”,对于特定的信息请求帧会返回特定的帧。 RS485通讯及数据解析 程序通过串口3与板载UART转RS485通信芯片来与电机驱动器进行数据通信。根据“GB/Z 19582.1-2004 基于Modbus协议的工业自动化网络规范-第一部分”对于MODBUS通信协议的规范定义与“TSDA-C12B低压伺服用户手册”中的电机寄存器配置表,可以通过以下帧进行控制: (1) 0x03_读寄存器帧:可以读取单个寄存器或多个连续寄存器的值并返回读取结果。 (2) 0x06_写单个寄存器帧:可以对单个寄存器进行写操作并返回操作结果。 (3) 0x10_写多个寄存器帧:可以对多个连续的寄存器进行写操作并返回操作结果。 在每次向驱动器发送配置帧后,驱动器均会返回一帧数据帧,用于指示该帧是否执行成功或返回读取的数据,因此需要通过串口3的接收中断接收返回帧。当接受到一帧新的返回数据,对返回帧进行解析,并对相应的数据进行处理。 电机控制模式实现 电机的控制模式为由上位机做主机,STM32做从机,由上位机发送控制信号给STM32,并由STM32做主机,电机驱动器做从机,由STM32发送控制信号给电机驱动器。在STM32中完成对上位机指令的解析与电机驱动器的控制,并接收电机驱动器的返回帧与向上位机发送返回帧。 由于三轴电机均为串接在RS485总线上,整体框架如图5所示: IO口监控 这边本来可以用外部中断的,但是发生了奇怪的信号干扰问题,就改成这种扫描按键式的检测了程序通过对IO端口进行扫描来判断各外部信号是否被置位。外部信号包括如下: (1) X/Y/Z轴上限:指示各轴移动距离的上限,若触发则停机。 (2) X/Y/Z轴下限:指示各轴移动距离的下限,若触发则停机。 (3) X/Y/Z轴零点:指示各轴外部零点位置,在归零动作时使用。 (4) X/Y/Z轴到位信号:指示各轴是否运行到给定位置,可通过软件设置误差范围。 每过30ms在systick中断计时器中会置位扫描信号,在主程序中进行IO端口扫描,对各个端口的扫描过程略有不同,但大体可以归结为为如图6所示: 程序说明 (1) 工程文件结构 软件工程名为“通过485串口控制伺服电机_V4”,在工程文件目录“Project/MDK-ARM(uV4)/project.uvprojx”的工程文件,使用Keil V5打开,工程文件结构如图7所示。主程序和主要控制逻辑都存放在User文件夹下,其中main.c存放主程序与IO端口扫描,modbus_host.c存放与上位机通讯以及控制电机的主要逻辑。BSP文件夹存放板载硬件的初始化与中断处理文件,其中bsp_timer.c存放与定时器相关的部分,bsp_uart_fifo.c存放与串口相关的部分,bsp.c存放对各文档函数的集总调用,bsp_user_lib.c存放程序用到的工具函数。bsp_msg.c存放消息打印相关函数。 |
|
|
|
只有小组成员才能发言,加入小组>>
2431 浏览 0 评论
9083 浏览 4 评论
36748 浏览 19 评论
5021 浏览 0 评论
24707 浏览 34 评论
1513浏览 2评论
1731浏览 1评论
2172浏览 1评论
1539浏览 0评论
510浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 00:59 , Processed in 1.290523 second(s), Total 75, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号