标题:
基于STC89C52单片机的舵机SG90驱动程序
[打印本页]
作者:
小萝卜头
时间:
2019-8-1 17:18
标题:
基于STC89C52单片机的舵机SG90驱动程序
本人是初学单片机,若有不到之处,希望大家积极指出,共同学习
!
下面说一下驱动舵机
SG90过程中的一些经验:
1
.了解舵机基本运动机理
舵机内部结构及运动原理详细解析
(重要的是看舵机运动原理)
2
.注意我们使用的是模拟舵机(模拟舵机和数字舵机驱动方法不同)
模拟舵机
:需要不断的发送PWM信号,才可旋转到指定位置。
数字舵机
:只需给一个PWM信号,即可旋转到指定位置。
3.
使用PWM信号控制—
详细代码如下
/***************************************************
/*舵机控制
/*开关K1控制顺时针旋转 开关K2控制逆时针旋转
/*每次旋转角度由定时器1控制 定时器周期越短 精度越高
****************************************************/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit pwm=P1^0;
sbit k1=P3^0; //k1顺时针旋转
sbit k2=P3^1; //k2逆时针旋转
uchar count=0;
uchar n=14; //初始位置-在90°附近
void delay5ms()
{
unsigned char a,b;
for(b=19;b>0;b--)
for(a=130;a>0;a--);
}
void key()
{
if(k1==0)
{
delay5ms();
if(k1==0)
{
while(k1==0); //判断当键盘松开时
if(n<=25) n++;//判断是否旋转到180°
else n=26;
}
}
if(k2==0)
{
delay5ms();
if(k2==0)
{
while(k2==0); //判断当键盘松开时
if(n>=6) n--; //判断是否旋转到0°
else n=5;
}
}
}
void InitTimer()//0.1ms 12Mhz
{
TMOD = 0x01;
TH0 = 0xFF;
TL0 = 0x9C;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void main()
{
InitTimer();
while(1)
{
key();
}
}
void Timer() interrupt 1
{
TH0 = 0xFF;
TL0 = 0x9C;
count++;
if(count<=200)
{
if(count<=n)
{
pwm=1;
}
else
{
pwm=0;
}
}
else
{
count=0;
pwm=0;
}
}
复制代码
作者:
小萝卜头
时间:
2019-8-2 15:55
讲的不错
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1