標題: DM542驅(qū)動器控制電機如何使其來回轉(zhuǎn)動,有無大佬指導下? [打印本頁]

作者: 初學者Captain    時間: 2022-10-29 09:04
標題: DM542驅(qū)動器控制電機如何使其來回轉(zhuǎn)動,有無大佬指導下?
#include <REGX52.H>

unsigned char timer0;
sbit ENA=P1^0;
sbit PWM=P1^1;
sbit DIR=P1^2;

void delay(unsigned int a)
{
     unsigned char b=0;

         while(a--)
         {
            for(b=0;b<200;b++)
                {
                }
        }
}

void kongzhi_Init()
{
    TMOD|=0X11;
    TH1=0XFE;
    TL1=0X33;
    TR1=1;
    IE=0X8A;
}
void Tlzd() interrupt 3
{
    TH1=0XFE;
    TL1=0X33;
    timer0++;
}
void main()
{
     kongzhi_Init();
           while(1)
                 {
     while(1)
     {
                        
                                  DIR=1;
        if(timer0>0.1)
        {
            timer0=0;
        }
        if(timer0<1)
        {
            PWM=0;
        }
        else
        {
            PWM=1;
        }
                                       
     }
                      DIR=1;
                 if(timer0>0.1)
        {
            timer0=0;
        }
        if(timer0<1)
        {
            PWM=0;
        }
        else
        {
            PWM=1;
        }  
                                
     }
         }

步進電機2.JPG (1.6 MB, 下載次數(shù): 57)

步進電機2.JPG

作者: 初學者Captain    時間: 2022-10-29 10:36
不知道該如何調(diào)試 使其來回轉(zhuǎn)動
作者: Hephaestus    時間: 2022-10-29 12:07
改DIR就來回動了,為什么你不改?
作者: gongnn    時間: 2022-10-29 12:22
void main()
{
     kongzhi_Init();
           while(1)
                 {
     while(1)
     {
                        
                                  DIR=1;
        if(timer0>0.1)
        {
            timer0=0;
        }
        if(timer0<1)
        {
            PWM=0;
        }
        else
        {
            PWM=1;
        }
                                       
     }
                      DIR=0;
                 if(timer0>0.1)
        {
            timer0=0;
        }
        if(timer0<1)
        {
            PWM=0;
        }
        else
        {
            PWM=1;
        }  
                                
     }
         }
作者: 初學者Captain    時間: 2022-10-29 18:53
Hephaestus 發(fā)表于 2022-10-29 12:07
改DIR就來回動了,為什么你不改?

我試了下  電機還是只會往一個方向運行
作者: 初學者Captain    時間: 2022-10-29 19:10
gongnn 發(fā)表于 2022-10-29 12:22
void main()
{
     kongzhi_Init();

大佬 你這個跟我的是一樣的把  都是只會往一個方向轉(zhuǎn)到底,并不能使其來回轉(zhuǎn)動啊
作者: 初學者Captain    時間: 2022-10-29 19:19
Hephaestus 發(fā)表于 2022-10-29 12:07
改DIR就來回動了,為什么你不改?

改了 還是不行

作者: gongnn    時間: 2022-10-29 19:57
單片機有沒有供電,接線對不對。單片機定時器有沒有。

程序再簡化點,切換dir方向后直接用delay函數(shù)延時試試。
作者: 初學者Captain    時間: 2022-10-29 20:10
gongnn 發(fā)表于 2022-10-29 19:57
單片機有沒有供電,接線對不對。單片機定時器有沒有。

程序再簡化點,切換dir方向后直接用delay函數(shù)延時 ...

試過了 還是不太行
作者: Hephaestus    時間: 2022-10-29 21:02
初學者Captain 發(fā)表于 2022-10-29 19:19
改了 還是不行

測一下驅(qū)動器DIR+、DIR-兩者之間的電壓,很可能是接錯了。
作者: 初學者Captain    時間: 2022-10-29 22:16
Hephaestus 發(fā)表于 2022-10-29 21:02
測一下驅(qū)動器DIR+、DIR-兩者之間的電壓,很可能是接錯了。

用的是共陽極接法DIR+接的是正5V, DIR-接的才是I/O口 應該接線沒問題吧
作者: 初學者Captain    時間: 2022-10-30 17:02
gongnn 發(fā)表于 2022-10-29 12:22
void main()
{
     kongzhi_Init();

大佬  這個程序不行 跟我的差不多 想讓它來回轉(zhuǎn)動的話  這樣貌似不太行
作者: yzwzfyz    時間: 2022-10-31 09:43
1、前進:DIR=1,給出一個脈沖,間隔一個時間TJ,再給出一個脈沖,再間隔一個時間TJ,再……。
2、后退:DIR=0,給出一個脈沖,間隔一個時間TJ,再給出一個脈沖,再間隔一個時間TJ,再……。
3、做個定時器,時常數(shù)就是TJ,這樣每間隔一個TJ,給出一個脈沖就可以了,轉(zhuǎn)向只要切換DIR。
4、關(guān)鍵點:把TJ做成變量,讓每次的TJ都可以變化。
加速:每發(fā)一個脈沖就將TJ-N。例如:起步,將TJ調(diào)到最大,如:800ms,而后每次-5:800-5,800-5*2,800-5*3,800-5*4……,直到速最快:例如=10ms。
減速:每發(fā)一個脈沖就將TJ+N。例如:當前TJ=25,而后每次+10:25+10,25+10*2,25-10*3,25+10*4……,直到你滿意的速率。
換向:不要立即改變DIR,而是先減速,停止時(你認為可以了),再改變DIR,再從起動開始加速。
5、TJ的最小值(最快速)、最大值(停止前)、加減速的N量,自己根據(jù)負載大小實踐一下就可以得到了。

運行離開不了物理概念,主要是牛頓的加速度定律,
記。合茸龇桨福佼嫵隽鞒虉D,走通流程圖、再寫程序。
作者: 初學者Captain    時間: 2022-10-31 15:23
yzwzfyz 發(fā)表于 2022-10-31 09:43
1、前進:DIR=1,給出一個脈沖,間隔一個時間TJ,再給出一個脈沖,再間隔一個時間TJ,再……。
2、后退:D ...

大佬  能詳細地指導下嗎? 你這有點多我有點懵




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1