工业控制 | 能源技术 | 汽车电子 | 通信网络 | 安防监控 | 智能电网 | 移动手持 | 无线技术 | 家用电器 | 数字广播 | 消费电子 | 应用软件 | 其他方案

电路设计->光电电路图->其他光电实用电路图->伺服电机红外线遥控接口电路的开发

伺服电机红外线遥控接口电路的开发

作者:dolphin时间:2016-09-12

  LEGOMindstorm系统所缺少的几种特性之一是精确的驱动定位。这是开发这一接口电路的原因。本电路借助RCX模块的红外接口,用在典型的无线电控制模型中,同时控制3台伺服电机。3种不同类型的LEGOTechnIC伺服电机用在大多数机器人自动控制装置中是比较适宜的。但在需要精确地控制角位移时,会由于施加在轴上的力过大而失效,所以需要寻找更好的办法。
  
  要想使无线电控制模型中使用的伺服电机更精密。当然不仅要涉及与其他LEGO模块之间的机械接口问题,而且必须要在RCX控制下操作。这需要一点小技巧。RCX是LEGO系统中的主要控制元件,它是由装在较大的明黄色的LEGO模块中的微控制器所组成的。
  
  这里提供的电路允许使用RCX的标准固件2.0版,同时使用RCX模块的红外接口控制多达3台伺服电机。
  
  一、伺服电机控制
  
  无线控制模块的伺服器使用脉宽调制形式,控制信号为50Hz矩形脉冲。对于频率的精度要求不高,仅要求在30—60Hz之间即可。控制信息由脉冲宽度来承载,允许宽度在1ms—2ms之间变化。如下图所示,矩形脉冲宽度决定伺服电机的位置。当脉冲宽度为1.5ms时,伺服电机位于中间位置。在伺服电机中有一个接在电机轴上的电位器,可以以电压形式提供电机转角的反馈信号。由于此电位器有转动终点,伺服电机不能过驱动,否则会永久损坏电位器。这种情况当驱动脉冲宽度超出允许范围时可能会发生。


  
  为了同时驱动3个伺服电机,需要3个能够相互独立的可调宽度的脉冲发生器。如右图所示。在型号为PIC16F628的微控制器(lC3)中产生这些信号。PIC中的程序编制要求是:
  
  以总的频率为50Hz的方式产生3个控制脉冲,这样可得到:
  
  Aon+Aoff+Bon+Boff+Con+Coff
  
  =1/50秒=20ms
  
  我们给定Aon、Bon、Con所希望的脉冲宽度。20ms的总的时间周期被分为3个相等部分。得到:
  
  Aoff=20/3ms-Aon
  
  Bdf=20/3ms-Bon
  
  Cdf=20/3ms-Con
  
  这种情况可以在右图中看到,PIC输出信号控制三个伺服电机。脉冲发生器的操作如下:(以简化伪代码表示)Label_l

  二、接口电路
  
  接口电路结构如下图,由三部分组成:稳压电源(IC1和(C4)、IR接收(IC5和IC2)和脉冲发生器(IC3)。使用9V独立电源供电。两个稳压电路分别使用各自的稳压芯片(IC1和IC4)。
  
  其作用是在伺服电机工作时,主电源电压不会下降,以保证无故障操作。因为当3个电机同时运行时,驱动电流可高达500mA。因此接口电路不能直接接到RCX的输出端上,否则在这种电流下无法工作。还注意到专门使用了二极管D1和D2。每个二极管的电压降为0.65V,这使得7805的接地管脚电压为1.3V。从而稳压器IC4的输出电压增加到6.3V。正是伺服电路的理想电压。
  
  实际的红外伺服电机控制电路是由红外接收器(IC5)和两个互相连接的典型微控制器芯片PIC16F628所组成。前一个微控制器(lC2)将由接收器获得的串行数据转换为并行型式,并且传输给第2个微控制器(lC3),使用8位数据线和3根控制信号线,可以实现的最大分辨率是1/256。将1ms周期时间分为255步。每步产生的分辨角度小于10。具体则取决于所使用的伺服电机的特性。对于某些类型的伺服电机,分辨率大于常被称为‘静区’的值(典型值为5us)。因此,可能对于仅有一个单位的控制值改变没有反映(‘静区’对于确保伺服电机转动,输入的控制信号和内部参考信号能够尽快地校准来说,是必要的一种特性)。
  
  第2个PIC(IC3)以14.3MHz的时钟频率工作,频率值的选择基础是在伺服控制脉冲宽度PIC指令周期之间的关系。本机时钟周期为69.9ns,因为早期的PIC16F84芯片中,大多数PIC16F628的RISC指令在4个时钟周期内执行。这也就是定时器增量的速率。
  
  因此,一条指令的执行时间为279.9ns。
  
  IC3中的程序使用16位定时器(TMRl),最短的(1ms)伺服脉冲对应于定时器TMR1的3575个脉冲计数。
  
  这个值在定时器初始化时使用。进一步可得,停顿(off)周期(20/30-1)ms对应于定时器的20258个时钟计数。PIC时钟脉冲长度计算如下:
  
  t=ax+b这里Ox=255(0为保留值)a=(7150-3575)/(255-1)=14.0(斜率)b=3575(截距)

  现在我们可以看出,IC3的时钟频率为什么要特别选择:3575/254的商近似于一个整数。PIC中的程序有条件采用与上面给出的值不同的斜率与截距,以便对伺服电机进行微调。但在通讯上有一定的限制:由于我们一次只能传输8位数据,这就意味着斜率只能设定为整数值,而截距只能在20步内调整。

  三、数据传输在IC2和IC3之间的数据传输分为两个步骤。由于有一系列严格定时的操作要执行,所以使用两个微处理器。首先,UART(通用异步收发器)必须时刻准备接收数据。因为接口电路不知道下一个红外(IR)命令何时会到达。其次,UART必须按照LEGO协议(操作码OX14)来管理数据的接收。
  
  使用的数据块大小为15个字节、2400波特(一个启始位,8个数据位,1个奇偶校验位和一个停止位),因此总的传输时间是70ms。最后,必须按照进入的命令生成稳定的与脉宽无关的调制信号。并且这些脉冲的误差必须保持在伺服电机的静区之内。将所有这些功能集成到一片PIC芯片内,并且要求有很高的可靠性,难度很大。比较起来,增加一片PIC的开销就不算什么了。
  
  IC2的RB1和RB2被设置为与UART相连接,因此不能再与其他管脚一起组成并行总线。这里,使用RA1和RA2代替它们,作为并行总线的一部分。这就至少还需要一个控制信号,因为RA,RB两个端口不能同时更新。没有这个控制信号,IC3就无法读取端口之间更新的误差值。在使用这个控制信号时要注意到:IC2的RA4是一个漏极开路型输出端口,因此,需要1kΩ的上拉电阻。
  
  两个芯片的配置方式,要使内部信号MCLR上拉为VDD电平。这样,这个独立的引脚可以作为IC3的输入端RA5使用。下表列出控制总线的配置值及其意义。

  四、RCX异步收发器
  
  使用LEGOMindstormsSDK2以及2.0版的固件,用户可以对RC×UART的传送通道进行存取。这就打开了开发机器人项目的一扇门。例如:能够用一个RCX编程另一个RC×,一系列的RCX模块可以联合处理传感器和变化的数据。只需要简单的遵守LEGO的通讯协议,并且传送正确的命令代码即可。但要注意:所有的RCX模块之间的通讯都在红外范围之内,所发出的命令对于其他的SDK来说,可能引起严重的后果。为保证效果更好,在这里我们选择使用操作码OX14(‘SETVAR’和‘SETTV’)。这个命令在ROBOLAB2.5中已经不再使用。因为在此固件中采用了通用的‘SET’命令。根据硬件的不同配置,此命令既可以定义传感器的值,也可以设置其他变量的值。
  
  根据数据表,完整的命令如下:
  
  SETVAR:OX14变量,源,数据(低位),数据(高位)
  
  (重复OXE3。注意:一旦接收模块确认了这一操作码,就会送出一个确认信号,在本系统中这并不适用。但我们可以在连续的命令之间插入一段延时时间,以避免红外线互相干扰。)
  
  我们稍微改变一下这个命令:
  
  OX140(虚参),0(虚参),命令,数据(可惜所用的RCX去掉了控制变量O的使用)
  
  LEGO协议处理各个附加数据字节,以确保正确的数据传输。如下表所示:接收器能够检验全部字节,并且计算出所有接收字节的校验和,然后与接收到的校验和进行比较,这能够对数据传输质量提供很好的保证。虽然RCX带有奇偶校验功能,但对于IC2中的程序并不重要。因为16F628UART并不是在任何情况下都能够提供自动的奇偶校验。本例中,使用Vishay-Telefunken生产的廉价的TSOP1738作为红外接收器和解调器。LEGO红外传送采用2400波特传输率、载波频率为38kHz。当RCX被设置为远距离lR方式时,红外接收器的灵敏度为10米以内。


  
  下表给出了在ROBOLAB程序中所使用的指令的概况,并且分类给出了实际传送的值。如前所述:在调整伺服参数时,一定要十分仔细,以避免由于伺服电机过冲而引起危险。一般采用小步进行调整。

  五、组装
  
  印刷电路板(图4)很小,但很容易组装。因此,装配不存在什么问题,仅需要注意一些飞线。因为使用单面印刷电路板,所以必须另外连接这些飞线。
  
  飞线共有6根,3根在集成电路下面:
  
  一根在IC2下面,另两根在IC3的下面。这些线最好使用绝缘线,焊在板子的背面。也可以使用镀锡导线,在元件面焊接,在集成电路或其插座下面通过。在任何情况下,都要先焊好飞线,再安装无源电路,最后再安装有源电路。
  
  焊接要小心,注意各元件的数值;电解电容和二极管的极性,以及集成电路的安装方向。稳压器IC4的散热器安装要离开电路板的边缘。
  
  9V电池接到标有K1的接线端上。
  
  电路的耗电量取决于伺服电机的数目和耗电量。如果空间允许,最好使用6节1号电池组装在一起的电池盒,使用9V积层电池的使用寿命太短。大约要差5~6倍。
  
  红外接收器IC5不需要直接焊接在印刷电路板上,可以通过3根导线引出到远离板上所标IC5的位置安装。也可以使用其他有类似特性的红外接收器取代元件表中给出的TSOP1738。一些可用的替代品在电路图(下图)中给出,同时还给出了各自的管脚配置图。


  
  所有的IC都是3个引脚,但在印刷电路板上为IC5提供了5个孔,目的是使所推荐的任何一种IC都可以直接焊接到板上。14.3MHz晶体X2也有可替代品。如果买不到这种晶体,可以使用更容易买到的16MHz的晶体代替。一般无线控制用的伺服电机可以适应这一变化。
  
  3个伺服电机接到端子K2、K3、K4上时,必须试验其引脚是否合适。各厂家的伺服电机的连接电缆端的标记方法常常不同。常见的无线电遥控伺服电机引脚配置方式见下图。

  六、操作方法  
  
  这里介绍的伺服电机驱动接口可以使用RCX2.0版的固件ROBOLAB2.5.可以通过LEGO支持软件(RS232或USB版)或从RCX本身来控制。
  
  下图显示一个带有两个并行任务的简单程序界面。这个例子中,RCX按照接触传感器上所施加的压力大小来增、减红色伺服电机的转角。开始时位于中间位置。颜色红、黄、蓝遵循通常ROBOLAB的颜色代码习惯。


  
  第2幅程序界面图,使RCX进入远距离红外通讯模式。显示了当前的斜率值。截距也可以用同样的方式调整。
  
  调整斜率可以增加或减少伺服电机总的运动范围,而改变截距仅影响零点的位置。
  
  如通常在ROBOLAB/LABVIEW中那样,各程序段可以集成在一起,并且用一个新的图象形式表现出来。即使是最复杂的程序也能组织在一个高级画面中。上图给出了RC×程序的核心部分,驱动RCX的UART传送器。在LEGO Mindstorm SKD中可以找到UART的更多信息。中图显示运行在PC上的简单程序。红色伺服电机缓慢转动超出其操作范围。注意使用LABVIEW作为带移位寄存器的回路。
  
  在右手一侧离开主框的数据被存入重复端的移位寄存器中。这使得诸如检测检测某些程序错误的操作十分简单。在主框之外的两个图标是负责与LEGO支持软件通讯、初始化和结束操作的。
  
  此程序可在ROBOLAB中找到支持软件的连接配置。通常的ROBOLABRCX直接模式不能使用,因为程序会等待一个从RCX来的应答信号。而在本系统中,传输是单向的。
  
  最后,下图显示了RCS伺服电机管理程序的控制界面,它是非常容易使用的。斜率和截距都可以调整。只有当其值改变时,支持程序才发送。如果一个值连续变化,变化速率决定干传输频率。

  元件表



评论

技术专区