使用51单片机驱动舵机程序分析

发布者:温馨生活最新更新时间:2018-06-19 来源: eefocus关键字:51单片机  驱动舵机 手机看文章 扫描二维码
随时随地手机看文章

舵机,又称伺服马达,是一种具有闭环控制系统的机电结构。舵机主要是由外 壳、电路板、无核心马达、齿轮与位置检测器所构成。其工作原理是由控制器发出PWM(脉冲宽度调制)信号给舵机,经电路板上的IC处理后计算出转动方向, 再驱动无核心马达转动,透过减速齿轮将动力传至摆臂,同时由位置检测器(电位器)返回位置信号,判断是否已经到达设定位置,一般舵机只能旋转180度。舵机有3根线,棕色为地,红色为电源正,橙色为信号线,但不同牌子的舵机,线的颜色可能不同,需要注意。

舵机的转动位置是靠控制PWM(脉冲宽度调制)信号的占空比来实现的,标准PWM(脉冲宽度调制)信号的周期固定为20ms,占空比0.5~2.5ms 的正脉冲宽度和舵机的转角-90°~90°(即0~180度)相对应。注意,由于舵机牌子不同,其控制器解析出的脉冲宽度也不同,所以对于同一信号,不同牌子的舵机旋转的角度也不同。其原理是:它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号, 控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。

   0.5ms------------0度;

   1.0ms------------45度;

   1.5ms------------90度;

   2.0ms-----------135度;

   2.5ms-----------180度;

 

采用11.0592MHZ的51单片机驱动舵机转动程序如下:

//上电自动转动  

  

#include  

  

unsigned char count;      //0.5ms次数标识  

  

sbit pwm =P1^0 ;          //PWM信号输出  

  

sbit jia =P2^4;           //角度增加按键检测IO口  

  

sbit jian =P2^5;           //角度减少按键检测IO口  

  

unsigned char jd;         //角度标识  

  

   

  

sbit pwm1 =P0^0 ;          //PWM信号输出给示波器,检测PWM波用  

  

void delay(unsigned char i)//延时  

  

{  

  

  unsigned char j,k;  

  

  for(j=i;j>0;j--)  

  

    for(k=125;k>0;k--);  

  

}  

  

void Time0_Init()          //定时器0初始化  

  

{  

  

//定时器0装初值 用示波器检测后,11.0592MHZ晶振 定时0.5ms进入中断 装初值如下  

  

TH0  = (65536-445)/256;  

  

TL0  = (65536-445)%256;  

  

   

TMOD = 0x01;    //定时器0工作在方式1     

  

IE = 0x82;  //IE=0x82=1000 0010 等价于 EA=1 开总中断  ET0=1 开定时器0中断  

  

  TR0=1;          //开定时器0  

  

}  

  

void Time0_Int() interrupt 1 //中断程序  

  

{  

  

//重装初值  

  

TH0  = (65536-445)/256;  

  

TL0  = (65536-445)%256;  

  

   

  

    if(count< jd)  

  

{  

  

 pwm=1;                  //确实小于,PWM输出高电平  

  

 pwm1=pwm;              //接示波器用的io口,观测PWM波形用        }   //判断0.5ms次数是否小于角度标识  

  

 //pwm=1;                  //确实小于,PWM输出高电平  

  

    else  

  

{  

  

 pwm=0;                  //确实小于,PWM输出高电平  

  

 pwm1=pwm;             //接示波器用的io口,观测PWM波形用 }  

  

    //  pwm=0;                  //大于则输出低电平  

  

    count=(count+1);          //0.5ms次数加1  

  

    count=count%40;     //次数始终保持为40 即保持周期为20ms  

  

}  

  

   

  

//此注销掉部分为通过按键控制舵机转动的程序,功能为通过jia按键控制正转,  

  

//通过jian按键控制反转  

  

/*void keyscan()              //按键扫描  

  

{  

  

   if(jia==0)               //角度增加按键是否按下  

  

  {  

  

    delay(10);              //按下延时,消抖  

  

    if(jia==0)              //确实按下  

  

     {  

  

      jd++;                 //角度标识加1  

  

      count=0;              //按键按下 则20ms周期从新开始  

  

      if(jd==6)  

  

        jd=5;               //已经是180度,则保持  

  

      while(jia==0);        //等待按键放开  

  

     }  

  

  }  

  

  if(jian==0)                //角度减小按键是否按下  

  

  {  

  

    delay(10);  

  

    if(jian==0)  

  

     {  

  

      jd--;                 //角度标识减1  

  

      count=0;  

  

      if(jd==0)  

  

        jd=1;               //已经是0度,则保持  

  

      while(jan==0);  

  

     }  

  

  }  

  

}*/  

  

   

void main()  

  

{  

  

//上电,舵机自动正反转      

  

//应注意每次步进是延时函数delay参数的设置,此处延时函数参数设置的并不理想      

  

while(1)  

  

{  

  

  for(jd=1;jd<6;jd++)  

  

{  

  

count=0;  

  

Time0_Init();  

  

delay(50000000);  

  

}  

  

delay(50000000);  

  

for(jd=6;jd>0;jd--)  

  

{  

  

count=0;  

  

Time0_Init();  

  

delay(50000000);  

  

}  

  

}  

  

}  


关键字:51单片机  驱动舵机 引用地址:使用51单片机驱动舵机程序分析

上一篇:51单片机PWM双舵机控制详解
下一篇:51单片机PWM程序详解

推荐阅读最新更新时间:2024-03-16 16:06

51单片机STC89C52】LCD1602液晶屏的使用
一、LCD1602模块 1、引脚说明 第 3 脚: VL 为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度 过高时会产生“鬼影”,使用时可以通过一个 10K 的电位器调整对比度。 第 4 脚: RS 为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。 第 5 脚:R/W 为读写信号线,高电平时进行读操作,低电平时进行写操作。当 RS 和 R/W 共同为低电平时可以写入指令或者显示地址,当 RS 为低电平 R/W 为高电平时可以读忙信号,当 RS 为高电平 R/W 为低电平时可以写入数据。 第 6 脚:E 端为使能端,当 E 端由高电平跳变成低电平时,液晶模块执行命令。 第 7-14 脚:D
[单片机]
【<font color='red'>51单片机</font>STC89C52】LCD1602液晶屏的使用
MCS51单片机复位原理及复位后CPU状态
⒈ 复位条件 RST引脚保持2个机器周期以上的高电平。 ⒉ 复位电路 ⒊ 复位后CPU状态 PC: 0000H TMOD: 00H Acc: 00H TCON: 00H B: 00H TH0: 00H PSW: 00H TL0: 00H SP: 07H TH1: 00H 单片机 DPTR:0000H TL1: 00H P0~P3:FFH SCON: 00H IP: 00000B SBUF: 不定 IE:0 00000B PCON: 0 0000B 任何单片机在工作之前都要有个复位的过程,复位是什么意思呢?它就象是我们上课之前打的预备铃。预备铃一响,大家就自动地从操场、其它地方进入教室了,在这一段时间里,是没有老师干预的,对单片机
[单片机]
51单片机PID的算法实现程序C语言
/* 用整型变量来实现PID算法,由于是用整型数来做的,所以也不是很精确,但是对于很多的使用场合,这个精度也够了, 关于系数和采样电压全部是放大10倍处理的.所以精度不是很高. 但是也不是那么低,大部分的场合都够了. 实在觉得精度不够, 可以再放大10倍或者100倍处理,但是要注意不超出整个数据类型的范围就可以了.本程序包括PID计算和输出两部分. 当偏差 10度全速加热,偏差在10度以内为PID计算输出. 具体的参考代码参见下面: */ //================================================================ // pid.H // Operation abou
[单片机]
数显温度计设计电路图大全(DS18B20/89S51单片机/液晶)
数显温度计设计电路图(一):液晶显示的数字式电脑温度计电路 如图为液晶显示的数字式电脑温度计电路。该八段式四位LCD显示器,内置驱动器,串行数据传送,使用方便。 液晶显示的数字式电脑温度计电路 数显温度计设计电路图(二) 介绍一种具有简单人工智能的温度控制电路,使用该电路进行温度控制时,只需将开关打在2的位置,通过设定控制温度,并通过3位半数显表头所显示的温度值,即可精确地控制温度,使得温控操作变得十分方便。LM35是一种内部电路已校准的集成温度传感器,其输出电压与摄氏温度成正比,线性度好,灵敏度高,精度适中.其输出灵敏度为10.0MV/℃,精度达 0.5℃.其测量范围为-55—150℃。在静止温度中自热效应低.工作电压较
[单片机]
数显温度计设计电路图大全(DS18B20/89S<font color='red'>51单片机</font>/液晶)
c51单片机中断详解
工程图 第一题 **每次亮一个灯的流水灯,定义P1为led1。 外部中断0允许中断:EX0=1;下降沿触发:IT0=1;总开关:EA=1; 中断要执行的是P0引脚的4个二极管闪六次。 其实这里还有个想说的是,IE在中断请求的时候,会置位为1,然后CPU同意并执行中断程序后,IE自动清零。为什么说这个,这个可以在以后的一些情况,作为中断条件。 第二题 每次亮一个灯的流水灯和第一题的一样; 中断0下降沿触发也和第二题一样; 中断0程序是:P1引脚每次亮两个二极管的流水灯 讨论一下:每次亮两个二极管,如果低电平亮,那就要11111100B→11110011B。 个人觉得在中断中使用while造成的后果是很致命的
[单片机]
c<font color='red'>51单片机</font>中断详解
基于C51单片机中的通信协议分享
一、基本格式: 通信头-》巴克码-》地址字-》长度字-》命令字-》信息位-》校准字 1.通信头:占1~8个字节,表通信开始(0x00、0xff不能用作通信头); 2.巴克码:占1字节,一般为0x72,表通信头结束; 3.地址字:表终端的地址,占1字节(0x00作为广播地址); 4.长度字:占1字节,表示从地址字到信息位之间的字节数; 5.命令字:占1字节,指示终端的不同操作; 6.信息位:不定长,从0~252字节; 7.校验位:两个字节,采用和校验及CRC校验。 二、应答 1.如果终端接收正确,则应答ACK;如果终端接收错误,则应答NAK; 2.发送方收到ACK,此次通信结束; 3.发送方收到NAK,重发刚才的命令字(最多7次
[单片机]
基于C<font color='red'>51单片机</font>中的通信协议分享
51单片机在智能时钟控制系统中的应用设计
随着电子技术产业结构调整,生产工艺的飞速发展,人们生活水平的不断提高,家用电器逐渐普及,市场对于智能时钟控制系统的需求也越来越大。本文所述智能时钟控制系统主要指时钟显示、时间设置、闹铃及家用电器定时开关机(可扩展功能)等控制系统。 本文采用进入市场时间早、总线开放、仿真开发设备多、芯片及其开发设备价格低廉、速度较快、电磁兼容性较好的MCS-51型单片机为核心实现智能时钟控制。 硬件系统设计 智能时钟控制系统以MCS-51兼容单片机AT89C51微处理器为核心,由时钟显示模块、定时控制模块、电源模块等电路组成。 AT89C51微处理器 AT89C51是一款采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-
[单片机]
<font color='red'>51单片机</font>在智能时钟控制系统中的应用设计
大神教你快速上手:标准80C51单片机模拟I2C总线的主机程序
I2C总线协议程序 在做程序是我在网上找的是周立功的程序,感觉还不错顺便转载;在使用的过程中一定要注意时序、时间的问题。 “i2c.h文件” //I2C总线综合发送函数,向从机发送多个字节的数据 I2C读写EEPROM流程图 bit I2C_Puts( unsigned char SlaveAddr, unsigned int SubAddr, unsigned char SubMod, char *dat, unsigned int Size ); //I2C总线综合接收函数,从从机接收多个字节的数据 bit I2C_Gets ( unsigned char SlaveAddr, unsigned int SubAddr
[单片机]
大神教你快速上手:标准80C<font color='red'>51单片机</font>模拟I2C总线的主机程序
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved