CANOpen DS402伺服电机控制项目总结

article/2025/9/16 19:50:43

公司的电机控制要统一到CANOpen上面来,协议栈用的CanFestival,配合RTThread进行控制。

要控制伺服电机,最先搞明白的就是控制字6040和状态字6041。一共使用过三个厂家的伺服电机,控制字都是一样的,但是状态字各家有自己的处理,有一点小差别。如下是其中一家的文档。

 有些厂家把状态字的bit9在CANOpen控制的时候是置1的,认为CANOpen就是远程控制,而有些厂家则无此处理。如果按照状态字单个bit的解释,貌似每家的都没什么问题。所以如果按照上图中先判断状态字,然后再发送控制字控制电机进入使能模式的话就要注意这些差别了。

下面是伺服电机的控制模式:

#define NO_MODE					0x00
#define PP_MODE					0x01		// Profile position mode
#define VL_MODE					0x02		// Velocity mode
#define PV_MODE					0x03        // Profile velocity mode
#define TQ_MODE					0x04        // Torque profile mode
#define HM_MODE					0x06        // Homing mode
#define IP_MODE					0x07        // Interpolated position mode
#define CSP_MODE				0x08        // Cyclic synchronous position mode
#define CSV_MODE				0x09        // Cyclic synchronous velocity mode
#define CST_MODE				0x0A		// Cyclic synchronous torque mode	

厂家一般是不会全部实现的,我们项目中用到了PP_MODE,VL_MODE和TQ_MODE。

PP_MODE的控制是最复杂的,除了要给定位置和速度,还要控制控制字中的bit4和bit5才能更新指令。

/** 设置目标位置和速度
*/
motor_err_t Motor_Set_TargetPos(uint8_t nodeId,int32_t pos,uint32_t vel)
{CHECK_ID(nodeId);CHECK_STATUS(nodeId);	if(canopenMotors[nodeId - 1].modesOfOperation != PP_MODE){return MODEERR;}canopenMotors[nodeId - 1].targetPos = pos;canopenMotors[nodeId - 1].profileVel = vel;sendOnePDOevent(motor_od,(nodeId - 1)*4 + 1);rt_thread_delay(1);canopenMotors[nodeId - 1].controlWord = 0x2F;		// 清零 new_set_point bitsendOnePDOevent(motor_od,(nodeId -1)*4);rt_thread_delay(2);canopenMotors[nodeId - 1].controlWord = 0x3F;		// 设置 new_set_point bitsendOnePDOevent(motor_od,(nodeId -1)*4);return NOERR;
}

上面的控制方式是周期性的发位置指令给伺服,旧的指令还未到位的时候新指令已经下发,则伺服会立即更新指令,不会等到上一条指令执行完,两条指令中间也就不会有停顿。0x2F和0x3F的发送顺序不影响指令的执行,但是中间最好有延时,否则伺服可能更新不了位置。

速度模式和位置模式相对比较简单,直接发送指令控制就行。

/** 设置目标速度
*/
motor_err_t Motor_Set_TargetVel(uint8_t nodeId,int32_t  vel)
{CHECK_ID(nodeId);CHECK_STATUS(nodeId);if(canopenMotors[nodeId - 1].modesOfOperation != PV_MODE){return MODEERR;}canopenMotors[nodeId - 1].targetVel = vel;sendOnePDOevent(motor_od,(nodeId - 1)*4 + 1);return NOERR;
}
/** 设置目标力矩
*/
motor_err_t Motor_Set_TargetTorque(uint8_t nodeId,int16_t torque)
{CHECK_ID(nodeId);CHECK_STATUS(nodeId);if(canopenMotors[nodeId - 1].modesOfOperation != TQ_MODE){return MODEERR;}canopenMotors[nodeId - 1].targetTorque  = torque;sendOnePDOevent(motor_od,(nodeId - 1)*4 + 1);return NOERR;}

对于相对编码器而言,上电之后编码器位置被定义为0,逆时针旋转增大,顺时针旋转减小,数据类型是int32类型。那么对于一直超同一个方向旋转的应用来说,数据早晚会溢出。那么我们希望有一个指令,可以让伺服把记录的编码器值清零,下面就是通过原点回零模式的一种方法。

 此方式并不真正执行回零动作,只是把当前位置记为0。


http://chatgpt.dhexx.cn/article/1e4hrT2w.shtml

相关文章

STM32微控制器综合实训11 伺服电机控制器设计实验

实验11 伺服电机控制器设计实验 了解伺服电机的应用领域,掌握伺服电机的速度控制模式、伺服电机的位置控制模式。 文章目录 程序设计伺服电机的速度控制模式代码讲解main.ctimer.c 伺服电机的位置控制模式代码讲解main.ctimer.c 编译仿真伺服电机的速度控制模式伺服…

伺服电机PID控制及增益调节

1、伺服电机3环 电流环:最内环,此环在伺服启动器内进行,装在线圈上的霍尔元件通过检测磁场强度转化为电流,把电流负反馈给输入端。电流环是控制的根本,任何控制都是通多电流来作为媒介控制的。可用于转矩控制&#xf…

STM32脉冲伺服电机控制器参考技术方案

STM32脉冲伺服电机控制器参考技术方案 id661871202965&

三菱伺服电机控制实例

三菱伺服电机控制实例,(PLC程序,触摸屏,伺服参数,整套,Q系列,也可FX系列,自己设计,不理解可以解释各功能))(参数设置)MR-J4&#xff0…

伺服电机三环控制

伺服电机三环控制 简介电流环、速度环、位置环PIDPID 控制代码 简介 伺服电机一般为三个环控制,分别是电流环、速度环、位置环,如下图所示 频率不一样是由他们所在的控制环的位置决定的,位置越靠内,采样频率自然需要越高。根据香…

松下伺服电机pwm控制连线_从零打造树莓派家庭监控 (一): 伺服电机控制

本文首发自我的博客 MikeTech 现在很多家庭喜欢购买一个摄像头来监控家里的情况,但是往往却无法了解购买第三方摄像头的安全性,摄像头泄露的新闻也每过一段时间就会出现在人们的视野当中。如果购买的摄像头拥有云端查看的功能,那么摄像头录制下来的内容肯定是要上传到摄像头…

3种伺服电机控制方式

伺服电机速度控制和转矩控制都是用模拟量来控制,位置控制是通过发脉冲来控制。具体采用什么控制方式要根据客户的要求以及满足何种运动功能来选择。 接下来,给大家介绍伺服电机的三种控制方式: 如果您对电机的速度、位置都没有要求&#xf…

伺服电机控制工程 伺服电机开发实例 modbus开发源码C# winform位置模式力矩模式

伺服电机控制工程 伺服电机开发实例 modbus开发源码C# winform位置模式力矩模式 本工程源码编译环境是visual studio (最好采用2013以上版本),编写语言是C# ,winform工程。 本工程可以实现电脑上位机与伺服电机进行modbus串口通信…

伺服电机要计算机控制,一种伺服电机的控制方法与流程

本发明涉及机械控制技术领域,尤其涉及一种伺服电机的控制方法。 背景技术: 随着机械控制领域的高速发展,对于伺服电机的需要也日益增加,因此对于伺服 电机的控制已引起越来越多人的重视。目前传统的伺服电机的采用的是BLDC控制方法,这 是一种基于方波的驱动控制方式。这种…

verilog实现伺服电机控制

本工程可以实现伺服电机控制 编程语言是verilog 仿真截图如下: 顶层模块如下: module pid_motion_speed( //input sys_clk, //时钟 sys_rst_n, //复位 key, …

PLC是怎么控制伺服电机的?又该如何设计一个伺服系统?

导读 在了解PLC如何控制伺服电机之前,我们要明确两个问题:PLC是怎么控制伺服电机的?以及如何设计一个伺服系统?然后从这两个问题下手,开始详细的讲述PLC如何控制伺服,它们是怎么相辅相成的! 一…

伺服电机控制

前言:感谢各位大佬愿意将知识开源并作出详细的说明。我只是依据自己的学习轨迹稍作整理,加以自己的理解并记录于此。本文几乎所有的参考内容都附上了原文链接,本文的文字内容有一些是我的,有一些是从链接中粘贴出来的,…

伺服控制的三环控制原理及整定仿真和Simulink模型

伺服控制的三环控制原理及整定仿真和Simulink模型 我们平时使用的工业伺服,通常是成套伺服,即驱动器和电机型号存在配对关系。但有些时候,我们要用电机定转子和编码器制作非成套电机——例如机床上使用的直驱转台、永磁同步电机直接驱动的主轴…

伺服电机基本概念解析:伺服系统组成及其控制原理

本文将永久处于维护序列,如您对文章内容有所疑问,还请提出,共同探讨。 -2021.8.25 参考文献 [1] 向晓汉, 宋昕. 变频器与步进/伺服驱动技术完全精通教程[M]. 第1版. 北京:化学工业出版社, 2015b. [2] 梁森, 欧阳三泰, 王侃夫. 自动检测技术及…

三种伺服电机控制方式总结

伺服电机速度控制和转矩控制都是用模拟量来控制,位置控制是通过发脉冲来控制。具体采用什么控制方式要根据客户的要求以及满足何种运动功能来选择。 接下来,给大家介绍伺服电机的三种控制方式: 如果您对电机的速度、位置都没有要求&#xff0…

面试题:Ajax、Fetch、Axios三者的区别

Ajax 它的全称是:Asynchronous JavaScript And XML,翻译过来就是“异步的 Javascript 和 XML”。 Ajax 是一个技术统称,是一个概念模型,它囊括了很多技术,并不特指某一技术, Ajax 是一种思想,X…

最新最全的前端面试题集锦之 Ajax、Fetch、Axios 篇

该内容主要整理关于 Axios 的相关面试题,其他内容面试题请移步至 2021 最新最全的前端面试题集锦 查看。 目录 一、Ajax 相关面试题1、概念2、作用3、创建 Ajax4、Ajax 状态和 HTTP 状态码5、Ajax 中常用的属性和方法6、思考:post 和 get 有什么区别 二、…

【面试题】Ajax

1. Ajax请求 1.1 get请求方式 const xml new XMLHttpRequest() xml.open("get", "test.json", true) xml.send(null) xml.onreadystatechange function(){if(xml.readyState 4 && xml.status 200){console.log(JSON.parse(xml.responseTe…

AJAX常见面试题,面试必备

什么是AJAX,为什么要使用Ajax AJAX是“Asynchronous JavaScript and XML”的缩写。他是指一种创建交互式网页应用的网页开发技术。、 客户端与服务器,可以在【不必刷新整个浏览器】的情况下,与服务器进行异步通讯的技术 AJAX应用和传统Web…

Ajax和Axios相关面试题总结

文章目录 Ajax和Axios1.同步请求和异步请求2.fetch、axios、jquery的ajax用法3.JS跨域资源共享(CORS问题)4.Ajax 解决浏览器缓存问题5.ajax 返回的状态6.实现一个 Ajax7.如何实现 ajax 请求,假如我有多个请求,我需要让这些 ajax 请…