STM32多路步进电机控制板

现在有单片机STM32f407IGT6,现在硬件设计上 设计了8路脉冲控制步进电机每路包括一个脉冲、一个使能、一个方向。

软件上使用HAL库,ucosiii操作系统,现在需要设计步进电机的控制功能和通信功能

功能一:可通过CAN通信进行电机控制,命令包括启动指定电机运行、停止指定电机运行,设置指定电机转速(实际是控制脉冲周期)、设置指定电机运行位置(实际是指定脉冲数)、指定电机持续运行,电机位置复位功能,启动电机按某个方向持续运行,启动电机按梯形运行、启动电机按s曲线启动运行。

位置复位功能说明:

有9个限位传感器,3个传感器一组可分配给一路电机用于位置判断,这三个传感器一个是最大位置传感器、一个最小位置传感器、零点位置传感器,零点位置在中间,位置复位,就是先让电机负向运行到最小位置,再正向运行到零点位置,完成复位。

AI润色后的功能需求说明

项目需求详细描述

1. 系统核心概述

  • 主控芯片:STM32F407IGT6
  • 软件框架:基于HAL库与µC/OS-III实时操作系统
  • 控制对象 :8路步进电机驱动器,每路包含 脉冲(PUL)、方向(DIR)、使能(EN) 三个控制信号。
  • 核心交互 :系统通过CAN总线接收上位机或主控节点的指令,解析并执行相应的电机控制任务。

2. 电机基本控制功能

系统需为每一路电机提供以下独立的底层控制能力:

  • 启停控制:根据指令使能或禁用指定电机的驱动器。
  • 方向控制:动态设置电机的旋转方向(正向/反向)。
  • 脉冲生成:以可配置的频率(决定转速)和数量(决定位置)输出精准的脉冲序列。

3. 上层运动模式(通过CAN指令触发)

系统需支持以下高级运动模式,每种模式均可针对指定的一路或多路电机执行:

模式 指令与参数 功能描述
1. 定位运行 电机ID, 目标位置(脉冲数), 运行速度 电机以指定速度直接运行到绝对目标位置后停止。
2. 连续运行 电机ID, 运行方向, 运行速度 电机以指定速度和方向持续运行,直到收到停止指令或触发限位。
3. 梯形曲线运行 电机ID, 目标位置, 最大速度, 加速度, 减速度 电机运动包含加速、匀速、减速过程,实现平滑启停,运行至目标位置。
4. S形曲线运行 电机ID, 目标位置, 最大速度, 加加速度(冲击度) 电机的加速度也是平滑变化的(通常为正弦或多项式曲线),实现更柔和的启停,运行至目标位置。
5. 紧急停止 电机ID 立即停止指定电机的脉冲输出(急停减速或立即停止需明确)。
6. 速度控制 电机ID, 运行速度 动态修改指定电机在当前运行模式下的速度(脉冲频率)。

4. 位置复位与限位管理功能

  • 硬件配置 :系统共有9个限位传感器,可灵活配置 为3组,每组包含:
    • 负限位传感器:定义机械最小位置。
    • 零点传感器:定义机械原点位置(位于负限位和正限位之间)。
    • 正限位传感器:定义机械最大位置。
  • 复位流程(归零) :当收到针对某路电机的"位置复位"指令时,执行以下自动序列
    1. 阶段一:寻找负限位
      • 控制电机向负方向(朝向负限位)运动。
      • 持续检测对应的负限位传感器信号。
      • 一旦触发,立即停止电机。此时电机位于"机械最小位置"。
    2. 阶段二:寻找零点
      • 控制电机向正方向(朝向零点)运动。
      • 持续检测对应的零点传感器信号。
      • 一旦触发,立即停止电机。
      • 系统内部将该电机的位置计数器清零,完成复位。
  • 限位保护 :在任何运动模式下,一旦触发负限位正限位 传感器,系统必须立即安全地停止该电机,并上报状态,以防止机械损坏。

5. CAN通信协议需求

  • 指令集 :需定义一套完整的CAN报文格式(如使用CANopen DS402子协议或自定义协议),至少包含:
    • 命令字:区分不同的功能(启动、停止、设置位置、设置速度、复位等)。
    • 电机ID:指定目标电机(0-7)。
    • 参数区:承载速度、位置、加速度等数据。
    • 应答:系统应能向上位机发送执行状态、错误码(如限位触发、指令错误)、当前位置等反馈信息。
  • 实时性:在µC/OS-III中,CAN中断接收到的指令应能快速唤醒相应的处理任务。

6. 软件设计关键点总结

  1. 任务划分 :建议创建独立的任务,如 CAN通信任务电机管理任务安全监控任务等。
  2. 资源抽象 :为每个电机设计一个控制结构体,包含其当前状态(使能、方向、速度、目标位置、当前位置、限位传感器分配、运动模式等)。
  3. 定时器资源 :STM32F407的高级定时器(TIM1, TIM8)通用定时器(TIM2-TIM5) 非常适合用于生成多路精密的PWM脉冲。需要合理分配8路脉冲对应的定时器通道。
  4. 中断与任务同步 :使用µC/OS-III的信号量、消息队列或事件标志组,在CAN中断、定时器中断(脉冲计数完成、限位触发)与任务之间进行高效同步。
  5. 运动曲线计算:梯形和S形曲线的速度规划(即根据时间计算当前速度脉冲频率)需要在每个控制周期内实时计算,这对CPU有一定要求,需优化算法。

7.通信协议说明

每次通信传输一帧CAN数据(8字节),每一帧上报给主机的数据构成为:第一个字节是上报码。接收主机命令的数据帧第一个字节为命令码。

(1)上报命令 上报电机状态 上报码 0x02

每帧数据8个字节 安排如下 通道数值为

|-------|--------|-------|-------|-------|-------|-------|-------|
| Byte0 | Byte1 | Byte2 | Byte3 | Byte4 | Byte5 | Byte6 | Byte7 |
| 上报码 | 电机是否运行 | 电机状态 | 电机编号 | 电机位置 ||||
| 0x02 | | | | 高字节 | | | 低字节 |

Byte0:上报码0x02

Byte1:一个bit代表一个电机,1运行中,0未运行。

Byte2:一个bit代表一个电机,1收到命令待运行,0没有运行命令。

Byte3:电机编号

Byte4-Byte7:电机当前位置int32类型

(2)主机命令电机复位命令 命令吗0x08

Byte0:命令码0x08

Byte1:电机编号

(3)电机运动命令 DLC3 命令吗0x09

此条暂时不用

(4)紧急停止全部电机 命令码0x0a

(5)运动到指定位置 命令码0x0B

Byte0:命令码0x0B

Byte1:电机编号

Byte2-Byte5:4字节构成一个int32,指定位置(脉冲数)

Byte6:

Byte7:

(6)设置上报数据延时 DLC3 命令码0x0E

(7)设置电机脉冲周期 DLC4 命令码0x28

Byte0:命令码0x28;

Byte1:电机编号;

Byte2、Byte3:组成uint16_t数据,表示脉冲周期us。

(8)连续运行

Byte0:命令码0x29;

Byte1:电机编号;

Byte2: 运行方向。

(9)梯形曲线运行

Byte0:命令码0x2A;

Byte1:电机编号;

Byte2-Byte5:4字节构成一个int32,指定位置(脉冲数)

(10)S形曲线运行

Byte0:命令码0x2B;

Byte1:电机编号;

Byte2-Byte5:4字节构成一个int32,指定位置(脉冲数)

(11)停止指定电机

Byte0:命令码0x2C;

Byte1:电机编号;

(12)上报电机状态 命令码0XFF

Byte0:命令码0XFF;

Byte1:时间间隔ms,当前设计为50ms;

Byte2-Byte5:4字节构成uint32 ,命令次数

收到立刻上报数据的命令后,经过延时时间再上报数据

主机固定周期发送一次刷新数据。命令中包含当前命令的次数,便于下位机计算上传时间间隔。对于一些不重要的数据可增加上传间隔。

相关推荐
叁散4 小时前
实验项目1 RFID 标签实验
单片机·嵌入式硬件
比奇堡派星星8 小时前
MCU 裸机时间片调度系统
单片机·嵌入式硬件
安科瑞刘鸿鹏179 小时前
工业自动化系统中抗晃电保护的协同控制研究
运维·网络·嵌入式硬件·物联网
深圳市方中禾科技11 小时前
LED驱动芯片FZH02,应用开发相关数据技术手册
单片机·嵌入式硬件·led
第二层皮-合肥11 小时前
光耦瞬态响应特性:上升时间与下降时间的测试方法与误差分析
嵌入式硬件
yuanmenghao11 小时前
CAN系列 — (6) CAN FD 带宽、CPU、中断:工程上是如何一起算的?
网络·驱动开发·单片机·mcu·自动驾驶·信息与通信
Arciab14 小时前
51单片机_蜂鸣器
单片机·嵌入式硬件·51单片机
SmartRadio14 小时前
在CH585M代码中如何精细化配置PMU(电源管理单元)和RAM保留
linux·c语言·开发语言·人工智能·单片机·嵌入式硬件·lora
qq_4112624215 小时前
纯图像传感器(只出像素),还是 Himax WiseEye/WE1/WE-I Plus 这类带处理器、能在端侧跑模型并输出“metadata”的模块
人工智能·嵌入式硬件·esp32·四博智联
不脱发的程序猿15 小时前
嵌入式开发中C++内存泄漏的场景与解决办法
单片机·嵌入式硬件·嵌入式