找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2800|回復(fù): 15
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)通過(guò)步進(jìn)電機(jī)驅(qū)動(dòng)器控制兩相步進(jìn)電機(jī)問(wèn)題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:984161 發(fā)表于 2022-10-31 10:22 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
請(qǐng)教一下各位大佬我現(xiàn)在目的是:步進(jìn)電機(jī)的軸上接的一個(gè)套筒用來(lái)擰螺栓頭,螺栓上帶有一個(gè)扭力彈簧,通過(guò)51單片機(jī)給脈沖給步進(jìn)電機(jī)驅(qū)動(dòng)器,控制步進(jìn)電機(jī)轉(zhuǎn)動(dòng)固定的角度,就給彈簧加了固定的扭力。(電機(jī)的力矩是13N*m,而我需要給彈簧預(yù)加的力矩是5N*m)

遇到的問(wèn)題是:電機(jī)轉(zhuǎn)動(dòng)時(shí)和完全停止后我感覺(jué)力矩是足夠用的,彈簧的力也不會(huì)使電機(jī)失步或者反轉(zhuǎn)。但是在電機(jī)轉(zhuǎn)動(dòng)到設(shè)定的角度時(shí),停止的一瞬間,感覺(jué)力矩會(huì)丟失一瞬間。導(dǎo)致彈簧的力會(huì)使電機(jī)回轉(zhuǎn)1~2個(gè)步距角,就感覺(jué)電機(jī)的力矩不夠一樣,但是停止后就穩(wěn)定了。請(qǐng)教一下這是什么問(wèn)題?感謝賜教。
另外:①開關(guān)電源的電流選型是夠了的,比電機(jī)的額定電流大。
                ②驅(qū)動(dòng)器的電流開關(guān)是設(shè)置對(duì)了的,與電機(jī)匹配

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:984161 發(fā)表于 2022-10-31 10:27 | 只看該作者
程序如下,因?yàn)槲医恿艘粋(gè)腳踏開關(guān),踩一下計(jì)數(shù),并且數(shù)碼管顯示,所以7219各位可以忽略,只關(guān)注電機(jī)部分就可以了。
#include<reg52.h>

sbit PUL = P1^0;
sbit DIR = P1^1;
sbit Max7219_pinCLK = P1^6;
sbit Max7219_pinCS  = P1^5;
sbit Max7219_pinDIN = P1^4;
sbit KEY = P1^3;

unsigned int puls;

void Delay_xms(unsigned int x)
{
unsigned int i,j;
for(i=0;i<x;i++)
  for(j=0;j<112;j++);
}

void Write_Max7219_byte(unsigned char DATA)         
{
            unsigned char i;   
                Max7219_pinCS=0;               
            for(i=8;i>=1;i--)
          {                  
            Max7219_pinCLK=0;
            Max7219_pinDIN=DATA&0x80;
            DATA=DATA<<1;
            Max7219_pinCLK=1;
           }                                 
}

void Write_Max7219(unsigned char address,unsigned char dat)
{
     Max7219_pinCS=0;
         Write_Max7219_byte(address);        
     Write_Max7219_byte(dat);               
         Max7219_pinCS=1;                        
}

void Init_MAX7219(void)
{
Write_Max7219(0x09, 0xFF);
Write_Max7219(0x0a, 0x03);      
Write_Max7219(0x0b, 0x07);      
Write_Max7219(0x0c, 0x01);      
Write_Max7219(0x0f, 0x00);      
}



void StepMotorRun();
void Delay200us();
void DesplayLed();

unsigned char LED[8] = {0,0,0,0,0,0,0,0};
unsigned char code LedChar[] = {  //數(shù)碼管顯示字符轉(zhuǎn)換表
    0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,0x8,0x9
};

unsigned long sec=0;
bit flag = 1;

void main()
{
        DIR = 1;
        Delay_xms(50);
        Init_MAX7219();
        Delay_xms(2000);
        Write_Max7219(0x0f, 0x00);         //顯示測(cè)試:1;測(cè)試結(jié)束,正常顯示:0
        while(1)
        {
                DesplayLed();
                if(KEY != flag)
                {
                        flag = KEY;
                        Delay_xms(10);
                        if(KEY == 0)
                        {
                                sec++;
                                StepMotorRun();
                        }
                }       
        }
}

void StepMotorRun()
{
        puls = 1600;
        while(puls--)
        {
                PUL = 0;
                Delay200us();
                PUL = 1;
                Delay200us();
        }

}

void Delay200us()                //@12.000MHz
{
        unsigned char i, j;

        i = 3;
        j = 82;
        do
        {
                while (--j);
        } while (--i);
}



void DesplayLed()
{
        unsigned char j;
        LED[0] = LedChar[sec%10];
        LED[1] = LedChar[sec/10%10];
        LED[2] = LedChar[sec/100%10];
        LED[3] = LedChar[sec/1000%10];
        LED[4] = LedChar[sec/10000%10];
        LED[5] = LedChar[sec/100000%10];
        LED[6] = LedChar[sec/1000000%10];
        LED[7] = LedChar[sec/10000000%10];
        for(j=7;j>=1;j--)
        {
                if(LED[j] == 0)
                        LED[j] = 0xF;
                else
                        break;
        }
        Write_Max7219(1,LED[0]);
        Write_Max7219(2,LED[1]);
        Write_Max7219(3,LED[2]);
        Write_Max7219(4,LED[3]);
        Write_Max7219(5,LED[4]);
        Write_Max7219(6,LED[5]);
        Write_Max7219(7,LED[6]);
        Write_Max7219(8,LED[7]);
}

51hei圖片_20221031102312.jpg (252.98 KB, 下載次數(shù): 60)

驅(qū)動(dòng)器

驅(qū)動(dòng)器

51hei圖片_20221031102318.jpg (165.92 KB, 下載次數(shù): 59)

開關(guān)電源

開關(guān)電源

51hei圖片_20221031102322.jpg (169.29 KB, 下載次數(shù): 56)

整體圖片

整體圖片
回復(fù)

使用道具 舉報(bào)

板凳
ID:984161 發(fā)表于 2022-10-31 11:45 | 只看該作者
另外驅(qū)動(dòng)器SW4打開了,設(shè)置的是停轉(zhuǎn)時(shí)全流
回復(fù)

使用道具 舉報(bào)

地板
ID:984161 發(fā)表于 2022-10-31 11:46 | 只看該作者
另外驅(qū)動(dòng)器SW4已經(jīng)打開,設(shè)置為停轉(zhuǎn)時(shí)全流
回復(fù)

使用道具 舉報(bào)

5#
ID:883242 發(fā)表于 2022-10-31 12:03 | 只看該作者
代碼里面看不到ENA。

按說(shuō)停止的時(shí)候不撤銷ENA,步進(jìn)電機(jī)還是有力量的。
回復(fù)

使用道具 舉報(bào)

6#
ID:955673 發(fā)表于 2022-10-31 12:03 | 只看該作者
用了細(xì)分?細(xì)分是虛的
回復(fù)

使用道具 舉報(bào)

7#
ID:984161 發(fā)表于 2022-10-31 13:15 | 只看該作者
Hephaestus 發(fā)表于 2022-10-31 12:03
代碼里面看不到ENA。

按說(shuō)停止的時(shí)候不撤銷ENA,步進(jìn)電機(jī)還是有力量的。

我采用的共陽(yáng)接法,ENA+接的5V,ENA-接的IO口,程序里面沒(méi)有動(dòng)ENA+,接的IO口默認(rèn)是高電平。ENA一直沒(méi)有通,按理說(shuō)不管任何時(shí)候電機(jī)的力矩應(yīng)該都滿足我需求了,但就是感覺(jué)停止的一瞬間好像力不夠了,會(huì)回轉(zhuǎn)幾個(gè)步距角一樣。
回復(fù)

使用道具 舉報(bào)

8#
ID:984161 發(fā)表于 2022-10-31 13:32 | 只看該作者
冰火風(fēng)輪 發(fā)表于 2022-10-31 12:03
用了細(xì)分?細(xì)分是虛的

用的細(xì)分1600,但是最小的細(xì)分400也是這種情況。請(qǐng)問(wèn)脈沖寬度對(duì)力矩有影響嗎?是不是脈沖200us的影響?
回復(fù)

使用道具 舉報(bào)

9#
ID:883242 發(fā)表于 2022-10-31 14:17 | 只看該作者
細(xì)分只是噪音低,力矩是不如不細(xì)分的。
回復(fù)

使用道具 舉報(bào)

10#
ID:123289 發(fā)表于 2022-11-1 15:22 | 只看該作者
照你說(shuō)的現(xiàn)象。
建議再多轉(zhuǎn)1~2步。
回復(fù)

使用道具 舉報(bào)

11#
ID:984161 發(fā)表于 2022-11-2 16:40 | 只看該作者
Hephaestus 發(fā)表于 2022-10-31 14:17
細(xì)分只是噪音低,力矩是不如不細(xì)分的。

我把細(xì)分調(diào)到400,再試試看,謝謝
回復(fù)

使用道具 舉報(bào)

12#
ID:984161 發(fā)表于 2022-11-2 16:41 | 只看該作者
yzwzfyz 發(fā)表于 2022-11-1 15:22
照你說(shuō)的現(xiàn)象。
建議再多轉(zhuǎn)1~2步。

好的,多謝建議,我把細(xì)分調(diào)到最小,再把脈沖寬度加大,轉(zhuǎn)速降低試試看。
回復(fù)

使用道具 舉報(bào)

13#
ID:1044091 發(fā)表于 2022-11-2 18:00 來(lái)自觸屏版 | 只看該作者
你是不是一直沒(méi)用使能信號(hào)?根據(jù)我的經(jīng)驗(yàn),步進(jìn)電機(jī)使能時(shí)若無(wú)脈沖是鎖定狀態(tài),有脈沖就轉(zhuǎn),不使能就是自由狀態(tài),當(dāng)然沒(méi)力了。如果還不行建議考慮機(jī)構(gòu)自鎖,如蝸輪蝸桿機(jī)構(gòu)。
回復(fù)

使用道具 舉報(bào)

14#
ID:844772 發(fā)表于 2022-11-3 09:27 | 只看該作者
弄好了嗎?我想問(wèn)這個(gè)系統(tǒng)是不是對(duì)旋轉(zhuǎn)角度特別敏感。恳?yàn)槲艺J(rèn)為可能是機(jī)械原因:1、步進(jìn)電機(jī)每步轉(zhuǎn)的角度并不一樣;2、要考慮旋轉(zhuǎn)的角動(dòng)量,所以我也建議多走兩步,如果軟件調(diào)不出來(lái)就要考慮加減速齒輪了。
回復(fù)

使用道具 舉報(bào)

15#
ID:984161 發(fā)表于 2022-11-10 17:19 | 只看該作者
ningsy 發(fā)表于 2022-11-2 18:00
你是不是一直沒(méi)用使能信號(hào)?根據(jù)我的經(jīng)驗(yàn),步進(jìn)電機(jī)使能時(shí)若無(wú)脈沖是鎖定狀態(tài),有脈沖就轉(zhuǎn),不使能就是自由 ...

使能接口不進(jìn)行任何操作的時(shí)候就是電機(jī)不接收脈沖的時(shí)候仍然保持力矩,我現(xiàn)在就是這樣設(shè)定的。不然到最后彈簧的力肯定會(huì)使電機(jī)軸回轉(zhuǎn)的。
回復(fù)

使用道具 舉報(bào)

16#
ID:984161 發(fā)表于 2022-11-10 17:22 | 只看該作者
glinfei 發(fā)表于 2022-11-3 09:27
弄好了嗎?我想問(wèn)這個(gè)系統(tǒng)是不是對(duì)旋轉(zhuǎn)角度特別敏感。恳?yàn)槲艺J(rèn)為可能是機(jī)械原因:1、步進(jìn)電機(jī)每步轉(zhuǎn)的角 ...

因?yàn)槲倚枰臓顟B(tài)是每次轉(zhuǎn)動(dòng)固定的角度,這樣才能給彈簧預(yù)加相同的預(yù)緊力,最后產(chǎn)品才能一致。多走兩步倒容易實(shí)現(xiàn),多幾個(gè)脈沖就好了,但是停止的一瞬間還是會(huì)遇到這樣的問(wèn)題。問(wèn)題主要出現(xiàn)在脈沖停止的瞬間,仿佛電機(jī)的保持力矩不夠一樣,彈簧力會(huì)使軸回轉(zhuǎn)一兩步。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表