新手向:使用STM32通过RS485通信接口控制步进电机

新手向:使用STM32通过RS485通信接口控制步进电机

准备工作

本文使用的STM32芯片是STM32F407ZGTx,使用的电机是57步进电机,驱动器是用的是时代超群的RS485总线一体化步进电机驱动器(42 型:ZD-M42P-485)。使用到的其他设备有:MOXA盒(串口调试),ST-LINK/V2(下程序),另外电源、电源线以及其他电子设备等忽略不计。

使用到的软件有:Keil uVision5,STM32CubeMX,SSCOM v5.10a(串口调试助手),M42P-S-Too(封装好的直接发串口数据控制电机的软件)

硬件调试

先放一个硬件接口图

在这里插入图片描述

最开始的时候,对板子还不太熟悉,我们想先确认一下电机的运动状态,以及驱动器的串口指令等等。因此,采用计算机直接发送串口指令到MOXA盒,再将串口数据传入RS485驱动器,最后再驱动电机。

计算机直接发送串口指令可以使用M42P-S-Too(封装好的直接发串口数据控制电机的软件),直接控制电机。并且软件底部会有对应的串口的指令。

在这里插入图片描述

RS485驱动器电气结构图:
在这里插入图片描述

RS485串口通讯的相关原理可以参考以下链接:

终于讲透了,史上最详细的RS485串口通讯!-CSDN博客

【正点原子STM32】RS485串行通信标准(串口基础协议 和 MODBUS协议、总线连接、通信电路、通信波形图、RS485相关HAL库驱动、RS485配置步骤、)_stm32 rs485-CSDN博客

通过以上方法,可以让电机初步转起来。

软件调试

这里讲一个关键的点。在面对不同的STM32的芯片的时候,在我经过了两天的尝试之后发现,建立工程最好的办法就是借助STM32CubeMX。如果是自己按照以前正点原子的教程自己来添加文件夹一步步设置的话,面对不同的库(正点原子的是标准库,这里使用的是HAL库)不同的芯片,很容易出现其他问题。当然STM32CubeMX生成的工程文档也是基于HAL库来的。

在这里插入图片描述

设置好需要用的端口,通信接口,引脚之后,点击右上角GENERATE CODE,即可直接生成工程文件。
在这里插入图片描述

这里的ioc文件就是CubeMX的工程,下次可以直接从这里打开。

点击MDK-ARM文件夹,里面的.uvprojx格式的文件,就是Keil所需的工程文件。

在这里插入图片描述

打开Keil,在main函数中直接可以开始编写程序,CubeMX生成的工程文档使用起来会比较方便。

这里给一个新建工程文档的教程参考:

如何使用STM32CubeMX快速配置工程【简单入门】_哔哩哔哩_bilibili

我在调试电机的时候,先将要传入RS485的控制电机的数据传入RS422的端口,这样可以通过MOXA盒,用串口助手来验证我的通信。

// 电机控制指令数组
const uint8_t resetCmd[] = {0x01, 0x06, 0x07, 0xD0, 0x00, 0x01, 0x48, 0x87};  // 复位指令
const uint8_t forwardCmd[] = {0x01, 0x10, 0x07, 0xD4, 0x00, 0x02, 0x04, 0x00, 0x00, 0x03, 0xE8, 0xD9, 0x8E};  // 正转1000步
const uint8_t reverseCmd[] = {0x01, 0x10, 0x07, 0xD6, 0x00, 0x02, 0x04, 0x00, 0x00, 0x03, 0xE8, 0x58, 0x57};  // 反转1000步void timer_1Hz_callback(void *p_arg)  // 电机控制任务
{OS_ERR err;p_arg = p_arg;static uint8_t initFlag = 0;  // 初始化标志static uint8_t direction = 0;  // 电机方向:0=正转, 1=反转while(1) {OSTimeDly(4000, OS_OPT_TIME_PERIODIC, &err);  // 4秒延时if(initFlag == 0) {// 首次执行:发送复位指令HAL_UART_Transmit(&huart1, (uint8_t*)resetCmd, sizeof(resetCmd), 100);initFlag = 1;direction = 0;continue;  // 跳过本次循环剩余部分}if(direction == 0) {// 正转指令HAL_UART_Transmit(&huart1, (uint8_t*)forwardCmd, sizeof(forwardCmd), 100);OSTimeDly(5000, OS_OPT_TIME_DLY, &err);  // 延时5秒[5](@ref)HAL_UART_Transmit(&huart1, (uint8_t*)resetCmd, sizeof(resetCmd), 100);direction = 1;  // 下次反转} else {// 反转指令HAL_UART_Transmit(&huart1, (uint8_t*)reverseCmd, sizeof(reverseCmd), 100);OSTimeDly(5000, OS_OPT_TIME_DLY, &err);  // 延时5秒[5](@ref)HAL_UART_Transmit(&huart1, (uint8_t*)resetCmd, sizeof(resetCmd), 100);direction = 0;  // 下次正转}HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_9);  // 翻转LED1}}

串口助手SSCOM v5.10a中会收到这个以下代码:

在这里插入图片描述

然后将该部分代码改写之后,从RS485通信接口输出即可。但是需要注意,RS485通信跟RS422通信不同,RS485需要通过频繁的切发送/接收来完成通信。

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_SET);  // 485切发送模式/*xxxxx(这里补充你要发送的代码)*/HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_RESET);  // 485切接收模式

结语

本文的需求是控制步进电机的运动,来控制吊舱的转动,是一个角动量守恒的一个科普展演。需求很简单,但由于博主研究方向并不是嵌入式软件,所以不太熟悉,仅限于新手向参考。欢迎跟各位多多交流!

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/94029.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/94029.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式笔记_行为型_命令模式

1.命令模式介绍命令模式(Command Pattern)是一种行为设计模式,它将请求或操作封装为对象,使得可以用不同的请求对客户端进行参数化。命令模式的核心思想是将方法调用、请求或操作封装到一个独立的命令对象中,从而使得客…

详解MySQL中的多表查询:多表查询分类讲解、七种JOIN操作的实现

精选专栏链接 🔗 MySQL技术笔记专栏Redis技术笔记专栏大模型搭建专栏Python学习笔记专栏深度学习算法专栏 欢迎订阅,点赞+关注,每日精进1%,与百万开发者共攀技术珠峰 更多内容持续更新中!希望能给大家带来…

vue3+elemeent-plus, el-tooltip的样式修改不生效

修改后的样式&#xff0c;直接贴图&#xff0c;经过删除出现悬浮1、在书写代码的时候切记effect“light”&#xff0c;如果你需要的是深色的样式:disabled"!multiple" 是否禁用<el-tooltip effect"light" placement"top" content"请先选…

网页作品惊艳亮相!这个浪浪山小妖怪网站太治愈了!

大家好呀&#xff01;今天要给大家分享一个超级治愈的网页作品——浪浪山小妖怪主题网站&#xff01;这个纯原生开发的项目不仅颜值在线&#xff0c;功能也很能打哦&#xff5e;至于灵感来源的话&#xff0c;要从一部动画说起。最近迷上了治愈系动画&#xff0c;就想做一个温暖…

搭建最新--若依分布式spring cloudv3.6.6 前后端分离项目--步骤与记录常见的坑

首先 什么拉取代码&#xff0c;安装数据库&#xff0c;安装redis&#xff0c;安装jdk这些我就不说了 导入数据库 &#xff1a;数据库是分库表的 &#xff0c;不要建错了 【一定要注意&#xff0c;不然nacos读取不到配置文件】这个是给nacos用的这个是给项目配置或项目用的2. 服…

分布式唯一 ID 生成方案

在复杂分布式系统中&#xff0c;往往需要对大量的数据和消息进行唯一标识。如在美团点评的金融、支付、餐饮、酒店、猫眼电影等产品的系统中&#xff0c;数据日渐增长&#xff0c;对数据分库分表后需要有一个唯一 ID 来标识一条数据或消息&#xff0c;数据库的自增 ID 显然不能…

飞算JavaAI赋能高吞吐服务器模拟:从0到百万级QPS的“流量洪峰”征服之旅

引言&#xff1a;当“流量洪峰”来袭&#xff0c;如何用低代码驯服高并发&#xff1f; 在数字化时代&#xff0c;从电商平台的“双11”大促到社交网络的突发热点事件&#xff0c;再到金融系统的实时交易高峰&#xff0c;服务器时刻面临着**高吞吐量&#xff08;High Throughput…

C#数据访问帮助类

一.中文注释using System; using System.Data; using System.Xml; using System.Data.SqlClient; using System.Collections;namespace Microsoft.ApplicationBlocks.Data.Ch {/// <summary>/// SqlServer数据访问帮助类/// </summary>public sealed class SqlHelp…

B站 韩顺平 笔记 (Day 21)

目录 1&#xff08;面向对象高级部分练习题&#xff09; 1.1&#xff08;题1&#xff09; 1.2&#xff08;题2&#xff09; 1.3&#xff08;题3&#xff09; Vehicles接口类&#xff1a; Horse类&#xff1a; Boat类&#xff1a; Plane类&#xff1a; VehiclesFactory…

Linux(十四)——进程管理和计划任务管理

文章目录前言一、程序与进程的关系1.1 程序与进程的定义1.2 父进程与子进程二、查看进程信息2.1 ps 命令&#xff08;重点&#xff09;2.2 动态查看进程信息top命令&#xff08;重点&#xff09;2.3 pgrep命令查询进程信息2.4 pstree命令以树形结构列出进程信息三、进程的启动方…

太阳光模拟器在无人机老化测试中的应用

在无人机技术飞速发展的当下&#xff0c;其户外作业环境复杂多变&#xff0c;长期暴露在阳光照射下&#xff0c;部件老化问题日益凸显&#xff0c;严重影响无人机的性能与寿命。紫创测控Luminbox专注于太阳光模拟器技术创新与精密光学测试系统开发&#xff0c;其涵盖的 LED、卤…

网络原理-TCP_IP

1.UDP&#xff08;即用户数据报协议&#xff09;UDP是一种无连接的传输层协议&#xff0c;提供简单的、不可靠的数据传输服务。它不保证数据包的顺序、可靠性或重复性&#xff0c;但具有低延迟和高效率的特点。UDP协议段格式16位UDP⻓度,表⽰整个数据报(UDP⾸部UDP数据)的最⼤⻓…

GitHub Actions YAML命令使用指南

version: 2 updates:- package-ecosystem: "github-actions"directory: "/"schedule:interval: "weekly"这段代码是 Dependabot 的配置文件&#xff08;通常放在 .github/dependabot.yml 中&#xff09;&#xff0c;它的作用是 自动化管理 GitHu…

决策树算法学习总结

一、经典决策树算法原理 &#xff08;一&#xff09;ID3 算法 核心思想&#xff1a;以 “信息增益” 作为划分属性的选择标准&#xff0c;通过最大化信息增益来提升数据集的 “纯度”。 关键概念 —— 信息增益&#xff1a;指某个属性带来的 “熵减”&#xff08;即纯度提升量&…

内网安全——出网协议端口探测

在实战中难免会遇到各种各样的情况&#xff0c;其中对于目标主机是否出网这是一个十分值得收集的信息&#xff0c;因为完全不出网你就获取不到主机了 端口 Linux 系统 对于 Linux 系统&#xff0c;探测其允许出网的端口&#xff0c;这里使用的是 Linux 的自带命令&#xff0c;所…

C#WPF实战出真汁13--【营业查询】

1、营业查询介绍本模块是最后一个模块&#xff0c;该板块需要的功能有&#xff1a;营业数据列表&#xff0c;查询数据&#xff0c;导出数据&#xff0c;数据统计。2、UI设计布局TabControl 是 WPF 中用于创建多页标签式界面的控件&#xff0c;常用于组织多个子内容区域。每个子…

基于 Java 和 MySQL 的精品课程网站

基于 Java 和 MySQL 的精品课程网站设计与实现一、 毕业设计&#xff08;论文&#xff09;任务书摘要&#xff1a;近年来&#xff0c;教育信息化发展十分迅猛&#xff0c;人们的教育观念、教育手段、学习方法、学习渠道等等都发生了重大的变化。知识性人才也已经日益成为了一个…

全球首款 8K 全景无人机影翎 A1 发布解读:航拍进入“先飞行后取景”时代

全球首款 8K 全景无人机影翎 A1 发布解读&#xff1a;航拍进入“先飞行后取景”时代 特别说明&#xff1a;本文所有图片素材来源于影翎官网 影翎官方介绍称&#xff1a;“全球首款”是指截至 2025 年&#xff0c;A1 是首台全面整合的全景无人机&#xff1a;无需外挂全景相机配件…

androidstudio内存大小配置

help->Edit Custom Vm option-Xmx8096m或者其他数值 改成-Xmx10240m然后设置里面的内存大小也要修改一下

vue3和elementPlus中的el-dropdown-menu中的背景样式修改

1. 效果展示2. 代码展示在el-dropdown-menu下加载类名,class"my-dropdown-menu"<el-dropdown-menu class"my-dropdown-menu"><el-dropdown-item :command"{ action: upgrade, data }">升级</el-dropdown-item><el-dropdown…