AT89C2051多路舵机控制电路详解
舵机是一种位置伺服的驱动器 。它接收一定的控制信号 , 输出一定的角度 , 适用于那些需要角度不断变化并可以保持的控制系统 。在微机电系统和航模中 , 它是一个基本的输出执行机构 。以FUTABA-S3003型舵机为例 , 图1是FUFABA-S3003型舵机的内部电路 。
舵机的工作原理是:PWM信号由接收通道进入信号解调电路BA66881 。的12脚进行解调 , 获得一个直流偏置电压 。该直流偏置电压与电位器的电压比较 , 获得电压差由BA6688的3脚输出 。该输出送人电机驱动集成电路BA6686 , 以驱动电机正反转 。当电机转速一定时 , 通过级联减速齿轮带动电位器R 。 , 旋转 , 直到电压差为O , 电机停止转动 。舵机的控制信号是PWM信号 , 利用占空比的变化改变舵机的位置 。
舵机的控制方法
电源线和地线用于提供舵机内部的直流电机和控制线路所需的能源.电压通常介于4~6V , 一般取5V 。注意 , 给舵机供电电源应能提供足够的功率 。控制线的输入是一个宽度可调的周期性方波脉冲信号 , 方波脉冲信号的周期为20ms(即频率为50Hz) 。当方波的脉冲宽度改变时 , 舵机转轴的角度发生改变 , 角度变化与脉冲宽度的变化成正比 。某型舵机的输出轴转角与输入信号的脉冲宽度之间的关系可用围3来表示 。
舵机控制器硬件电路设计
从上述舵机转角的控制方法可看出 , 舵机的控制信号实质是一个可嗣宽度的方波信号(PWM) 。该方波信号可由FPGA、模拟电路或单片机来产生 。采用FPGA成本较高 , 用模拟电路来实现则电路较复杂 , 不适合作多路输出 。一般采用单片机作舵机的控制器 。目前采用单片机做舵机控制器的方案比较多 , 可以利用单片机的定时器中断实现PWM 。该方案将20ms的周期信号分为两次定时中断来完成:一次定时实现高电平定时Th;一次定时实现低电平定时T1 。Th、T1的时间值随脉冲宽度的变换而变化 , 但 , Th+T1=20ms 。该方法的优点是 , PWM信号完全由单片机内部定时器的中断来实现 , 不需要添加外围硬件 。缺点是一个周期中的PWM信号要分两次中断来完成 , 两次中断的定时值计算较麻烦;为了满足20ms的周期 , 单片机晶振的频率要降低;不能实现多路输出 。也可以采用单片机+8253计数器的实现方案 。该方案由单片机产生计数脉冲(或外部电路产生计数脉冲)提供给8253进行计数 , 由单片机给出8253的计数比较值来改变输出脉宽 。该方案的优点是可以实现多路输出 , 软件设计较简单;缺点是要添加l片8253计数器 , 增加了硬件成本 。本文在综合上述两个单片机舵机控制方案基础上 , 提出了一个新的设计方案 , 如图4所示 。
该方案的舵机控制器以AT89C2051($0.5940)单片机为核心 , 555构成的振荡器作为定时基准 , 单片机通过对555振荡器产生的脉冲信号进行计数来产生PWM信号 。该控制器中单片机可以产生8个通道的PWM信号 , 分别由AT89C2051的P1.0~Pl.7(12~19引脚)端口输出 。输出的8路PWM信号通过光耦隔离传送到下一级电路中 。因为信号通过光耦传送过程中进行了反相 , 因此从光耦出来的信号必须再经过反相器进行反相 。方波信号经过光耦传输后 , 前沿和后沿会发生畸变 , 因此反相器采用CD40106($0.1125)施密特反相器对光耦传输过来的信号进行整形 , 产生标准的PWM方波信号 。笔者在实验过程中发现 , 舵机在运行过程中要从电源吸纳较大的电流 , 若舵机与单片机控制器共用一个电源 , 则舵机会对单片机产生较大的干扰 。因此 , 舵机与单片机控制器采用两个电源供电 , 两者不共地 , 通过光耦来隔离 , 并且给舵机供电的电源最好采用输出功率较大的开关电源 。该舵机控制器占用单片机的个SCI串口 。串口用于接收上位机传送过来的控制命令 , 以调节每一个通道输出信号的脉冲宽度 。MAX232($2.0686)为电平转换器 , 将上位机的RS232($780.5000)电平转换成TTL电平 。
实现多路PWM信号的原理
【AT89C2051多路舵机控制电路详解】在模拟电路中 , 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波形 。
推荐阅读
- 多路开关状态指示设计
- 基于AT89C2051单片机的VCN-MIO智能节点模板电路设计
- pic单片机高手篇,pic单片机多路ad切换程序+循环程序介绍
- CASE:创建多路分支
- 利用TOPSwitch-GX单片机实现多路输出开关电源的电路设计方案