360°サーボ制御

ここに画像の説明を挿入
360°サーボの回転を制御する方法:

1.制御信号はパルス幅変調(PWM)信号であり、どのマイクロコントローラーでもこの信号を簡単に生成できます。この記事では、Arduino開発環境で一般的に使用されるマイクロコントローラーについて説明します。
2.高レベルのパルスは1〜2ミリ秒(ms)、つまり1000〜2000マイクロ秒(µs)持続します。1000µsでは、サーボは完全に左になります。2000µsで、ラダーは完全に右です。ただし、パルス幅を調整して、より広い範囲またはより狭い範囲のモーションを実現できます。
3.制御パルスの低レベルは20ミリ秒続きます。20ミリ秒(毎秒50回)ごとに、再び高レベルにジャンプする必要があります。そうしないと、ステアリングギアが当たり、安定性を維持することが困難になります。しかし、足を引きずって踊りたい場合は、この方法をとることができます。

ここに画像の説明を挿入

ここに画像の説明を挿入

コード:
ここに画像の説明を挿入

茶色-------------------- GND
赤------------------------- VCC
オレンジ----------信号線

ここに画像の説明を挿入

#include
#define uchar unsigned char
#define uint unsigned int

sbit pwm=P1^0; //信号输出
sbit k1=P3^1; //按键k1接P3^1,控制顺时针旋转
sbit k2=P3^2; //按键k2接P3^2,控制逆时针旋转

uchar count=0;
uchar n=5; //初始位置-在0°附近 改变n值可以改变舵机的初始位置
          //这个n值在不同的舵机可能存在一点误差,可以改变他的值来试试具体位置
void delay5ms() //延时5ms
{
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=3;
		}
	}
}

void InitTimer()  // 定时器设置 0.1ms 11.0592Mhz
{
TMOD = 0x01;
TH0 = 0xFF;
TL0 = 0XA3;
EA = 1;
ET0 = 1;
TR0 = 1;
}

void main()
{
InitTimer();
while(1)
{
key();
}
}

void Timer() interrupt 1 //特别注意此处,0--外部中断0,1--定时器中断0,2--外部中断1
{              //3--定时器中断1,4--串口中断1
TH0 = 0xFF;
TL0 = 0xA3;
count++;
if(count<=200)
{
if(count<=n)
{
pwm=1;
}
else
{
pwm=0;
}
}
else
{
count=0;
pwm=0;
}
}

ここに画像の説明を挿入

153の元の記事を公開 248のような 330,000以上の 訪問

おすすめ

転載: blog.csdn.net/qq_45172832/article/details/105429624