资源描述
摘要 舵机就是机器人、机电系统与航模得重要执行机构。舵机控制器为舵机提供必要得能源与控制信号。本文提出一种以外部中断计数为基础得PWM波形实现方法。该方法具有简单方便,成本低,可实现多路独立PWM输出得优点。
关键词 AT89(:205l 舵机控制器 外部中断PWM
舵机就是一种位置伺服得驱动器。它接收一定得控制信号,输出一定得角度,适用于那些需要角度不断变化并可以保持得控制系统。在微机电系统与航模中,它就是一个基本得输出执行机构。
1 舵机得工作原理
以日本FUTABA-S3003型舵机为例,图1就是FUFABA-S3003型舵机得内部电路。
舵机得工作原理就是:PWM信号由接收通道进入信号解调电路BA6688L得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;一次定时实现低电平定时Tl。Th、Tl得时间值随脉冲宽度得变换而变化,但,Th+Tl=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,则对SawVal清O。SawVal值得变化规律相当于锯齿波,如图5所示。若在单片机程序中设置另一整型变量DutyVal,其值得变化范围为O~N。每当在SawVal清0时,DulyVal从上位机发送得控制命令中读入脉冲宽度系数值,例如为H(0≤H≤N)。若DutyVal≥SawVal,则对应端口输出高电平;若DutyVal<Sawval,则对应端口输出低电平。从图5中可瞧出,若改变DutyVal得值,则对应端口输出脉冲得宽度发生变化,但输出脉冲得频率不变,此即为PWM波形。设外部计数时钟周期为TINT0,锯齿波周期(PWM脉冲周期)为TPWM,
PWM脉冲宽度占空比为D,由图5可得出如下关系:
由式(3)可知,PWM波形得周期TPWM一旦确定下来,只须选定计数最大值N,就可以确定外部时钟脉冲所需周期(频率)。外部时钟脉冲周期TINT0显然就是PWM脉冲宽度变换得最小步距,即调节精度。由式
(4)可知,N越大,步距所占PWM周期得百分比越小,精度越高。例如,若采用8位整型变量,最大值N=28-1=255,则精度为1/(255+1)=1/255;若采用16位整型变量,最大值N=216-1=65535,则精度为1/65536。文中计数变量SawVal采用8位整型变量,因此N=255。对于一般应用,其精度已足够。就舵机而言,要求TPWM=20ms,则可算得外部时钟周期为:
因此,设计555振荡电路时,其输出脉冲得频率应为:
当有多个变量与SawVal比较,将比较结果输出到多个端口时。就形成了多路PWM波形。各个变量得值可以独立变化,因此各路PWM波形得占空比也可以独立调节,互不相干。多路PWM波形得产生如图6所示。图中以3路PWM波形为例。
4 舵机控制器软件得设计
舵机控制器得控制核心为单片机AT89C2051。文中,程序用C5l编写,工作方式为前后台工作方式。单片机程序包括系统初始化程序、串口通信程序、上位机命令解释与PWM脉宽生成程序与多路PWM波形输出程序。串行通信程序与多路PWM波形输出程序采用中断方式。串口通信格式为渡特率9600bps、8位数据位、1位停止位、无校验、ASCII码字符通信。串口通信程序用于接收上位机发送过来得控制命
令。控制命令采用自定义文本协议,即协议内容全部为ASCII码字符。通信协议格式如图7所示。
例如,要控制通道1得PWM脉宽,脉宽系数为25,则通信协议内容为“#”“1”“0”“2”“5”“!”这6个字符。这时通道l得P
展开阅读全文