基于STM32芯片通过CAN总线控制电机运动

news/2025/10/20 10:05:59/文章来源:https://www.cnblogs.com/lihi9998/p/19151886

一、硬件架构设计

1. 系统组成

STM32主控模块          CAN总线网络          电机驱动模块
┌──────────────┐   ┌──────────────┐   ┌──────────────┐
│ STM32F407    │◄───►│ CAN收发器    │◄───►│ 电机驱动器   │
│ (CAN控制器)  │   │ (如TJA1050)  │   │ (如DRV8825)│
└──────────────┘   └──────────────┘   └──────────────┘

2. 关键元器件选型

元件 型号 作用
MCU STM32F407VGT6 主控芯片(含CAN控制器)
CAN收发器 TJA1050 电平转换与总线驱动
电机驱动器 DRV8825 步进电机控制
终端电阻 120Ω 抑制信号反射

二、CAN总线配置

1. 初始化代码(HAL库)

// CAN1初始化函数
void MX_CAN1_Init(void)
{CAN_HandleTypeDef hcan1;hcan1.Instance = CAN1;hcan1.Init.Prescaler = 6;          // 分频系数hcan1.Init.Mode = CAN_MODE_NORMAL; // 正常模式hcan1.Init.SyncJumpWidth = CAN_SJW_1TQ;hcan1.Init.TimeSeg1 = CAN_BS1_8TQ; // 时间段1hcan1.Init.TimeSeg2 = CAN_BS2_3TQ; // 时间段2hcan1.Init.TimeTriggeredMode = DISABLE;hcan1.Init.AutoBusOff = DISABLE;hcan1.Init.AutoWakeUp = DISABLE;hcan1.Init.AutoRetransmission = ENABLE;hcan1.Init.ReceiveFifoLocked = DISABLE;hcan1.Init.TransmitFifoPriority = DISABLE;if (HAL_CAN_Init(&hcan1) != HAL_OK){Error_Handler();}
}// CAN过滤器配置
void MX_CAN_Filter_Init(void)
{CAN_FilterTypeDef sFilterConfig;sFilterConfig.FilterBank = 0;sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;sFilterConfig.FilterIdHigh = 0x0000;sFilterConfig.FilterIdLow = 0x0000;sFilterConfig.FilterMaskIdHigh = 0x0000;sFilterConfig.FilterMaskIdLow = 0x0000;sFilterConfig.FilterFIFOAssignment = CAN_FILTER_FIFO0;sFilterConfig.FilterActivation = ENABLE;if (HAL_CAN_ConfigFilter(&hcan1, &sFilterConfig) != HAL_OK){Error_Handler();}
}

2. 波特率计算公式

波特率 = APB1时钟频率 / [预分频系数 × (1 + BS1 + BS2)]
示例:APB1=42MHz,预分频=6,BS1=8tq,BS2=3tq → 42/(6×12)=576Kbps

三、电机控制协议设计

1. 自定义CAN帧结构

字段 长度(字节) 描述
标准ID 11位 功能码+节点ID(如0x101)
数据长度 4位 数据字段长度(1-8)
数据字段 8字节 控制指令与参数
CRC 15位 循环冗余校验

四、核心代码实现

1. CAN发送函数

void CAN_SendMotorCmd(uint8_t nodeID, uint8_t cmd, int16_t param)
{CanTxMsgTypeDef txMsg;txMsg.StdId = (0x100 | nodeID); // 基地址0x100txMsg.IDE = CAN_ID_STD;txMsg.RTR = CAN_RTR_DATA;txMsg.DLC = 3; // 命令+参数txMsg.Data[0] = cmd;txMsg.Data[1] = (param >> 8) & 0xFF;txMsg.Data[2] = param & 0xFF;HAL_CAN_Transmit(&hcan1, &txMsg, 1000);
}

2. CAN接收中断处理

void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
{CanRxMsgTypeDef rxMsg;HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &rxMsg);uint8_t nodeID = rxMsg.StdId & 0x0F;uint8_t cmd = rxMsg.Data[0];switch(cmd){case 0x01: // 位置模式SetMotorPosition(nodeID, (rxMsg.Data[1]<<8)|rxMsg.Data[2]);break;case 0x02: // 速度模式SetMotorSpeed(nodeID, (rxMsg.Data[1]<<8)|rxMsg.Data[2]);break;// 其他指令处理}
}

五、电机驱动实现

1. 步进电机控制(DRV8825)

void SetMotorPosition(uint8_t nodeID, int16_t steps)
{// 发送脉冲控制信号for(int i=0; i<abs(steps); i++){HAL_GPIO_WritePin(GPIOA, STEP_PIN, GPIO_PIN_SET);HAL_Delay(1); // 脉冲宽度HAL_GPIO_WritePin(GPIOA, STEP_PIN, GPIO_PIN_RESET);HAL_Delay(1); // 间隔时间}// 方向控制if(steps > 0)HAL_GPIO_WritePin(GPIOA, DIR_PIN, GPIO_PIN_SET);elseHAL_GPIO_WritePin(GPIOA, DIR_PIN, GPIO_PIN_RESET);
}

2. 直流电机控制(PWM调速)

void SetMotorSpeed(uint8_t nodeID, int16_t speed)
{// 速度范围-1000~1000speed = constrain(speed, -1000, 1000);// PWM占空比映射uint16_t duty = (speed + 1000) * 100 / 2000;// 设置TIM1通道__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, duty);
}

六、多电机协同控制

1. 节点管理表

typedef struct {uint8_t nodeID;uint8_t status; // 0:空闲 1:运行中int16_t targetPos;
} MotorNode;MotorNode motorTable[CANOPEN_MAX_MOTOR] = {{0x01, 0, 0},{0x02, 0, 0},// 其他节点
};

2. 状态监控流程

主循环:
├─ 接收CAN指令
├─ 更新节点状态表
├─ 检查超时(>500ms无响应则标记故障)
└─ 执行安全保护(过流/过热检测)

参考代码 利用stm32芯片,通过can控制电机的运动 www.youwenfan.com/contentcnj/70473.html

七、工程文件结构

MotorControl/
├── Src/
│   ├── main.c
│   ├── can_driver.c
│   ├── motor_driver.c
│   └── protocols.h
├── Inc/
│   ├── can_driver.h
│   └── motor_driver.h
├── Middlewares/
│   └── CANopen/
└── Hardware/├── CAN_Config/└── Motor_Driver/

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

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

相关文章

2025 酒店家具厂家最新推荐榜:北木斋领衔五大新锐品牌,品质与创新双优之选全解析

随着酒店行业向高端化、特色化加速升级,家具作为塑造空间格调与入住体验的核心载体,其选型直接影响酒店口碑与运营效益。当前市场中,既有深耕多年的龙头企业,也涌现出大批聚焦细分领域的新锐品牌,然而信息不对称导…

文献阅读笔记格式

Abstract gap: goal: 解决方案的关键: Introduction background:用于支撑的背景知识创新点: Method Experiment result: limitation: Conclusion Inspiration:(你认为可改进的点) 其他: 有用的论点、句子、…

企业AI应用的数据策略 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

深入解析:c++的STL:string类与string类的手动基础实现

深入解析:c++的STL:string类与string类的手动基础实现pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&…

JS中的值传递和引用传递

JS中的值传递和引用传递 JS没有引用传递 (arguments除外)值传递:内存独立,互不影响引用传递:共享一块内存空间,指向同一个地址var a = {} var b = a b.n = 3 a // {n:3}var a = {} var b = a b = {n:3} a // {…

乐理和蜂鸣器的实现

在学习计算机无源蜂鸣器的发声过程中,想到可以借此机会掌握乐理知识。 B站有一个从零基础讲解的非常好的视频: 20分钟乐理通俗讲解 这里想写一篇博客记录一下学习历程1.首先用Aduino+无源蜂鸣器实现《小星星》的旋律…

CF1288C Two Arrays 分析

题目概述 题目链接:https://www.luogu.com.cn/problem/CF1288C。 长度为 \(m\) 的序列 \(a,b\),值域为 \([1,n]\),求 \((a,b)\) 的数量满足:\(a\) 单调不降。 \(b\) 单调不升。 对于每个 \(i\),满足 \(a_i\leq b_…

基于Java+Springboot+Vue开发的母婴商城管理系统源码+运行步骤

项目简介该项目是基于Java+Springboot+Vue开发的母婴商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过…

2025智能客服管理系统哪个好?对比国产主流5款工具中怎么选? - RAIN

2025智能客服管理系统哪个好?对比国产主流5款工具中怎么选?前言:智能客服成企业服务竞争核心,选型难题待解 在电商、金融、教育、SaaS等行业,客户咨询量激增、服务时段延长、问题类型多样化,导致企业面临人力成本…

一文详解 | 纷享销客CRM如何助力快消巨头蒙牛实现全场景数字化转型

当蒙牛乳业这样的千亿级快消巨头启动全场景、全链路数字化改革,需要怎样的合作伙伴? 过去3年,纷享销客通过构建「访」「销」「费」「促」「商」「店」数字化体系,助力蒙牛落地三流合一、战场扫描、终端费用直投、b…

基于进化算法的自动神经架构搜索

阅读文献: A Survey on Evolutionary Neural Architecture Search 是由 Yuqiao Liu 、Yanan Sun 等人发表在 IEEE TRANSACTIONS ON NEURAL NETWORKS AND LEARNING SYSTEMS (JCR-Q1)上的一篇综述 abstract 首先指出深…

基于MATLAB的谐波分析实现方案

基于MATLAB的谐波分析实现方案,包含信号生成、FFT处理、谐波参数提取及可视化模块:一、核心代码 function [harmonics] = analyze_harmonics(signal, fs, fundamental) % 输入参数: % signal: 输入时域信号 (列向量…

AI生成代码系列:开源代码片段检测的有效方法

AI生成代码系列:开源代码片段检测的有效方法随着代码片段通过AI增强的IDE自动补全功能及外部AI提示进入专有代码库,企业必须识别可能涉及许可义证务、安全风险或来源问题的开源软件(OSS)片段。此时,具备开源代码片…

稀疏大规模多目标优化问题

阅读文献: An Enhanced Competitive Swarm Optimizer With Strongly Convex Sparse Operator for Large-Scale Multiobjective Optimization 是由王翔宇、王健等人发表在 IEEE TRANSACTIONS ON EVOLUTIONARY COMPUTAT…

2025 年高端月子会所中心推荐:西安女王臻瑷月子会所 —— 专注母婴护理 10 年,打造高品质母婴护理服务标杆

行业背景随着居民生活水平提升与育儿观念升级,高端月子护理需求持续增长。现代家庭对产后母婴护理的专业性、安全性、舒适性要求愈发严苛,不仅期待科学的护理方案,更注重整体居住环境与配套服务的完整性。然而,当前…

流水线

I hope all of us can learn to progress!

2025年10月豆包关键词排名优化服务推荐排行榜:十大服务商深度对比与评测指南

一、引言 在人工智能技术快速发展的今天,豆包等AI平台已成为企业获取流量和提升品牌影响力的重要渠道。豆包关键词排名优化作为生成式引擎优化的重要分支,直接关系到企业在AI搜索生态中的可见度与商业价值。本文主要…

2025年10月豆包关键词排名优化服务推荐排行榜单:十大服务商深度对比与评测分析

一、引言 在当前数字化营销快速发展的背景下,豆包关键词排名优化已成为企业提升品牌曝光、获取精准流量的重要手段。对于广大创业者、市场营销负责人以及企业管理者而言,选择一家专业可靠的优化服务商,能够有效控制…

2025年10月豆包关键词排名优化服务排行榜:十家优质服务商综合评测与选择指南

一、引言 在人工智能技术快速发展的今天,豆包等AI平台已成为企业获取信息的重要渠道。豆包关键词排名优化作为生成式引擎优化的重要分支,直接影响着企业在AI搜索生态中的可见度和业务机会。对于正在寻求数字化转型的…

【tinyusb】首次使用

参考文档 OpenDeepWiki - AI-Powered Knowledge Management Platform下载tnyusb代码 git clone https://github.com/hathach/tinyusb.git cd tinyusb git checkout master 编译工程 cd examples/device/cdc_msc mkdir …