基于AT89C2051的多路舵机控制器设计
摘要
舵机是机器人、机电系统和航模的重要执行机构。舵机控制器为舵机提供必要的能源和控制信号。本文提出一种以外部中断计数为基础的PWM 波形实现方法。该方法具有简单方便,成本低,可实现多路独立PWM 输出的优点。 关键词 AT89(:205l 舵机控制器 外部中断PWM
舵机是一种位置伺服的驱动器。它接收一定的控制信号,输出一定的角度,适用于那些需要角度不断变化并可以保持的控制系统。在微机电系统和航模中,它是一个基本的输出执行机构。
厂商所提供的舵机规格资料,都会包含外形尺寸(mm)、扭力(kg-cm)、速度(秒/60°) 、测试电压(V)及重量(g)等基本资料。
扭力的单位是 kg-cm ,意思是在摆臂长度 1 公分处,能吊起几公斤重的物体。这就是力臂的观念,因此摆臂长度愈长,则扭力愈小。
速度的单位是 sec/60°,意思是舵机转动 60°所需要的时间。
电压会直接影响舵机的性能,例如 Futaba S-9001 在 4.8V 时扭力为
3.9kg 、速度为 0.22 秒,在 6.0V 时扭力为 5.2kg 、速度为 0.18 秒。若无特别注明,JR 的舵机都是以 4.8V 为测试电压,Futaba 则是以 6.0V 作为测试电压。所谓天下没有白吃的午餐,速度快、扭力大的舵机,除了价格贵,还会伴随著高耗电的特点。因此使用高级的舵机时,务必搭配高品质、高容量的镍镉电池,能提供稳定且充裕的电流,才可发挥舵机应有1 舵机的工作原理
以日本FUTABA-S3003型舵机为例,图1是FUFABA-S3003型舵机的内部电路。
舵机的工作原理是:PWM 信号由接收通道进入信号解调电路BA66881。的12脚进行解调,获得一个直流偏置电压。该直流偏置电压与电位器的电压比较,获得电压差由BA6688的3脚输出。该输出送人电机驱动集成电路BA6686,以驱动电机正反转。当电机转速一定时,通过级联减速齿轮带动电位器R 。,旋转,直到电压差为O ,电机停止转动。舵机的控制信号是PWM 信号,利用占空比的变化改变舵机的位置。
2 舵机的控制方法
标准的舵机有3条导线,分别是:电源线、地线、控制线,如图2所示。
电源线和地线用于提供舵机内部的直流电机和控制线路所需的能源.电压通常介于4~6V ,一般取5V 。注意,给舵机供电电源应能提供足够的功率。控制线的输入是一个宽度可调的周期性方波脉冲信号,方波脉冲信号的周期为20 ms(即频率为50 Hz)。当方波的脉冲宽度改变时,舵机转轴的角度发生改变,角度变化与脉冲宽度的变化成正比。某型舵机的输出轴转角与输入信号的脉冲宽度之间的关系可用围3来表示。
3 舵机控制器的设计
(1)舵机控制器硬件电路设计
从上述舵机转角的控制方法可看出,舵机的控制信号实质是一个可嗣宽度的方波信号(PWM)。该方波信号可由FPGA 、模拟电路或单片机来产生。采用FPGA 成本较高,用模拟电路来实现则电路较复杂,不适合作多路输出。一般采用单片机作舵机的控制器。目前采用单片机做舵机控制器的方案比较多,可以利用单片机的定时器中断实现PWM 。该方案将20ms 的周期信号分为两次定时中断来完成:一次定时实现高电平定时Th ;一次定时实现低电平定时T1。Th 、T1的时间值随脉冲宽度的变换而变化,但,Th+T1=20ms。该方法的优点是,PWM 信号完全由单片机内部定时器的中断来实现,不需要添加外围硬件。缺点是一个周期中的PWM 信号要分两次中断来完成,两次中断的定时值计算较麻烦;为了满足20ms 的周期,单片机晶振的频率要降低;不能实现多路输出。也可以采用单片机+8253计数器的实现方案。该方案由单片机产生计数脉冲(或外部电路产生计数脉冲) 提供给8253进行计数,由单片机给出8253的计数比较值来改变输出脉宽。该方案的优点是可以实现多路输出,软件设计较简单;缺点是要添加l 片8253计数器,增加了硬件成本。本文在综合上述两个单片机舵机控制方案基础上,提出了一个新的设计方案,如图4所示。
该方案的舵机控制器以AT89C2051单片机为核心,555构成的振荡器作为定时基准,单片机通过对555振荡器产生的脉冲信号进行计数来产生PWM 信号。该控制器中单片机可以产生8个通道的PWM 信号,分别由AT89C2051的P1.0~Pl.7(12~19引脚) 端口输出。输出的8路PWM 信号通过光耦隔离传送到下一级电路中。因为信号通过光耦传送过程中进行了反相,因此从光耦出来的信号必须再经过反相器进行反相。方波信号经过光耦传输后,前沿和后沿会发生畸变,因此反相器采用CD40106施密特反相器对光耦传输过来的信号进行整形,产生标准的PWM 方波信号。笔者在实验过程中发现,舵机在运行过程中要从电源吸纳较大的电流,若舵机与单片机控制器共用一个电源,则舵机会对单片机产生较大的干扰。因此,舵机与单片机控制器采用两个电源供电,两者不共地,通过光耦来隔离,并且给舵机供电的电源最好采用输出功率较大的开关电源。该舵机控制器占用单片机的个SCI 串口。串口用于接收上位机传送过来的控制命令,以调节
每一个通道输出信号的脉冲宽度。MAX232为电平转换器,将上位机的RS232电平转换成TTL 电平。
(2)实现多路PWM 信号的原理
在模拟电路中,PWM 脉冲信号可以通过直流电平与锯齿波信号比较来得到。在单片机中,锯齿波可以通过对整型变量加1操作来实现,如图5所示。假定单片机程序中设置一整型变量SawVal ,其值变化范围为O ~N 。555振荡电路产生的外部计数时钟信号输入到AT89C2051的INTO 脚。每当在外部计数时钟脉冲的下降沿,单片机产生外部中断,执行外部中断INT0的中断服务程序。每产生一次外部中断,对SawVal 执行一次加1操作,若SawVal 已达到最大值N ,则对S
基于AT89C2051的多路舵机控制器设计
摘要
舵机是机器人、机电系统和航模的重要执行机构。舵机控制器为舵机提供必要的能源和控制信号。本文提出一种以外部中断计数为基础的PWM 波形实现方法。该方法具有简单方便,成本低,可实现多路独立PWM 输出的优点。 关键词 AT89(:205l 舵机控制器 外部中断PWM
舵机是一种位置伺服的驱动器。它接收一定的控制信号,输出一定的角度,适用于那些需要角度不断变化并可以保持的控制系统。在微机电系统和航模中,它是一个基本的输出执行机构。
厂商所提供的舵机规格资料,都会包含外形尺寸(mm)、扭力(kg-cm)、速度(秒/60°) 、测试电压(V)及重量(g)等基本资料。
扭力的单位是 kg-cm ,意思是在摆臂长度 1 公分处,能吊起几公斤重的物体。这就是力臂的观念,因此摆臂长度愈长,则扭力愈小。
速度的单位是 sec/60°,意思是舵机转动 60°所需要的时间。
电压会直接影响舵机的性能,例如 Futaba S-9001 在 4.8V 时扭力为
3.9kg 、速度为 0.22 秒,在 6.0V 时扭力为 5.2kg 、速度为 0.18 秒。若无特别注明,JR 的舵机都是以 4.8V 为测试电压,Futaba 则是以 6.0V 作为测试电压。所谓天下没有白吃的午餐,速度快、扭力大的舵机,除了价格贵,还会伴随著高耗电的特点。因此使用高级的舵机时,务必搭配高品质、高容量的镍镉电池,能提供稳定且充裕的电流,才可发挥舵机应有1 舵机的工作原理
以日本FUTABA-S3003型舵机为例,图1是FUFABA-S3003型舵机的内部电路。
舵机的工作原理是:PWM 信号由接收通道进入信号解调电路BA66881。的12脚进行解调,获得一个直流偏置电压。该直流偏置电压与电位器的电压比较,获得电压差由BA6688的3脚输出。该输出送人电机驱动集成电路BA6686,以驱动电机正反转。当电机转速一定时,通过级联减速齿轮带动电位器R 。,旋转,直到电压差为O ,电机停止转动。舵机的控制信号是PWM 信号,利用占空比的变化改变舵机的位置。
2 舵机的控制方法
标准的舵机有3条导线,分别是:电源线、地线、控制线,如图2所示。
电源线和地线用于提供舵机内部的直流电机和控制线路所需的能源.电压通常介于4~6V ,一般取5V 。注意,给舵机供电电源应能提供足够的功率。控制线的输入是一个宽度可调的周期性方波脉冲信号,方波脉冲信号的周期为20 ms(即频率为50 Hz)。当方波的脉冲宽度改变时,舵机转轴的角度发生改变,角度变化与脉冲宽度的变化成正比。某型舵机的输出轴转角与输入信号的脉冲宽度之间的关系可用围3来表示。
3 舵机控制器的设计
(1)舵机控制器硬件电路设计
从上述舵机转角的控制方法可看出,舵机的控制信号实质是一个可嗣宽度的方波信号(PWM)。该方波信号可由FPGA 、模拟电路或单片机来产生。采用FPGA 成本较高,用模拟电路来实现则电路较复杂,不适合作多路输出。一般采用单片机作舵机的控制器。目前采用单片机做舵机控制器的方案比较多,可以利用单片机的定时器中断实现PWM 。该方案将20ms 的周期信号分为两次定时中断来完成:一次定时实现高电平定时Th ;一次定时实现低电平定时T1。Th 、T1的时间值随脉冲宽度的变换而变化,但,Th+T1=20ms。该方法的优点是,PWM 信号完全由单片机内部定时器的中断来实现,不需要添加外围硬件。缺点是一个周期中的PWM 信号要分两次中断来完成,两次中断的定时值计算较麻烦;为了满足20ms 的周期,单片机晶振的频率要降低;不能实现多路输出。也可以采用单片机+8253计数器的实现方案。该方案由单片机产生计数脉冲(或外部电路产生计数脉冲) 提供给8253进行计数,由单片机给出8253的计数比较值来改变输出脉宽。该方案的优点是可以实现多路输出,软件设计较简单;缺点是要添加l 片8253计数器,增加了硬件成本。本文在综合上述两个单片机舵机控制方案基础上,提出了一个新的设计方案,如图4所示。
该方案的舵机控制器以AT89C2051单片机为核心,555构成的振荡器作为定时基准,单片机通过对555振荡器产生的脉冲信号进行计数来产生PWM 信号。该控制器中单片机可以产生8个通道的PWM 信号,分别由AT89C2051的P1.0~Pl.7(12~19引脚) 端口输出。输出的8路PWM 信号通过光耦隔离传送到下一级电路中。因为信号通过光耦传送过程中进行了反相,因此从光耦出来的信号必须再经过反相器进行反相。方波信号经过光耦传输后,前沿和后沿会发生畸变,因此反相器采用CD40106施密特反相器对光耦传输过来的信号进行整形,产生标准的PWM 方波信号。笔者在实验过程中发现,舵机在运行过程中要从电源吸纳较大的电流,若舵机与单片机控制器共用一个电源,则舵机会对单片机产生较大的干扰。因此,舵机与单片机控制器采用两个电源供电,两者不共地,通过光耦来隔离,并且给舵机供电的电源最好采用输出功率较大的开关电源。该舵机控制器占用单片机的个SCI 串口。串口用于接收上位机传送过来的控制命令,以调节
每一个通道输出信号的脉冲宽度。MAX232为电平转换器,将上位机的RS232电平转换成TTL 电平。
(2)实现多路PWM 信号的原理
在模拟电路中,PWM 脉冲信号可以通过直流电平与锯齿波信号比较来得到。在单片机中,锯齿波可以通过对整型变量加1操作来实现,如图5所示。假定单片机程序中设置一整型变量SawVal ,其值变化范围为O ~N 。555振荡电路产生的外部计数时钟信号输入到AT89C2051的INTO 脚。每当在外部计数时钟脉冲的下降沿,单片机产生外部中断,执行外部中断INT0的中断服务程序。每产生一次外部中断,对SawVal 执行一次加1操作,若SawVal 已达到最大值N ,则对S