采购询价

点击提交代表您同意 《用户服务协议》 《隐私政策》

 
标题:计算机控制的手臂机器人位置伺服系统设计与实现
zgckw
三级
Rank: 3Rank: 3



UID 101557
精华 0
积分 417
帖子 213
信誉分 100
可用分 2715
专家分 0
阅读权限 255
注册 2012-12-5
状态 离线
 
发表于 2013-2-25 15:27 资料 个人空间 短消息  加为好友 
计算机控制的手臂机器人位置伺服系统设计与实现

系统硬件组成
  手臂机器人硬件实物如图1所示。左边为手臂机器人,右边为接口电路。手臂机器人拥有一阶自由度,它模拟人的手臂在二维平面内旋转。接口电路同手臂机器人之间通过10pin的数据线相连,接口电路通过36pin数据线与pc机并口相连。控制的目的是由电脑输入手臂 的预期选转位置,控制数据通过单片机pic16c74a的pwm调制,经过放大驱动手臂机器人上的马达运转,从而带动手臂的旋转。手臂的旋转位置由固定在电动机上的光电编码器采集脉冲得到反馈信号。
  它由一个直流马 达、四个相互咬合的齿轮以及一个机械臂组成,直流马达驱动齿轮和机械臂旋转。它的功能类似人的手臂,将物体从一个地方搬移到另外一个地方。电压信号作为系统的输入变量,驱动马达,带动齿轮和手臂旋转,手臂角度是系统中的受控量。
  被控对象的数学模型
  对手臂机器人建立数学模型,在模型的基础上 进行控制算法的选择,是对手臂机器人系统进行仿真和控制的基础,也是将手臂机器人应用在远程网络实验教学的主要目的所在。
  手臂机器人动力学结构如 图3所示,根据动力学原理,转矩平衡方程式[2,3]

  式中,t是电磁转矩,tl是负载转矩,j是转动惯量, 是马达转动的角速度。
其表达式分别为

  式中,f是粘性摩擦系数,ct转矩常量,φ是每极磁通,e是电枢电压,ce是电动势常数,ia是电枢电流,ra是电枢电阻,u是输入电压,n是转速 [弧度/秒] [3]。将式(2)~ (5)代入到式(1)得到

  式中,r为齿轮比率,y(t)为手臂转动的角度。
  代入式(6)可以得到

  最终得到从电压输入u(t)到位置y(t)的二阶微分方程

  对式(8)进行laplace变换,可以得到手臂机器人模型的开环传递函数

  在这里t=j/c,k=k/c 。
  系统组成原理如图4所示。

  图4 系统组成
  控制量输出和反馈读入
  系统输入信号由计算机控制程序产生,可由用户选择和设定参数,设计可实现输入为阶跃信号、正弦波等信号。
  输出控制量由pic16f17的d/a转换 模块转换,经放大器放大后送到执行电机驱动马达,根据被控对象由光电编码器测量手臂的旋转位置并返回数据。
  返回数据由pic16f17单片机返回计算机,控制程序通过读端口操作取得数据,送入相应控制子程序。
  windows操作系统下的实时控制软件开发
  本系统windows应用程序采用vc开发,与控制相关的要点在于程序的实时性和底层直接针对 i/o端口的写入和读取,实现方案如下。
  windows下精确定时器的实现
  众所周知,windows是基于消息机制的系统,任何事件的执 行都是通过发送和接收消息来完成的。这样就带来了一些问题,如一旦计算机的cpu被某个进程占用,或系统资源紧张时,发送到消息队列中的消息就暂时被挂 起,得不到实时处理。因此,不能简单地通过windows消息引发一个对定时要求严格的事件。另外,由于在windows中已经封装了计算机底层硬件的访问,所以,要想通过直接利用访问硬件来完成精确定时,也比较困难。所以在实际应用时,应针对具体定时精度的要求,采取相适应的定时方法[31,32]。
  根据香农采样定理,速度信号的采样周期应在1~10ms之间,才能比较精确的反映被采样的连续信号[4]。因此手臂机器人的控制和数据采集定时周期为 5ms,方能达到比较好的控制效果。所以在windows环境下实现高精度的定时是实现5ms实时控制和采集非常关键的一步。
  在手臂机器人的控制 中,使用多媒体定时器,能很好的满足周期为5ms的数据采集和控制的要求。
  在vc程序设计中,为了方便使用,我们定义了两个定时函数。
  uint setmmtimer (uint NInterval, uint nresolution, lptimecallback mmtimerproc, dword dwuser);
  {
  timecaps tc;uint ntimerid;ntimerres=nresolution;
  if(::timegetdevcaps(&tc, sizeof(timecaps))==timerr_noerror))
  {
  if(ntimerres!=min(max(tc.wperiodmin,ntimerres),tc.wperiodmax))
  return 0;
  }
  if(::timebeginperiod(ntimerres)==timerr_noerror)
  {
  ntimerid=timesetevent(ninterval, ntimerres, mmtimerproc,dwuser,
  time_periodic);
  if(ntimerid)
  return ntimerid;
  else
  return 0;
  }
  else
  return 0;
  }
该函数用于构造一个定时器,ninterval 为时间间隔,nresolution为定时精度,mmtimerproc为定时调用的回调函数指针,dwuser为用户传递过来的32位值,在程序里我们 传递的是this,即指向主窗口的指针,函数的返回值是该定时器的id号。
  void killmmtimer(uint ntimerid)
  {
  if(ntimerid)
  {
  timekillevent (ntimerid);
  ntimerid=0;
  }
  timeendperiod(ntimerres);
  }
  该函数用于删除指定id号的定时器。
  本系统就是主要利用这几个api函 数产生定时时间,完成指定时间的数据采集与控制。
  定时采样—i/o端口读写操作原理
  在visual c++中,对端口的输入输出可以通过端口i/o函数_inp、_outp对并行端口地址的操作来实现,函数包括在conio.h库中[5]。本系统选用 0x378作为对并行口操作的基地址。端口的读写函数如下所示。
  int cmainframe::inport()//从并口状态寄存器读取半字节的手臂位置信号数据
  { return((_ inp(0x379)&0xf8)^0x80); }
  void cmainframe::ppouts(int x)//从并口的控制寄存器输出握手信号
  {_ outp(0x37a, (x & 0x0f)^0x0b);}
  void cmainframe::outport(int x)//输出控制电压的数据到并口的数据寄存器
  {_outp(0x378, x);}
  利用以上这两个函数inport和outport,即可实现对接口板的i/0端口进行读写操作。
  控制算法及其设计
  积分的作用是消除静态误 差,动态过程的信号较大时切断积分作用,到趋于稳态的小信号状态时,再接入积分作用。即:
  当偏差小时,|e|<=a,采用pid控制。当|e|>=a时,采用pd控制。算法流程如图5所示:

  图5 积分分离pid控制算法
控制系统的实现和效果
  在本系统中,鉴于电机时间常数和所需要的控制质量,采样周期设为5ms,积分分离控制效果理想,系统实际运行曲线如图6,图6中给出 了阶跃输入信号和正弦输入信号的响应曲线。

  图6系统实际运行响应曲线
  由上面的实际运行 曲线我们可以看出,超调量小,上升时间很短,能够实现很好的预期位置跟踪目的。
  结语
  本系统中,积分分离控制取得了良好的控制效果,积分分离控制响应速度快,响应时间短,在突变性大等系统中有着优良的控制性能,是一

顶部
 



当前时区 GMT+8, 现在时间是 2024-4-20 11:14
京ICP证110310号

    本论坛支付平台由支付宝提供
携手打造安全诚信的交易社区 Powered by ANTPedia  © 2006-2007 Comsenz Inc.
Processed in 0.011744 second(s), 8 queries

清除 Cookies - 联系我们 - Antpedia - Archiver