如何用51单片机控制舵机的??单片机程序是怎么写的?希望你也能给我发一个编写程序和电路图

邮箱 tyler88@126.com

单片机系统实现对舵机输出转角的控制,必须首先完成两项任务:首先,产生基本的PWM周期信号,即产生20ms的周期信号;其次,调整脉宽,即单片机调节PWM信号的占空比。单片机能使PWM信号的脉冲宽度实现微秒级的变化,从而提高舵机的转角精度。单片机完成控制算法,再将PWM信号输出到舵机。
发一个自己原来写的简单的。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar count,jd;
sbit pwm=P1^0;
sbit jia=P3^2;
sbit jian=P3^3;
uchar code table[10] = {0x3f,0x06,0x5b,
0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f};
//延时函数
void delay(uchar x)
{
uchar i,j;
for(i=x;i>0;i--)
for(j=125;j>0;j--);

}
//定时器初始化
void Time0_init()
{
TMOD=0x01; //定时器0工作方式1
IE=0x82;
TH0=0xfe;
TL0=0x33; //11.0592MHZ晶振,0.5ms
TR0=1;
}
//定时器0中断程序
void Time0() interrupt 1
{
TH0=0xfe;
TL0=0x33;
if(count<jd) //判断0.5ms次数是否小于角度标识
pwm=1; //是,pwm输出高电平
else
pwm=0; //否,输出低电平
count=count+1;
count=count%40; //次数始终保持为40,即保持周期为20ms
}
//按键扫描
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--;
count=0;
if(jd==0)
jd=1; //已经0度,保持
while(jian==0);
}
}
}
//数码管显示
void display()
{
uchar bai ,shi,ge ;
switch(jd)
{
case 1:
bai=0;
shi=0;
ge=0;
break;
case 2:
bai=0;
shi=4;
ge=5;
break;
case 3:
bai=0;
shi=9;
ge=0;
break;
case 4:
bai=1;
shi=3;
ge=5;
break;
case 5:
bai=1;
shi=8;
ge=0;
break;
}
P0=table[bai];
P2=1;
delay(5);
P0=table[shi];
P2=2;
delay(5);
P0=table[ge];
P2=3;
delay(5);
}
void main()
{
//jd=1;
count=0;
Time0_init();
while(1)
{
keyscan();
display();
}
}
电路图很简单的,几个按键,再在单片机最小系统上接出一个信号线,再给舵机供上电就可以了。追问

但舵机只有三条线啊,怎样连接啊?根据你的编程能附上个图吗?

追答

画图太慢,描述一下,得了。红色VCC,橙色信号线,棕色GND。数码管和按键都会用吧?那些管口随便定义。如果你还不懂,只能说你没见过舵机,没看过有关舵机的资料,再看看书,在问吧。

追问

恩,已经看过资料了解过了,但还是不大明白那个按键是怎样连接的,我是个菜鸟,希望能给个图,谢谢!

追答

基本就是这样,接线随便。大哥你是我解答次数最多的一个人,如果你真的是初学者就基础一点吧,多看看流水灯,数码管,按键……一些基本的模块。不要好高骛远,不然你现在做的这些东西都是空中楼阁。你连我说换个管脚都不了解,你让我如何解答,一些知识还是要自己要付出学习才能学的到,不要什么问题都追问到底,给自己留一些思考的空间。话不说透,点到为止,祝你单片机学习之路辉煌。

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-10-06
朋友你好,单片机的舵机控制是有多种控制方式的,单片机程序通常是用汇编和c语言编写的,你可以进我的空间看看,有一些我写的或我转载的单片机程序,有一些单片机知识,希望能对你有用,祝你好运!朋友。

如何用51单片机控制舵机的??单片机程序是怎么写的?希望你也能给我发...
单片机系统实现对舵机输出转角的控制,必须首先完成两项任务:首先,产生基本的PWM周期信号,即产生20ms的周期信号;其次,调整脉宽,即单片机调节PWM信号的占空比。单片机能使PWM信号的脉冲宽度实现微秒级的变化,从而提高舵机的转角精度。单片机完成控制算法,再将PWM信号输出到舵机。发一个自己原来写的简单的。

怎么用51单片机控制舵机?
1 单片机,舵机,电源共地;2 用两个稳压芯片进行供电,将电源分开来;3 舵机信号端没有直接连接单片机IO口,我串了一个10K的电阻,也就是这一步之后就可以控制舵机。

求51单片机直接控制舵机转动角度的程序
include<REG52.H> define OUT P0 define CON P2 define ms0_5Con 461 define ms2_5Con 2304 typedef unsigned char unit8;typedef unsigned short unit_16;sbit servo0=OUT^0;sbit servo1=OUT^1;sbit servo2=OUT^2;sbit servo3=OUT^3;sbit servo4=OUT^4;sbit servo5=OUT^5;sbit serv...

设计分享 | 基于51单片机理解SG90舵机原理并用按键控制
设计分享:基于51单片机的SG90舵机控制与按键操作本文主要介绍了如何利用51单片机(如AT89C52)配合SG90舵机,通过按键实现舵机角度的精确控制。当按下开关时,舵机将按照预定顺序运行至0°、45°、90°、135°、180°,然后回到0°。每个角度转动时间间隔为1秒,涉及外部中断和PWM脉宽调制技术的运用。SG90舵机...

51单片机如何控制舵机左转和右转,以及舵机左右转的原理,谢谢
其工作流程为:控制信号→控制电路板→电机转动→齿轮组减速→舵盘转动→位置反馈电位计→控制电路板反馈。流,才可发挥舵机应有的性能。 舵机的控制信号周期为20MS的脉宽调制(PWM)信号,其中脉冲宽度从0.5-2.5MS,相对应的舵盘位置为0-180度,呈线性变化。也就是说,给他提供一定的脉宽,它的...

如何用c51编写51单片机控制步进电机转动程序
上面程序执行完之后:(A)=50H;sp=50H(因为在程序中,sp减了两次,后来又加了两次,在程序最后ret有在返回的时候减了两次,即地址出栈,故最终结果是50h。(51h)=30h;(52h)=50h;因为ret指令返回时,出栈的结果是高地址=(52h)=50h;而低地址=(51h)=30h;故最终结果pc值是5030h;...

51单片机如何编写程序?
1、51为内核的单片机有很多的品牌,首先要确定是哪种品牌的单片机,不同品牌的单片机编写程序会有一些差别,主要的差别在头文件和寄存器上,在逻辑实现上是没有差别的;2、使用一款合适的编程软件,目前比较主流的编程软件是keil;3、编写程序的步骤:(1)引入头文件;(2)宏定义;(3)函数初始化定义...

51单片机里如何控制舵机按键操作转动的角度为1度?
打开定时器1,并在某个引脚输出高电平,定时器1中断时再将这个引脚置低电平,这样就 产生了PWM波 定义一个变量,主程序检测按键,根据按键按下次数改变变量的值,再根据变量值决定定时器1的初值,即可改变PWM占空比,从而改变舵机角度 当然你要计算出舵机每转一度,PWM波的占空比应该变化多少。

怎么用c语言编程51单片机读写程序?
编程代码如下:ORG 0000H MOV DPTR,#1000H ;给源数据块地址指针DPTR赋初值 MOV P2, #20H ;给目的数据块地址指针P2和R0赋初值 MOV RO,#00H LOOP: MOVX A, @DPTR .MOVX @RO, A .INC DPTR INC RO CJNE RO,#64H, LOOP SJMP

51单片机怎么和舵机相连。我见有人说不能直接,要有驱动芯片ULN2003,可 ...
因为单片机本身输出电流很小(不超过20mA),直接连舵机,很容易把单片机烧坏。ULN2003起的作用就是一个电流放大器(最大500mA),像接电流表一样把它串到单片机输出口和舵机之间就行了,ULN2003是一个输入对用一个输出,外加一个公共地,没有其他任何外围电路。需要注意的是单片机输出高电平时,ULN2003...

相似回答