Robofun 機器人論壇
標題:
W78E58控制TOWARDPRO MG996R 無法控制!!(C語言採計時器中斷)
[打印本頁]
作者:
lizardon
時間:
2011-12-9 23:27
標題:
W78E58控制TOWARDPRO MG996R 無法控制!!(C語言採計時器中斷)
利用計時器中斷的程式輸出PWM給予伺服馬達MG996R作角度控制
起先用S03T的馬達,程式可動
但是換上了MG996R後他就不會動了!!!((通電後瞬間單邊轉個一下子就停了.......
不曉得到底是哪裡出問題,望請各位伺服馬達的高手能幫我這個剛碰伺服馬達的菜鳥解惑...
程式長這樣↓
#include<reg52.h>
sbit PB0=P1^2;
sbit PB1=P1^3; //定義輸入端
sbit S0=P2^0;
sbit S1=P2^1; //定義輸出端
unsigned int dutytime0=45536;
unsigned int ton0=10000;
unsigned int toff0=10000;
unsigned int temp0; // 設定T0參數
main()
{
EA=0; //關閉中段功能(所有中段副程式失效)
IE|=0x02; //開啟計時器中段功能
TMOD|=0x01; //設定計時器模式 T0=mode1
temp0=65536-dutytime0 ;
TH0=temp0/256; //填入T0高八位
TL0=temp0%256; //填入T0低八位
TR1=1; //啟動計時器 T0
EA=1; //啟動中段功能,副程式啟動
while(1)
{
if(PB0==PB1==0) ton0=1500 ; //設定初始值為1500ms (伺服馬達中立停止)
if(PB0==0)
{ton0=2200; //2.2ms 左轉
//
}
if(PB1==0)
{ton0=900; //0.9ms 右轉
}
toff0=20000-ton0;
}
}
void timer0_isr(void) interrupt 1//使用計時器0中斷副程式產生PWM
{
if(S0==1)
{
TR0=0;
temp0=65536-toff0;
TH0=temp0/256;
TL0=temp0%256;
TR0=1;
S0=0;
}
else
{
TR0=0;
temp0=65536-ton0;
TH0=temp0/256;
TL0=temp0%256;
TR0=1;
S0=1;
}
}
作者:
xu3u4rmp4
時間:
2011-12-9 23:34
我也有類似問題
S03T可動MG995不能控制.一開電就轉向單邊到底
我後來是MG995獨立供電.直接接電源供應器.與51電源分開就解決了
作者:
lizardon
時間:
2011-12-9 23:39
可是我一開始就獨立供電 也有共接地了
但情況依舊是這樣(52採5V 馬達6V
作者:
xu3u4rmp4
時間:
2011-12-9 23:44
看看接上馬達後.52輸出腳信號是否需要上拉電阻.雖然有內部上拉.但是有碰過類似狀況
作者:
lizardon
時間:
2011-12-9 23:58
這似乎有些困難@@
家裡沒有上拉電阻 可能要到明天才能出門去買了((家附近沒電子材料行的悲哀ㄒ^ㄒ
不曉得大大是否還有其他方法可以先試試看呢@@?
謝謝^^
作者:
xu3u4rmp4
時間:
2011-12-10 00:09
不然就輸出接一個緩衝器.再接馬達
作者:
lizardon
時間:
2011-12-10 18:09
它會動了!!
我給他接74LS244的三態緩衝器
只是因為目前先用麵包板與零散的導線到處亂接
所以馬達抖動的似乎有些誇張((也許是接觸不良吧
但基本上已能達到定位了^^
其餘的應該能自行找出解決的辦法~
所以謝謝大大的幫忙呀!!!
作者:
xu3u4rmp4
時間:
2011-12-11 13:19
我想到了 我之前直接接51不能控制.後來是用74595去做PWM輸出.之後才能控制
歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/)
Powered by Discuz! X3.2