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

电路设计->光电电路图->其他光电实用电路图->使用Servomagic跟踪控制的同步伺服控制器

使用Servomagic跟踪控制的同步伺服控制器

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

控制原理

SetvoMagIC使用类Bresenham算法来移动一个或多个伺服器(平滑地)到其新的位置。设计此程序的人是Albert Nijhof。这里使用的是其无专利的版本。

ServoMagic是如何作到能够同步地改变伺服器的位置的呢?就要为每个马达确定移动到新位置而需要多少行程。对于这个算法来说,最长的行程(称为:步数)决定开始点。每个马达都必须在这个步数中到达终点。为每个马达保’存一个计数器,一旦计数归零,就要重新装入最大的步数。每个计数器从最大值开始,做减法计数。最终能使伺服机构产生合适的模拟运动,每个伺服器能达到最终的目标位置。如下面的实例中所显示的。在表1中,星号“*”表示所对应的伺服器改变后的位置,而‘一’表示还没有发生改变。表中汇总了算法的最初执行过程。

上面例子的各伺服器最初的起始位置为0,0,0,0,0,而最终位置分别是:10,3,7,1,2。从表中可以看到,各伺服器的最终位置都在10步内达到。当计数器为空(或为负)时,会重新装入最大步数(在这里为10)。所有计数器开始时都装入最大步数的一半(本例中为5)。伺服器1(s1)的计数器必须每步都重新装入,因此,这个伺服器可以改变位置10次。而伺服器5(s5)仅可以改变位置2次,因为它的计数器只有两次开放入口的机会。按照这种办法,各伺服器既可以分别控制,也可以同时控制。既可以减速,也可以不减速。但总能够协调地运行。

硬件结构

图1的电路中,最重要的部件是Atmel公司的8位RISC型微控制器芯片AT90S2313。在本应用电路中,时钟采用4MHz。此微控制器片内带有2kB闪存;128字节RAM;128字节EEPROM和5个I/O端口。外接的其余元件很少。为了与ServoMagic模块通讯,可以有两种选择:一是使用RS232口,电路中以晶体管T1/1.2为主组成。也可以通过36kHz红外接收器(IC1)连接到K3上(注意:两者不能同时使用)。最后,可以看到:电路采用双电源供电。


关于电源,要提醒:由于这里使用的AVR芯片没有电压降低检测器,因此,如果加电时电源电压上升太慢,则微控制器的复位过程可能无法正常进行。结果可能造成内部EEPRoM中几个字节内容改变。Atmel公司本身对此发出过警示:如果必要时,需加装额外的电压下降检测器。更好的办法是使用Attiny2313,其装有内置的电压下降检测器。这些问题会在本电路的第二版中加以考虑。

在电路的PCB板上有一系列连接伺服器的接口;以及连接Atmel的ISP编程器的接口;以及一个复位按钮,一个DEMO(演示)模式按钮。还留有用于安装连接RS232连接器的直角D9型阴插座的安装位置,以及用于IC1红外接收器的安装位置。如果伺服器需要更大的功率,那么还可以考虑用78S06代替现在的稳压器IC3(78S05)。如果需要很多大功率的伺服器,可能需要采用类似78T05(3A)的稳压器。注意不要忘记给稳压器安装合适的散热片。

设计细节

每种类型的伺服器在不同脉宽时,有自己的启始和停止位置。所有伺服器的启、停位置都存储在AT90S2313内部的EEPROM中的一个表里。为了确保每个伺服器能够用同样的数据(O~180)来控制。需要计算脉冲的宽度,以便为每个伺服器分别进行换算。在这种方式下,所有伺服器可能用到超过其最大范围。但程序不需要记忆每个独立的伺服器的实际范围。其基本计算如下:

{((停止位置一开始位置)×设定位置)/极限)+开始位置

此计算结果被反过来存入RAM中的表里。供定时器中断使用。并以此数据为基础,产生各伺服器所需要的脉冲宽度。

EEPROM的存储空间分配如下:

-地址0:没使用(参见Atmel的勘误表)

-地址1:WAIT(等待)命令的初始化内容(每步时间)

-地址2~11:所有伺服器的最小脉冲宽度。

-地址12—21:所有伺服器的最大脉冲宽度。

-地址22~121:10行,每行10个位置,伺服器的预设位置可以存储在那里。第一行存放1 0个伺服器的静止和初始位置。

结构装配


见图2。首先,从装配所有高度较低的无源元件到PCB板上开始。先从跳线开始,接着是二极管和电阻。如果使用IC插座,它必须在安装直立的电阻之前焊接到板上。接着安装晶体管、电容和晶体。然后安装连接伺服器的阴插座,(接口要符合Graupner/JR标准)以及JP1。然后装K2、IC4和IC3。如果选用红外版的软件时,还需要安装ICl(Elektor eleCTRonicS杂志所支持的预编程的微控制器仅对于使用RS232口的有效。用于红外版的软件源代码和16进制数据文件可以买到)。最后接上用于复位和激活DEMO(演示)模式的两个按钮。

控制原理

SetvoMagIC使用类Bresenham算法来移动一个或多个伺服器(平滑地)到其新的位置。设计此程序的人是Albert Nijhof。这里使用的是其无专利的版本。

ServoMagic是如何作到能够同步地改变伺服器的位置的呢?就要为每个马达确定移动到新位置而需要多少行程。对于这个算法来说,最长的行程(称为:步数)决定开始点。每个马达都必须在这个步数中到达终点。为每个马达保’存一个计数器,一旦计数归零,就要重新装入最大的步数。每个计数器从最大值开始,做减法计数。最终能使伺服机构产生合适的模拟运动,每个伺服器能达到最终的目标位置。如下面的实例中所显示的。在表1中,星号“*”表示所对应的伺服器改变后的位置,而‘一’表示还没有发生改变。表中汇总了算法的最初执行过程。

上面例子的各伺服器最初的起始位置为0,0,0,0,0,而最终位置分别是:10,3,7,1,2。从表中可以看到,各伺服器的最终位置都在10步内达到。当计数器为空(或为负)时,会重新装入最大步数(在这里为10)。所有计数器开始时都装入最大步数的一半(本例中为5)。伺服器1(s1)的计数器必须每步都重新装入,因此,这个伺服器可以改变位置10次。而伺服器5(s5)仅可以改变位置2次,因为它的计数器只有两次开放入口的机会。按照这种办法,各伺服器既可以分别控制,也可以同时控制。既可以减速,也可以不减速。但总能够协调地运行。

硬件结构

图1的电路中,最重要的部件是Atmel公司的8位RISC型微控制器芯片AT90S2313。在本应用电路中,时钟采用4MHz。此微控制器片内带有2kB闪存;128字节RAM;128字节EEPROM和5个I/O端口。外接的其余元件很少。为了与ServoMagic模块通讯,可以有两种选择:一是使用RS232口,电路中以晶体管T1/1.2为主组成。也可以通过36kHz红外接收器(IC1)连接到K3上(注意:两者不能同时使用)。最后,可以看到:电路采用双电源供电。

关于电源,要提醒:由于这里使用的AVR芯片没有电压降低检测器,因此,如果加电时电源电压上升太慢,则微控制器的复位过程可能无法正常进行。结果可能造成内部EEPRoM中几个字节内容改变。Atmel公司本身对此发出过警示:如果必要时,需加装额外的电压下降检测器。更好的办法是使用Attiny2313,其装有内置的电压下降检测器。这些问题会在本电路的第二版中加以考虑。

在电路的PCB板上有一系列连接伺服器的接口;以及连接Atmel的ISP编程器的接口;以及一个复位按钮,一个DEMO(演示)模式按钮。还留有用于安装连接RS232连接器的直角D9型阴插座的安装位置,以及用于IC1红外接收器的安装位置。如果伺服器需要更大的功率,那么还可以考虑用78S06代替现在的稳压器IC3(78S05)。如果需要很多大功率的伺服器,可能需要采用类似78T05(3A)的稳压器。注意不要忘记给稳压器安装合适的散热片。

设计细节

每种类型的伺服器在不同脉宽时,有自己的启始和停止位置。所有伺服器的启、停位置都存储在AT90S2313内部的EEPROM中的一个表里。为了确保每个伺服器能够用同样的数据(O~180)来控制。需要计算脉冲的宽度,以便为每个伺服器分别进行换算。在这种方式下,所有伺服器可能用到超过其最大范围。但程序不需要记忆每个独立的伺服器的实际范围。其基本计算如下:

{((停止位置一开始位置)×设定位置)/极限)+开始位置

此计算结果被反过来存入RAM中的表里。供定时器中断使用。并以此数据为基础,产生各伺服器所需要的脉冲宽度。

EEPROM的存储空间分配如下:

-地址0:没使用(参见Atmel的勘误表)

-地址1:WAIT(等待)命令的初始化内容(每步时间)

-地址2~11:所有伺服器的最小脉冲宽度。

-地址12—21:所有伺服器的最大脉冲宽度。

-地址22~121:10行,每行10个位置,伺服器的预设位置可以存储在那里。第一行存放1 0个伺服器的静止和初始位置。

结构装配

见图2。首先,从装配所有高度较低的无源元件到PCB板上开始。先从跳线开始,接着是二极管和电阻。如果使用IC插座,它必须在安装直立的电阻之前焊接到板上。接着安装晶体管、电容和晶体。然后安装连接伺服器的阴插座,(接口要符合Graupner/JR标准)以及JP1。然后装K2、IC4和IC3。如果选用红外版的软件时,还需要安装ICl(Elektor eleCTRonicS杂志所支持的预编程的微控制器仅对于使用RS232口的有效。用于红外版的软件源代码和16进制数据文件可以买到)。最后接上用于复位和激活DEMO(演示)模式的两个按钮。

软件

完整的AVR ByteForth软件可以从Elektor electronics的网站上下载,文件号为020031—11。文件包含一组软件模块。免费的演示版编译器可以从站点:Http://forth.hCCnet.nl上得到。Forth常被认为是过时的,受限制的语言。但却有能力获得很多现代微控制器的绝大多数输出。它的多任务器能够在AT90S2313上运行3个任务。可以试一试:首先装入包含有命令(在forth语言中称为字)的库文件avr—eep.frt。这些命令将来要读入到内部的AVR EEPROM中去。然后,添加上伪随机数发生器库。同样还有修改的RS232版软件和数据转换库。

一旦声明部分软件载入后。接着执行各种频率(40Hz-125Hz)的定时中断程序,以便给伺服器提供平滑的脉冲。中断程序从存储在AVR RAM段中的表里读取脉冲宽度。使用8位定时器,因为与预置的比例因子一起,可以很容易地产生宽度在O.02ms到4ms之间的脉冲。此程序的数据需要10字节长的五个表。中断程序在表中也建有数据,有10字节长。所有数据装在一个小容量的128个字节的RAM中。

以这两个数组的内容为基础,可计算出用于各伺服器运动的数据。

最后,还需要一个命令解释器,它接收并且处理来自RS232或RC5(红外接口)的指令,波特率和其他设置命令。这里设置为:9600波特,8位数据位,没有奇偶校验位,一个停止位。关于RS232命令翻译器,将在后面做进一步讨论。

在使用RC5版时,有一个RC5译码器在后台运行。这个译码器由PD2的下跳沿所启动,引起一次硬件中断。启动定时器,对引入的PD2上的信号进行采样,并且检查其正确性。

测试

接好RS232电缆(应为直通型电缆,一对一的接线连接器,而不是零调制解调器电缆)。启动PC机上的终端程序,配置为9600,8,N,1。接好电源。注意接好伺服器。如果各项都正常,则启动信息出现在窗口上方。LED短暂地亮一下。一个提示信号在下面出现。若键入疑问(Question)命令‘?’,则ServoMagic将用伺服器当前所在位置来应答。如果这些都实现了,那么说明电路扳功能正常,软件已正常运行。从板子上去掉电源,接上一个伺服器到K6(伺服器4),再重新连上电源。重新启动ServoMagic,这个伺服器大概将在其中心位置。现在键入:O,4,180,随后再键入O,4,0。则4号伺服器前进到最大位置,然后再回到最小位置。如果以上工作都正常,你就可以连接更多的伺服器了。注意:为了演示的目的,前两个伺服器应具有不同的启始和停止位置。

一旦确认所有伺服器工作范围正确,就可以试试演示模块了。在这种模式下,随机发生器驱动各自的伺服器到各不同的位置上。同时随机发生器也控制速度。

PCB板上装有跳线JP1,以便于为每个伺服器标定其最大运动范围。在标定时,去掉跳线,并且将电压表跨接在此两点上。现在测量R20两端的电压。一旦伺服器达到其极限(锁住),电阻上的电压将会增加。现在就可以知道:所选择的启始或停止位置是在机械范围之外。使用这种。‘试错法’,就可以判定伺服器的整个范围。可以维持一个较小移动范围,以便在正常使用中伺服器不会被锁住。接着,依次重复调试每一个伺服器。全部完成后,可以在整个运动限度内用一个0-180之间的数字来控制伺服器。

最后说明

使用本文介绍的控制器。一台机器可以控制多达10个伺服器。如果需要更大的数量,可以使用两个ServoMagic模块,或者使用一个带有更多I/O口、RAM和EEPROM的AVR。例如Atmega8515就能够很容易地驱动24个伺服器而不会有什么问题。

有两种版本的ServoMagic软件。基本版(SMAGIC1A)用于RS232口。改进版(SMAGIC11)用于RC5。Elektor electroNits仅支持RS232版本。红外版软件你必须自己编程。但两种软件都可以装到本文给出的PCB板上。在这种情况下,PC机、SBC或其他计算机可以用有线或无线方式,同时控制一台或多台设备。RC5命令集完全由源代码形式提供。

注意:附加在闪存的16进制文件上还有一个文件EE.hex。需要编程写入到EEPROM中。(当然,这仅仅是对于自己微控制器编程的人需要)

RS232指令集
ServoMagic是一台使用ASCll码命令,并且通过RS232口通讯的控制器。一旦一个命令被处理之后,返回的提示信息由下面的字符组成:^M^J空。

下面是对于命令更详细的描述。用'S'表示的数据总是0~9,用'D'表示的数据则决定于每个命令本身。

?:显示伺服器马达现在的位置,后跟等待时间。伺服器马达位置用数O~180表示。等待时间为数O-255微秒。

A S n:为'S'号伺服器设置新位置'n'(数O-180)。在M命令接收之后伺服器'S"将以小步移动。

B S n:为'S'号伺服器设置启始位置‘n’。数n必须乘于16 μ s以便产生所希望的脉冲宽度。默认值是62(乘16=992 μ s)。伺服器号为数O~9。

D:设置ServoMagic为演示模式。每250ms伺服器得到一次由随机数发生器产生的命令。移到新的位置。

E S n:为‘S’号伺服器设置结束位置‘n’。数n必须乘于16 S以便产生所希望的脉冲宽度。默认值是125(乘16=2000μs)。伺服器号'S'为数O-9。

G n:将伺服器的位置存放在EEPROM中'n'的位置。EEPROM中最多有10个位置,'n'可以为0~9。位 置0对应于静止位置。每一步之后的等待时间由w命令给出。初始值为10秒。

H:复制等待时间到EEPROIV中。这个值在启动时恢复,并用作等待时间的默认值。

M:设置由A命令指出的伺服器到他们的新位置。每一步后的等待时间由W命令设置,初始为10ms。

N n:存储当前伺服器的位置到EEPROM中位于'n'的位置。EEPROM中位置最多10个,所以'n'为0~9。位置0对应于静止位置。

O s n:设置伺服器'S'到位置'N'。(0~180之间的一个数)。伺服器‘S’逐步运动。在每一步之后的等待时间由W命令给出的值决定。初始为10ms。

P n1 n2 n3 n4 n5 n6 n7 n8 n9 n10:

逐步设置伺服器‘n1’到‘n10’。作为紧接着W(等待)的命令。初始值为10ms,‘n1’~‘n10’的数字范围为O~180。

R s n:为伺服器‘S’设定一个新的复位位置(启始位置)。数字‘n’范围为0—180(90是其中心位置)。

S s n:设置伺服器‘S’到位置‘N’(数字0-180)。伺服器按步运动,每步之后不停顿。

w s:设置新的等待时间。



评论

技术专区