• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

关于初学步进电机时遇到的几个问题

艾笠调查团 2016-11-02 浏览量:931
如题,我用的是Proteus中的6线四相步进电机

这个N相和励磁方式是对应的还是可以自由选择,我写了个小程序测试 一相励磁 方式,为什么电机可以转但是转的太慢,写了个 二相励磁 方式发现电机又不转了
还有这个电机的六个接口分别是什么...我只知道中间是电源
写的小测试程序

#include
typedef unsigned char uchar;
typedef unsigned int uint;
uchar code table[]={0x01,0x02,0x04,0x08};
uchar code table2[]={0x08,0x04,0x02,0x01};
bit flag=1;

void qudong()
{
uchar i;
if(flag)
{
for(i=0;i<4;i++)
{
P1=table;
}
}
else
{
for(i=0;i<4;i++)
{
P1=table2;
delay(1);
}
}

}

void main()
{
while(1)
{
qudong();
}
}


1 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 本帖最后由 MOP 于 2016-11-4 04:42 编辑

    艾笠调查团 发表于 2016-11-3 12:24
    您好,看了您的回復後我又看了看書,現在知道幾相和幾拍是什麽意思了,但是把您的代碼復制後發現電機不轉 ...
    應該這樣說,步進馬達如果您切換速度太快,因為通電線圈激磁是要時間的,所以會抖動甚至停住,您要Trial and Error
    所以在您兩個delay函數中,只是差別在a設太小,延遲太少,頻率太快的話馬達一定會停住,然後51架構是說減算比加算快,綜合的結果您原本的delay函式延遲會很少,選用哪個delay只是最終的值不一樣而已,可能您的函式要delay(50)穩定,別人的要delay(20)穩定
    至於變數放不放到delay函式中,其實是單片機指令的問題,宣告變數會造成一些延遲,主要您要去Trial and Error可以順暢轉動的delay,這我在AVR跟STM32還有CPU都不太一樣
    總結就是:
    1. 查看我上面回覆的接線
    2. delay太少會抖動
    3. delay再更少會停住
    4. Trial and Error找出合適的delay值,可以用loop去iteration

    • 发布于 2016-11-02
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:8
  • 本帖最后由 MOP 于 2016-11-2 19:08 编辑

    嗨,接線沒錯唷,這是內部構造,六線4相是28BYJ-48吧:)

    這類馬達不需要改變電流方向,為單極步進馬達(Unipolar Stepper)


    跟ULN2003接線方式A線圈的A(2),A'(4)和B線圈的B(1),B'(3),AB線圈兩者之間的COM(5)端接電源,共5線

    再來是您的Code了
    uchar code table[]={0x01,0x02,0x04,0x08};
    uchar code table2[]={0x08,0x04,0x02,0x01};
    這樣沒有二相激磁唷,只有一相,table1和2只是轉動方向相反而已(順時鐘<=>逆時鐘)

    給您參考1,2,1-2相三種激磁方式的序列
    1. 一相激磁:1000-0100-0010-0001
    2. 二相激磁:1100-0110-0011-1001
    3. 一/二相激磁:1000-1100-0100-0110-0010-0011-0001-1001
    
    因此
    uchar code table2[]={0x09,0x03,0x06,0x0C};
    希望對您有用:)





    • 发布于2016-11-02
    • 举报
    • 评论 0
    • 0
    • 0

  • 本帖最后由 艾笠调查团 于 2016-11-3 12:26 编辑

    MOP 发表于 2016-11-2 18:55
    嗨,接線沒錯唷,這是內部構造,六線4相是28BYJ-48吧

    這類馬達不需要改變電流方向,為單極步進馬達(Unipolar ...

    您好,看了您的回復後我又看了看書,現在知道幾相和幾拍是什麽意思了,但是把您的代碼復制後發現電機不轉了。
    又到網上查教程,把電機的兩個接口換了壹下,改了壹下延遲函數,在PI=table[]下面加了delay(1),發現電機在左右抖動,把延遲改成delay(2),電機又壹邊抖動壹邊很慢地順時針轉動,把延遲改成delay(20),電機這次轉的快了而且抖動的不明顯了而且停下來的時候會有壹個緩沖,把延遲改成delay(50),電機轉的更快但是還能看到中間會有明顯停頓
    把delay改成別人的delay,結果這種緩沖情況居然就沒了

    我的理解是給電機壹個脈沖信號讓它轉動壹定角度,給得越快轉的越快,所以不加延遲應該轉的最快,但其實不加延遲電機幾乎就不會轉,加的少會左右抖動,用別人的延遲也是這樣,但是加延遲多別人的delay()就不會出現緩沖而是壹直轉,也許是電機跟不上單片機的速度.....?

    您可以解釋壹下這種情況嗎?
    我寫的delay:
    void delay(uchar z)
    {
    uchar a;
    for(z=z;z>0;z--)
    for(a=250;a>0;a--); //為何這個a不能太小
    }

    別人寫的delay
    uchar i,j,k; //不能放到延遲函數裏面,否則會抖動
    void delay(i)//延時函數
    {
    for(j=0;j for(k=0;k<250;k++);
    }

    改过的图:
    • 发布于2016-11-03
    • 举报
    • 评论 0
    • 0
    • 0

  • 艾笠调查团 发表于 2016-11-3 12:27
    改过的图

    嗨,如果我理解您的電路圖沒錯的話,左右各是AB線圈,所以接法上我有找到問題了
    1C <=> 左邊線圈A端
    2C <=> 右邊線圈B端
    3C <=> 左邊線圈A'端
    4C <=> 右邊線圈B'端
    
    所以我沒看仔細您的後一組接法,您只要將3C和4C的接線調換即可:P
    • 发布于2016-11-03
    • 举报
    • 评论 0
    • 0
    • 0

  • 仿真和实际差很多
    • 发布于2016-11-03
    • 举报
    • 评论 0
    • 0
    • 0

  • MOP 发表于 2016-11-3 13:22
    應該這樣說,步進馬達如果您切換速度太快,因為通電線圈激磁是要時間的,所以會抖動甚至停住,您要Try and Err ...

    我懂了...謝謝老師!問題說到底都是圍繞還它是靠磁轉動這一特點的...
    • 发布于2016-11-03
    • 举报
    • 评论 0
    • 0
    • 0

  • suoma 发表于 2016-11-3 19:52
    仿真和实际差很多

    实验室有很多器件...但我觉得还是先试试仿真把一些基础问题解决了再实际操作一下...上次不知道为什么就把直流电机烧了- -||
    • 发布于2016-11-03
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

关于初学步进电机时遇到的几个问题