導航:首頁 > 編程語言 > sg90舵機控製程序

sg90舵機控製程序

發布時間:2023-05-16 04:07:51

1. 怎麼用C++控制TOWER PRO SG90舵機,導入PWMCtrlDLL.dll,不用單片機

插在電腦上能控制,不過是測量。不能總是用電腦控制舵機的,要用舵機,脫離電腦後還是要用單片機。

2. 怎麼用單片機控制sg90舵機

舵機除了電源,就一根控制線
要求給它周期為20ms的脈沖,高電平時間在1.0至2.0ms之間
對應-90度至+90的轉角,1.5ms對應0度轉角
可以用定時器產生PWM脈沖
電流判跡不需很大,單片機IO如果不能直接驅動,悉沖察可以加一級簡單的睜茄放大

3. 用AT89S52 wifi控制 L298N驅動四個馬達 加一個可以轉動的SG90 9G舵機舵機 的程序

#include<模埋reg52.h>
#include<intrins.h>

#define uchar unsigned char
#define uint unsigned int

sbit P3_2=P3^2; //保留

sbit P3_4=P3^4; //led控制
sbit P3_6=P3^6; //舵機控制
sbit P3_7=P3^7;
sbit P2_0=P2^0; //電機速度控制 (沒用)
sbit P2_1=P2^1;
uchar io1=20,io2=20,sdd1=1,sdd2=1; //舵機及電機初始狀態變數
uchar temp[1],cmd1[4],cmd2[4],cmd3[4],cmd4[4],cmd5[4]; //存放WIFI串口發下來的數據
uchar IRCOM[7];
void chaoshengbo_conv(void);
/********************************************************************
* 名稱 : Delay_1ms()
* 功能 : 延時子程序,延時時間為 1ms * x
* 輸入 : x (延時一毫秒的個數)
* 輸出 : 無
***********************************************************************/
void Delay_1ms(uint i)//1ms延時
{
uint x,j;
for(j=0;j<i;j++)
for(x=0;x<=300;x++);
}
void delay_ms(uint z)//延時函數
{
uint x,y;
for(x=2000;x>0;x--)
for(y=z;y>0;y--);
}

void delay1_us(uint z)//延時函數
{
uint x,y;
for(x=200;x>0;x--)
for(y=z;y>0;y--);
}

void forward(void)
{
P1=0xaa;
}

void right(void)//右轉
{
P1=0xa5;
}

void left(void)//左右
{
P1=0x5a;
}

void back(void)//後退
{
P1=0x55;
}

void stop(void)//停止
{
P1=0xff;
}
/********************************************************************
* 名稱 : Com_Int()
* 功能 : 串口中斷子函數
* 輸入 : 無
* 輸出槐輪 : 無
***********************************************************************/
uchar cont=0;
void UART() interrupt 4//串口
{
RI=0;
temp[cont]=SBUF;
if(SBUF!=0xff)
{
if(temp[0]==0x01)
{
cmd1[cont]= temp[cont];
}
else if(temp[0]==0x02)
{
cmd2[cont]= temp[cont];
}
else if(temp[0]==0x03)
{
cmd3[cont]= temp[cont];
}
else if(temp[0]==0x04)
{
cmd4[cont]= temp[cont];
}
else if(temp[0]==0x05)
{
cmd5[cont]= temp[cont];
}
cont++;
}
else
{
cont=0;
}
}

/********************************************************************
* 名稱 : Com_Init()
* 功能 : 串口初始化,晶振11.0592,波特率9600,使能了串口中鉛碼信斷
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void Com_Init(void)
{
TMOD = 0x21;
PCON = 0x00;
SCON = 0x50;
TH1 = 0xFa; //22.0592晶振設置波特率 9600
TL1 = 0xFa;
TR1 = 1; //啟動定時器1

RCAP2H=0xff;
RCAP2L=0x54;
TR2=1;
ET2=1;

EA=1; //開總中斷
// EX1=1; //外部中斷1 允許
// IT1=1; //中斷由下降沿 觸發
PCON=0;
IP=0X10; //中斷優先順序為PX1、PS
ES = 1; //開串口中斷
EA = 1; //開總中斷
cmd5[2]=15; //舵機初始位置
}

uchar t1=0,t2=0;

void timer2() interrupt 5 //舵機頻率50hz 100us一次
{
RCAP2H=0xff;
RCAP2L=0x54;
TF2=0;
t1++;
t2++;
if(t1==io1) //io 為串口接收到的速度數據十進制 從10到30
{
P3_6=0; //舵機控制端1
}
else if(t1==200)
{
P3_6=1;
t1=0;
}
if(t2==io2) //io 為串口接收到的速度數據十進制 從10到30
{
P3_7=0; //舵機控制端(2)
}
else if(t2==200)
{
P3_7=1;
t2=0;
}
}
uchar sd1=0,sd2=0;
void timer0() interrupt 1 //電機頻率100HZ
{
TH0=0xfe;
TL0=0x0b;
sd1++;
sd2++;
if(sd1==sdd1) //sdd 為串口接收到的速度數據十進制 從0到30
{
P2_0=0;
}
else if(sd1==31)
{
P2_0=1;
sd1=0;
}
if(sd2==sdd2) //sdd 為串口接收到的速度數據十進制 從0到30
{
P2_1=0;
}
else if(sd2==31)
{
P2_1=1;
sd2=0;
}
}

/********************************************************************
* 名稱 : Main()
* 功能 : 主函數
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void main()
{
Delay_1ms(100);
P1=0xff;
P2=0xff;
P3=0xff;
Com_Init();
while(1) // 為WIFI操控
{
if(cmd1[1]==0x01)
{
forward();
}
else if(cmd1[1]==0x02)
{
left();
}
else if(cmd1[1]==0x03)
{
right();
}
else if(cmd1[1]==0x04)
{
back();
}
else if(cmd1[1]==0x00)
{
stop();
}

if(cmd3[1]==0x01)//cmd3[1]==0x01 為WIFI操控燈
{
P3_4=1;// 燈亮
}
else if(cmd3[1]==0xfe)
{
P3_4=0;// 燈滅
}
else if(cmd3[1]==0x02)//cmd3[1]==0x02 為WIFI操控蜂鳴器
{
P3_5=0; // 蜂鳴器鳴叫
}
else if(cmd3[1]==0x03)//cmd3[1]==0x02 為WIFI操控蜂鳴器
{
P3_5=1; // 蜂鳴器停止
}

if(temp[0]==0x04) //cmd3[1]==0x01 為WIFI操控電機速度
{
if(cmd4[1]==0x01)//控制小車行駛速度
{
sdd1=cmd4[2]; //cmd4[1] 為串口接收到的速度數據十進制 從10到30
}
else if(cmd4[1]==0x02)
{
sdd2=cmd4[2]; //cmd4[1] 為串口接收到的速度數據十進制 從10到30
}
}

if(temp[0]==0x05)
{
if(cmd5[1]==0x01)//cmd5[0]==0x05 為WIFI操控攝像頭舵機
{
io1=cmd5[2]; //cmd5[2] 為串口接收到的速度數據十進制 從10到30
}
else if(cmd5[1]==0x02)
{
io2=cmd5[2]; //cmd5[2] 為串口接收到的速度數據十進制 從10到30
}
}
Delay_1ms(1);
}
}

4. arino控制sg90舵機燒進程序後一直不停的轉,那麼怎麼給舵機一個停止信號呢

應該是你舵機選錯了,選成360度旋轉的舵機了

5. 怎麼用單片機控制sg90舵機。我程序用過很多,基本都是上電 動一下,然後就沒反應了,要不就是很慢地

單片機要發生一個50hz的pwm信號,高電平在1ms到2ms之間。這pwm信號是一直輸給舵機的

閱讀全文

與sg90舵機控製程序相關的資料

熱點內容
怎麼他么怎麼又網路了 瀏覽:649
java會出現內存泄露么 瀏覽:617
蘋果4s鎖屏後怎麼還顯示歌曲 瀏覽:207
鴻蒙系統文件管理哪些可以刪除 瀏覽:550
ubuntuqt創建工程沒有配置文件 瀏覽:126
網站登錄變成其他網站怎麼處理 瀏覽:202
ug數控編程學校有哪些 瀏覽:203
java圖片上傳顯示 瀏覽:402
ppt的文件名後綴 瀏覽:902
ug編程軟體下載到哪個盤 瀏覽:359
炫酷字體APP下載的文件在哪裡 瀏覽:668
廊坊哪裡有少兒編程機構 瀏覽:312
cad新文件能找回來嗎 瀏覽:951
導出手機qq文件到u盤 瀏覽:456
電腦如何打開ppt文件怎麼打開方式 瀏覽:782
魅族鎖定區文件夾 瀏覽:357
刻字cnc怎麼編程 瀏覽:182
學校的網路拓撲結構圖 瀏覽:784
收集100個pdf文件里關鍵詞 瀏覽:594
蘋果關閉4g網路設置 瀏覽:289

友情鏈接