电机远程控制怎么实现的

伺服电机及伺服驱动系统远程控制,问题再多也有套路!
给TA发消息
加TA为好友
发表于: 21:47:48 楼主
本文针对伺服电机远程控制接线复杂性、单一性、不稳定性等问题,提出采用开放式通信协议DS301、驱动子协议DSP402实现伺服电机控制的新方法。&&&&&&&&前 &言CANopen是一种架构在控制局域网路(CAN)上的高层通讯协定,包括通讯子协定及设备子协定常在嵌入式系统中使用,也是工业控制常用到的一种现场总线。CANopen实现了OSI模型中的网络层以上(包括网络层)的协定。CANopen标准包括寻址方案、数个小的通讯子协定及由设备子协定所定义的应用层。CANopen支援网络管理、设备监控及节点间的通讯,其中包括一个简易的传输层,可处理资料的分段传送及其组合。一般而言数据链结层及物理层会用CAN来实作。除了CANopen外,也有其他的通讯协定(如EtherCAT)实作CANopen的设备子协定。CANopen由非营利组织CiA进行标准的起草及审核工作,基本的CANopen设备及通讯子协定定义在CiA301中。针对个别设备的子协定以CiA301为基础再进行扩充。如针对I/O模组的CiA401及针对运动控制的CiA402。针对伺服电机远程控制接线复杂、控制单一、可靠性不高等问题,提出利用CANopen通信协议、驱动子协议实现伺服电机控制的新方法。分析CANopen协议的对象字典和报文格式,详细介绍了CANopen伺服控制状态机各步骤的转换以及实现CANopen协议下PP、PV、HM3钟伺服控制模式的报文设置。利用CAN卡和伺服驱动设备以及伺服驱动设备以及PC机构建了实验平台,在上位机界面通过报文设置成功实现了基于CANopen协议的伺服电机的PP、PV、HM的三种模式的控制。实脸结果表明利用协议的报文设置控制电机简单易操作,通讯数据快速、可靠,用户通过上位机可以很好的实现对伺服电机的监控。系统架构搭建整个控制系统由PC机、CANopen上位机、USBCAN适配器、伺服驱动设备构成。CANopen通讯部分由DS301协议实现,伺服控制部分由DSP402协议实现伺服驱动设备作为的从节点,具有CANopen通讯功能,负责电机的电流、转速、位置等控制对象,它通过通信接口与总线相连,将信息传送给计算机的上位机界面;上位机界面则根据从站的反馈信息通过USBCAN适配器对伺服驱动设备实现控制。如图1所示为开放式通讯协议的伺服控制系统总体架构图。图1&开放式通讯协议伺服控制系统总体架构图开放式通讯协议伺服控制原理1&CANopen通讯设备模型CANopen的设备模型分为以下3个部分:通信单元、对象字典、应用过程。用户可以通过该模型对功能完全不同的设备进行描述。CANopen的核心概念是对象字典,对象字典包含描述这个设备和它的网络行为的所有参数,应用单元和通信单元都可以问这个参数列表。对象字典中的参数通过一个16位索引和位子索引进行识别和定位。通信部分由CAN收发器、CAN控制器和CANopen协议栈组成协议栈中定义了实现通讯的通讯对象:NMT(网络管理报文)、PDO(过程数据)SDO(服务数据对象)预定义报文或者特殊能对象(含同步报文、紧急报文、时间标记对象等)通信的所有内容和功能由这些通信对象描述,所有设备之间通信也通过这些通信对象完成。其中NMT用于主站对从站进行状态管理以及从站应答自身所处的通信状态,SDO用于主站对从站的对象字典进行配置和监控。PDO用来传输高速、小型数据。而特殊功能对象则用于同步网络中的通信对象(通常为PDO)的方法。应用部分是对设备的基本功能的定义和描述,它是连接设备与主站上位机的纽带,其核心功能是通过访问设备的对象字典对设备进行参数配置、状态控制和监控,并高速传输设备的过程数据信息。2&伺服控制模式CANopen驱动及运动控制设备子协议DSP402对特性的描述要求非常准确,它不仅定义了驱动器的运行模式,还定义了用于控制驱动器的状态机。驱动器状态机通过对象字典中的控制字6040来控制,并通过状态字6041来读取驱动器的状态。控制状态机如图2所示。图2&控制状态机图状态机可以分成以下3个部分:PowerDisabled(主电关闭)、PowerEbabled(主电打开)和Fault。所有状态在发生报警后均进入“Fault”在上电后,驱动器完成初始化,然后再进入SWUTCH_ON_DISABLED状态,在该状态,可以进行CAN通讯,可以对驱动器进行配置。此主电仍然关闭,电机没有被励磁。经过StateTransition(状态传输)2,3,4后,进入OPERATIONENABle此时,主电已开启,驱动器根据配置的工作模式控制电机。StateTransition(状态传输)9完成关闭电路主电。一旦驱动器发生报警,驱动器的状态都进入FAULT。PP模式(简表位置模式)是典型的定位模式,可通过单步设定与连续设定两种方式控制电机运行到目标位置。PV模式(简表速度模式)是速度控制模式,HM(回零模式)提供多种达到起始位置的方法。系统软硬件设计1系统硬件设计本文设计采用USBCAN和伺服驱动设备和PC机来搭建硬件平台。伺服驱动控制芯片采用的是DSP的芯片。系统硬件搭建按以下步骤进行。首先在TI的开发环境中配置好的相关参数,并建立DS301工程项目,完成CANopen协议通信程序的调试运行。项目调试成功之后下载到驱动器中,在上位机界面中设置报文,测试SDO、PDO、NMT等通讯对象。测试结果正确则系统硬件搭建完成。2系统软件设计整个伺服控制的软件设计在CCS中建立,主要包括永磁同步电机的闭环控制程序和CANopen协议找的实现两大部分。如图3所示为软件设计流程图。图3&软件设计流程图初始化部分程序主要完成DSP系统的初始化以及CANopen通讯的初始化。初始化主要完成的工作如下:初始化相关变量,使能全局中断,进人伺服电机编码器霍尔传感器反馈UVW三路信号来判断电机初始电角度位置。初始化通讯的主要完成的工作如下:设置从站节点地址和CAN通信波特率,初始化各通对象,完成各路的预定义映射,最后进入通信处理程序。3伺服控制报文设置CANopen报文结构由11位的COB-ID以及最多8字节的数据域构成。在上位机界面中通过NMT报文设置控制从站进入预作状态或者运行状态,再通过SDO报文设置伺服控制的各个参数(速度、位置等)以及状态机的各个状态可以使电机按照不同控制模式运转起来,最后通过将电机的当前参数映射到PDO中,读取PDO报文的值得到电机当前值,将其与设置值对比得到控制结果的正确性。控制报文全部由SDO实现。以下为PP模式控制、PV模式控制和HM模式控制报文列表:1.PP模式控制报文列表2.PV模式控制报文列表3.HM模式报文列表以上三种控制模式报文操作都是首先设置伺服控制模式,然后根据当前模式依次输入相关的目标控制值(如位置、速度、回零方式等),最后按照状态机步骤使用6040h控制电机启动与停止。仿真实验本系统的上位机界面由USBCAN的上位机界面及电机的监控界面两部分构成,其中USBCAN的上位机界面作为CANopen报文数据监控界面,电机的监控界面用VB2008开发。在上位机界面中通信波特率选用1Mbps伺服电机Node-ID设置为1,心跳周期为1s,TPDO发送周期为100ms,同时设置好电机电流环、位置环、速度环的参数,将设置的报文依次输入上位机界面的SDO控制,电机启动并运行到报文中的设定值,电机手动遥控器显示值与设定值一致,同时上位机界面中报文显示值也与设定值一致,成功实现了伺服控制的控制。1PP模式电机监控界面中位置控制曲线如下图4所示:图4&电机位置控制曲线在上位机界面中设置好报文值,电机启动。电机先加速运行,达到设定的目标速度值后开始匀速运行,直至达到设定的目标位置值就不再变化。上位机过程数据与电机监控曲线变化一致。如果需要改变电机的位置值,在上位机界面中依次输人新的控制报文,电机会根据设定值正转或者反转,继续运行到新的位置。2PV模式电机首先加速到设定的目标速度值,然后按照设疋值勾速运打。如果需要改变运行的速度,同样可在上位机界面中输人新的速度值,加速时的变化如上所述。减速控制时,电机减速直至速度为则停止。如图5所示为上位机数据变化与电机监控曲线变化一致速度控制曲线。图5&电机速度控制曲线图3HM模式电机先加速到设定速度,然后寻找原点位置,找到原点后,电机回零,减速直至这时分别在上位机界面以及电机的手动遥控器伺服电机中査看电机的当前位置值,都可以看到电机的当前设为说明电机回零操作完成。如图6所示为位置控制曲线图。图6&位置控制曲线图结 &论在实际应用应用过程中,本文所设计的系统运行可靠,数据准确易分析,机先加速运行,达到设定的目标速度值后开始匀速实时性好,协议栈程序易植入。该方法可以扩展适用于多电机控制系统,而且的CANopen通信协议栈适用于所有设备,在工程应用应用领域非常广泛。
打赏给楼主
友情提示:打赏的积分将从您的工控网积分账号扣除
楼主最近还看过
周点击排行周回复排行
[278] [209] [207] [201] [179] [177] [166] [161] [158] [152]
[24] [18] [18] [15] [14] [14] [13] [13] [12] [9]最新求助
[0] [2] [8] [1] [6] [3] [2] [8] [5] [2]上位机远程控制电机的正反转,用西门子S7-200,怎么编程?
全部答案(共1个回答)
——用一只接触器控制电动机的正反转,是不合理的。因为接触器有一个重要功能,就是“失压保护”,它可以在突然来电时,避免机器运转而发生意外。
继电器的触头容量较小,不能用来实现电机的正反转控制,而应当采用接触器来实现,具体参见附图。图中KMF和KMR都是接触器。设KMF主触头闭合时,异步电动机M正转,...
对于三相电机,任意两根相线对调位置,电机就反转。只要在行程开关动作后,将两线对调位置即可。
  单相电机,要用主、副线圈圈数相近的那种,将火线端和接移相电容后的...
问题问的比较抽象。
看您如何定义电路板:比如伺服控制器,算电路板吗?这玩意是可以控制伺服电机、步进电机正反转的;交直流电机正反转一般使用接触器进行控制,但非要使...
首先你先确定是S7200与变频器之间的控制关系是走通讯还是通过一般的接线控制
1接线,将 变频器启动,复位,急停。正反转等信号接到PLC的DO,用PLC控制变频...
答: 在重庆学习PHP有前途么
答: IMS在企业发展过程中能起到什么作用呢?
首先,它能够帮助中小物流企业有效降低成本、提升管理效率;
其次,IMS能够帮助中小物流企业显著改善客户服务质量,建立良...
答: 探测实现技术4.1SNMPAgent的实现目前,已经有一些可用的SNMPAgent开发工具包,它们提供一些基本的框架平台,实现了Agent的通用功能,在其基础上...
大家还关注
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区
相关问答:123456789101112131415您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
浅谈变频电机远程控制技术.pdf 1页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
需要金币:50 &&
\中国科技博览
你可能关注的文档:
··········
··········
浅谈变频电机远程控制技术
(开封龙宇化工有限公司 475200)
[摘 要]变频电机 因可调速 ,节能 ,减少机械传动部件等诸多优点而被越来越多的应用于工业控制之中;本文以变频 电机远程启动、停止、急停、复位、调速、
故障远程判断为切人点,实现变频 电机全方位远程控制;并实现远程控制与就地控制实现无扰切换。
[关键词]变频器 DCS 电机 控制
中图分类号:C62
文献标识码 :A
文章编号:X(2015)Ol一0004-01
在如今这个环境持续恶化的社会,节能降耗被人越来越多的关注,从小到
根据当前控制情况,对DCs控制进行挖潜,提高自动控制的效果,提升操作
家电、大到工业控制领域,变频 电机控制技术被人逐渐熟悉和认可。但是,在工
自动化水平 ,在满足设备安全的基础上,提高设备抗干扰能力,保障R400的正
业控制领域,变频电机的远程控制还仅仅是远程调频的功能,达不到远程全方
位操作的要求 ,这样不仅不能实现现场操作的所有功能,还浪费了人力,大大增
根据设备现状 ,R400q~抗干扰方面存在以下几个难点:
加了员工现场操作的危险系数,本文结合开封龙宇化工有限公司变频电机远程
1)由于远程/就地选择开关在转换时会存在短时间的断路状态,所以原设
控制技术的改造 ,重点分析变频电机远程控制的一些技术难点和解决方案
计无法实现无扰转换,且我公司所有涉及远程 /Fff3t!t的操作,都无法实现远程/
就地的无扰切换。
日,公司电力外网发生欠压事故,造成R40092.线跳停,影响生
2)变频器频率设定通道为单一通道,实现远程/就地两种模式同时存在的
产12/J~时,损失产量约58t。
设计存在困难。
由于R400挤出机一旦非正常停车,达到一定时间后,由于设备内存在物
3)当设备出现干扰信号造成停车后,工艺操作人员需判断原因、复位、频率
料,电机再次启动时由于负载过大,无法重新启动,这就需重新清理R400内部
调零、频率添加、启动等一系列时间,对人员素质要求较高,无法保证R4oo一次
物料后方能重新启动,从而影响了生产 。
重启成功,给生产造成损失。
所以,R4oo挤出机一旦发生非正常停车,快速判断、快速处理,使设备在没
4)要实现事故停车情况下自动重启一次的功能,而如何判断非人为停车变
有发生抱死之前启动,是挽 回损失的唯一方法。但人为判断故障需要很高的技
得异常关键。由于就地、盘柜、DCS均要实现启动、停止功能,所以设计存在一定
术水平,这一点工艺人员轻易不能做到,加之R400的操作需要在现场操作柱进
行,大大影响了故障处理的应急响应时间。
3建设 目标和内窖
2.需求分析
项 目投运后 :
2.1R400008控制情况分析
1)实现远程/就地无扰切换;
通过对 lOO设备厂家图纸的查阅、工艺操作流程分析,主要情况如下:
2)实现频率设定远程/就地两种模式共存,
a、实现故障报警,运行状态显示、电流,转速显示,紧急停车功能;
3)实现启动、停止、复位功能 ,
b、没有实现启动、停止功能。
4)提高R400重启应急响应能力,将设备重新启动响应时间减少N3s,
c、没有实现故障复位功能,
4,项 目实旋方案
d、没有实现频率
正在加载中,请稍后...单片机远程控制步进电机、LED灯和蜂鸣器
通过采用C#语言实现的上位机控制单片机的步进电机模块、LED灯和蜂鸣器模块,使步进电机进行正、反转和停止并控制转速;LED灯模块进行有选择的呼吸式表达;蜂鸣器模块的开始和终止。
上位机通过串口和自定义的通信协议(8字节)控制单片机的步进电机、LED灯和蜂鸣器模块。其中在控制步进电机的过程中,为了使操作能够及时响应,使用了INT0中断来进行及时性速度响应;LED灯使用位运算控制灯的闪烁位置,合理利用了单片机的模块和操作。
注意:由于定时器个数的限制,没能控制更多的模块。
sbit WEI=P2^7;
sbit DUAN=P2^6;
#define DataPort P0
unsigned char code dofly_DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};// 显示段码值0~9
unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码
unsigned char TempData[8]; //存储显示值的全局变量
sbit SPK1=P1^4;
void delay(int t)
while(t--);
sbit A1=P1^0; //定义步进电机连接端口
sbit B1=P1^1;
sbit C1=P1^2;
sbit D1=P1^3;
#define Coil_AB1 {A1=1;B1=1;C1=0;D1=0;}//AB相通电,其他相断电
#define Coil_BC1 {A1=0;B1=1;C1=1;D1=0;}//BC相通电,其他相断电
#define Coil_CD1 {A1=0;B1=0;C1=1;D1=1;}//CD相通电,其他相断电
#define Coil_DA1 {A1=1;B1=0;C1=0;D1=1;}//D相通电,其他相断电
#define Coil_A1 {A1=1;B1=0;C1=0;D1=0;}//A相通电,其他相断电
#define Coil_B1 {A1=0;B1=1;C1=0;D1=0;}//B相通电,其他相断电
#define Coil_C1 {A1=0;B1=0;C1=1;D1=0;}//C相通电,其他相断电
#define Coil_D1 {A1=0;B1=0;C1=0;D1=1;}//D相通电,其他相断电
#define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部断电
unsigned char S
unsigned char dir=0;
unsigned char code rst[]={0xe4,0xc0,0xe0,0xc0,0xe0,0x32};
// 复位代码
void Init_Timer0(void);
void DelayUs2x(unsigned char t)
while(--t);
void DelayMs(unsigned char t)
while(t--)
//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
void Display(unsigned char FirstBit,unsigned char Num)
static unsigned char i=0;
DataPort=0;
//清空数据,防止有交替重影
DataPort=dofly_WeiMa[i+FirstBit]; //取位码
DataPort=TempData[i]; //取显示数据,段码
if(i==Num)
void Rorate()
unsigned int i=512;//旋转一周时间
Init_Timer0();
//全局中断开
//外部中断0开
//1表示边沿触发
TempData[0]=dofly_DuanMa[Speed/10];//分解显示信息,如要显示68,
TempData[1]=dofly_DuanMa[Speed%10];//则68/10=6
while(i--&&dir==0)
DelayMs(Speed);
//遇到Coil_AB1
用{A1=1;B1=1;C1=0;D1=0;}代替
DelayMs(Speed);
//改变这个参数可以调整电机转速 ,
//数字越小,转速越大,力矩越小
DelayMs(Speed);
DelayMs(Speed);
DelayMs(Speed);
DelayMs(Speed);
DelayMs(Speed);
DelayMs(Speed);
while((i--)&&dir)//反向
DelayMs(Speed);
//遇到Coil_AB1
用{A1=1;B1=1;C1=0;D1=0;}代替
DelayMs(Speed);
//改变这个参数可以调整电机转速 ,
//数字越小,转速越大,力矩越小
DelayMs(Speed);
DelayMs(Speed);
DelayMs(Speed);
DelayMs(Speed);
DelayMs(Speed);
DelayMs(Speed);
/*------------------------------------------------
串口初始化
------------------------------------------------*/
void InitUART
// SCON: 模式 1, 8-bit UART, 使能接收
TMOD |= 0x20;
// TMOD: timer 1, mode 2, 8-bit 重装
重装值 9600 波特率 晶振 11.0592MHz
timer 1 打开
//打开总中断
//打开串口中断
/*------------------------------------------------
------------------------------------------------*/
unsigned int judge[8];
int cnt=0;
void main (void)
InitUART();
ES= 1;//打开串口中断
if(judge[0]==0xFF&&judge[1]==0xFE&&judge[6]==0xFD&&judge[7]==0xFC)
//(*((void (*)())(rst)))();
// ,将rst数组当函数调用,进行复位
if(judge[2]==0x00)//指定步进电机
if(judge[5]!=0)
else if(judge[2]==0x01)//指定LED
unsigned int CYCLE=600,PWM_LOW=0;//定义周期并赋值
//位锁存置0电平,防止LED亮的时候数码管亮
//段锁存置0电平,防止LED亮的时候数码管亮
delay(60000);
//特意加延时,可以看到熄灭的过程
for(PWM_LOW=1;PWM_LOW0;PWM_LOW--){ //与逐渐变亮相反的过程
P0=judge[3];
delay(PWM_LOW);
delay(CYCLE-PWM_LOW);
else if(judge[2]==0x02)
DelayMs(1); //发出大约500Hz的方波 频率越大声音越尖
SPK1=!SPK1;
/*------------------------------------------------
串口中断程序
------------------------------------------------*/
void UART_SER (void) interrupt 4 //串行中断服务程序
unsigned char T
//定义临时变量
//判断是接收中断产生
//标志位清零
Temp=SBUF;
//读入缓冲区的值
judge[cnt++]=T
if(cnt==8||judge[0]!=0xFF)
//把接收到的值再发回电脑端
//如果是发送标志位,清零
/*------------------------------------------------
定时器初始化子程序
------------------------------------------------*/
void Init_Timer0(void)
TMOD |= 0x01;
//使用模式1,16位定时器,使用&|&符号可以在使用多个定时器时不受影响
//TH0=0x00;
//给定初值
//TL0=0x00;
//总中断打开
//定时器中断打开
//定时器开关打开
//优先级打开
/*------------------------------------------------
定时器中断子程序
------------------------------------------------*/
void Timer0_isr(void) interrupt 1
TH0=()/256;
//重新赋值 2ms
TL0=()%256;
Display(0,8);
//外部中断程序
void ISR_INT0(void) interrupt 0
Speed=judge[4];
dir=judge[3];
TempData[0]=dofly_DuanMa[Speed/10];//分解显示信息,如要显示68,
TempData[1]=dofly_DuanMa[Speed%10];//则68/10=6
namespace 单片机
public partial class frm : Form
public frm()
InitializeComponent();
private SerialP
//通信协议
/// FF FE 00(电机) 00(方向) 00(速度) 00(停止) FD FC
private void btn_LED_Click(object sender, EventArgs e)
com = new SerialPort();
com.BaudRate = 9600;
com.PortName = &COM4&;
com.DataBits = 8;
com.Open();
Byte[] data = new Byte[8];
data[0] = 0xFF;
data[1] = 0xFE;
if(rb_R.Checked==true)
data[2] = 0x00;
if (rb_clock.Checked == true)
data[3] = 0x00;
else if (rb_anclock.Checked == true)
data[3] = 0x01;
if (cmb_speed.Text.ToString() == &停止&)
data[4] = 0x00;
data[5] = 0x00;
data[4] = Byte.Parse(cmb_speed.Text);
data[5] = 0x01;
else if (rb_LED.Checked == true)
data[2] = 0x01;
uint num = 255;
if (checkBox1.Checked == true)
num = num & 254;
if (checkBox2.Checked == true)
num = num & 253;
if (checkBox3.Checked == true)
num = num & 251;
if (checkBox4.Checked == true)
num = num & 247;
if (checkBox5.Checked == true)
num = num & 239;
if (checkBox6.Checked == true)
num = num & 223;
if (checkBox7.Checked == true)
num = num & 191;
if (checkBox8.Checked == true)
num = num & 127;
byte[] c = System.BitConverter.GetBytes(num);
data[3] = c[0];
if (led_s.Text.ToString() == &启用&)
data[2] = 0x02;
data[4] = 0x00;
data[5] = 0x00;
data[6] = 0xFD;
data[7] = 0xFC;
com.Write(data, 0, 8);
com.Close();}

我要回帖

更多关于 电机远程控制 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信