lizardon 發表於 2011-12-9 23:27:33

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:43

我也有類似問題
S03T可動MG995不能控制.一開電就轉向單邊到底
我後來是MG995獨立供電.直接接電源供應器.與51電源分開就解決了

lizardon 發表於 2011-12-9 23:39:28

可是我一開始就獨立供電 也有共接地了
但情況依舊是這樣(52採5V 馬達6V

xu3u4rmp4 發表於 2011-12-9 23:44:23

看看接上馬達後.52輸出腳信號是否需要上拉電阻.雖然有內部上拉.但是有碰過類似狀況

lizardon 發表於 2011-12-9 23:58:09

這似乎有些困難@@
家裡沒有上拉電阻 可能要到明天才能出門去買了((家附近沒電子材料行的悲哀ㄒ^ㄒ
不曉得大大是否還有其他方法可以先試試看呢@@?
謝謝^^

xu3u4rmp4 發表於 2011-12-10 00:09:47

不然就輸出接一個緩衝器.再接馬達

lizardon 發表於 2011-12-10 18:09:58

它會動了!!
我給他接74LS244的三態緩衝器
只是因為目前先用麵包板與零散的導線到處亂接
所以馬達抖動的似乎有些誇張((也許是接觸不良吧
但基本上已能達到定位了^^
其餘的應該能自行找出解決的辦法~
所以謝謝大大的幫忙呀!!!

xu3u4rmp4 發表於 2011-12-11 13:19:04

我想到了    我之前直接接51不能控制.後來是用74595去做PWM輸出.之後才能控制
頁: [1]
查看完整版本: W78E58控制TOWARDPRO MG996R 無法控制!!(C語言採計時器中斷)