久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5321|回復: 10
打印 上一主題 下一主題
收起左側

請教關于四相五線步進電機的步數控制問題

[復制鏈接]
跳轉到指定樓層
樓主
請教關于四相五線步進電機的步數控制問題???
有沒有實際的例子供參考,就是轉一定步數自動停下來那種,
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:164602 發表于 2017-6-21 08:30 | 只看該作者
分享我的學習筆記和例程:
/*學習筆記:
(1)正反轉一般用的是高精度的“四相單雙八拍”工作方式,即A-AB-B-BC-C-CD-D-DA,每個脈沖電機轉動的角度叫步距角。
我使用的步進電機,參數如圖所示,步距角5.625度,但是減速電機,減速比為64,即,每個脈沖,電機外軸實際轉動角度為步距角的64分之一。
(2)表格數據的得來:        A B   C D
                                        1 0        0 0         (0xf8)
                                        1 1        0 0         (0xfc)
                                        0 1        0 0         (0xf4)
                                        0 1        1 0         (0xf6)
                                        0 0        1 0         (0xf2)
                                        0 0        1 1         (0xf3)
                                        0 0        0 1         (0xf1)
                                        1 0        0 1         (0xf9)
此ABCD對應電機驅動板(達林頓管IC芯片ULN2003A)中的輸入端IN1~IN4,它又對應著單片機
IO口,本實例對應的是P2口的低四位;若想換IO口或位,此數據要調整。
(3)步進電機轉動不能太快,是因為:
   保持轉矩————步進電機通電但沒有轉動時,定子鎖住轉子的力矩。
   它是步進電機最重要的參數之一,
   通常步進電機在低速時的力矩接近保持轉矩。由于步進電機的輸出力矩隨速度的增大而不斷
   衰減,輸出功率也隨速度的增大而變化,所以保持轉矩就成了衡量步進電機最重要參數之一。
   按自購步進電機的參數,則知:最好最小延時為0.002s,即本程序中i=285,可保持轉矩。
(4)自購步進電機的步距角為5.625度,減速比為1:64。可見,要讓眼睛看到的軸轉180度,則
   提供的脈沖次數為n=180*64/5.625=2048=256*8個。但有誤差,轉動持續一段時間,就會有
   失調角。
(5)由于想顯示轉動的角度,而顯示程序要用時間,所以本程序有些不對,現在還沒有好辦法讓
   電機轉動更快些。另:k5、k6讓電機轉動特定角度程序,還有點問題,按下后,再按,要重
   新計算初值。可以用變量控制,但太繁瑣,暫時沒管它,只要按下后等待轉停就好
(6)程序功能:開機時,步進電機按正常速度(中速)正向轉動,最多轉動5圈;
        按獨立鍵k1:正向快轉;
        按獨立鍵k2:反向快轉;
        按獨立鍵k3:每按一次,減速一次,從最快到最慢需按四次,以后按鍵無效;
        按獨立鍵k4:每按一次,加速一次,從最慢到最快需按四次,以后按鍵無效;
        按獨立鍵k5:中速正向轉動90度;
        按獨立鍵k6:中速反向轉動180度;
*/

#include <reg51.h>

#define Rotation P2  //定義電機轉動相數據的輸入控制口,本例是P2口的低四位。

unsigned char code F_Rotation[8]={0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1,0xf9};//正轉(逆時針)表格
unsigned char code B_Rotation[8]={0xf9,0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8};//反轉(順時針)表格

sbit k1=P3^7;                //以下六個為獨立鍵盤
sbit k2=P3^6;
sbit k3=P3^5;
sbit k4=P3^4;
sbit k5=P3^3;
sbit k6=P3^2;
unsigned int Time;
unsigned int jd;       
bit k=0;

void Delay10ms(unsigned int c)//10ms延時程序
{
    unsigned char a,b;
    for(c;c>0;c--)
        for(b=38;b>0;b--)
            for(a=130;a>0;a--);
}

void Delay(unsigned int i)//延時7us
{
        while (--i);
}

void  Motor()        //電機旋轉子函數
{
        unsigned char i;
        for(i=0;(i<8);i++)
        {
                if (jd==0)       
                {
                        Rotation=0xf0;
                        break;
                }
                if (k==0)
                {
                        Rotation=(F_Rotation);
                }               
                else
                {
                        Rotation=(B_Rotation);
                }
                Delay(Time);
                jd--;
                                                       
        }
}

void main()
{
        unsigned char m;                  //松鍵時消抖用變量
        m=0;
        Time=250;
        jd=20480;
        while(1)                                  //總循環
        {
               
                if(k1==0)                          //掃描法判斷獨立按鍵k1是否按下
                {
                        Delay10ms(1);          //消抖
                        if(k1==0)                  //再次判斷k1是否按下
                        {

                                Time=150;
                                k=0;
                                jd=20480;

                                while((m<50)&&(k1==0))
                            {
                                    Delay10ms(1);
                                    m++;
                            }
                            m=0;
                        }
                }

                if(k2==0)                         //掃描獨立鍵盤k2
                {
                        Delay10ms(1);
                        if(k2==0)
                        {

                                Time=150;
                                k=1;
                                jd=20480;

                                while((m<50)&&(k2==0))
                            {
                                    Delay10ms(1);
                                    m++;
                            }
                            m=0;
                        }
                }

                if(k3==0)                                  //掃描獨立鍵盤k3
                {                                                         
                        Delay10ms(1);
                        if(k3==0)
                        {
                               
                                Time=Time+100;
                                if (Time>500)
                                {
                                        Time=500;
                                }
                                jd=20480;

                                while((m<50)&&(k3==0))
                            {
                                    Delay10ms(1);
                                    m++;
                            }
                            m=0;
                        }
                }

                if(k4==0)                                        //掃描獨立鍵盤k4
                {
                        Delay10ms(1);
                        if(k4==0)
                        {

                                Time=Time-100;
                                if (Time<150)
                                {
                                        Time=150;
                                }
                                jd=20480;

                                while((m<50)&&(k4==0))
                            {
                                    Delay10ms(1);
                                    m++;
                            }
                            m=0;
                        }
                }

                if(k5==0)                                        //掃描獨立鍵盤k5
                {
                        Delay10ms(1);
                        if(k5==0)
                        {

                                Time=250;
                                k=0;
                                jd=1024;        //只轉90度

                                while((m<50)&&(k5==0))
                            {
                                    Delay10ms(1);
                                    m++;
                            }
                            m=0;
                        }
                }

                if(k6==0)
                {
                        Delay10ms(1);
                        if(k6==0)
                        {

                                Time=250;
                                k=1;
                                jd=2048;

                                while((m<50)&&(k6==0))
                            {
                                    Delay10ms(1);
                                    m++;
                            }
                            m=0;
                        }
                }

                Motor();//調用電機轉動子程序

        }
}

另外,本例程是我本人在學習單片機初期的成果,沒有用定時器來控制轉速,你可以自己修改。
我的學習心得可是好東西哦。呵呵
回復

使用道具 舉報

板凳
ID:164602 發表于 2017-6-21 08:35 | 只看該作者
剛才忘了貼圖了。

步進電機參數.jpg (27.95 KB, 下載次數: 69)

步進電機參數

步進電機參數

1.jpg (14.12 KB, 下載次數: 70)

獨立按鍵電路

獨立按鍵電路

步進電機驅動原理圖.pdf

12.88 KB, 下載次數: 18

回復

使用道具 舉報

地板
ID:191929 發表于 2017-6-21 16:03 | 只看該作者
謝謝,謝謝,謝謝
回復

使用道具 舉報

5#
ID:164602 發表于 2017-6-21 16:54 | 只看該作者
惜緣2008 發表于 2017-6-21 16:03
謝謝,謝謝,謝謝

不用客氣,我也是這樣在別人的幫助下學習的,互相幫助,共同進步!能幫到你就好!
回復

使用道具 舉報

6#
ID:191929 發表于 2017-6-21 22:47 | 只看該作者
謝謝了,問題解決了
回復

使用道具 舉報

7#
ID:627828 發表于 2019-10-24 14:11 | 只看該作者
正好需要,學習下
回復

使用道具 舉報

8#
ID:616759 發表于 2019-10-28 09:36 | 只看該作者
一樓正解,畢設做的有電機驅動模塊,就是用的這個方法,不過我沒有用芯片驅動電機,用的三極管
回復

使用道具 舉報

9#
ID:652598 發表于 2020-5-20 21:16 | 只看該作者

有沒有基于模糊pid控制的呀
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一区中文字幕在线观看 | 成人精品鲁一区一区二区 | 亚洲国产成人久久综合一区,久久久国产99 | 欧美中文字幕一区二区三区 | 亚洲精品亚洲人成人网 | 色狠狠一区 | 亚洲一区二区三区在线视频 | 亚洲巨乳自拍在线视频 | 欧美日高清视频 | 成人免费高清 | 日韩精品一区二区三区中文在线 | 国产欧美日韩综合精品一 | 欧美激情a∨在线视频播放 成人免费共享视频 | 99久久精品免费看国产小宝寻花 | 91精品国模一区二区三区 | 亚洲国产日韩一区 | 国产日韩精品一区 | 亚洲一二三区精品 | 亚洲精品欧美 | 国产激情第一页 | 国产精品a久久久久 | 一区二区三区久久久 | 久久久久久久久久久爱 | 亚洲国产欧美在线人成 | 超碰地址 | 三区在线观看 | 91正在播放 | 精品久久久久久久人人人人传媒 | 性高湖久久久久久久久3小时 | 精品一区二区三区四区 | 国产主播第一页 | 蜜桃久久 | 成人欧美一区二区三区在线播放 | 精品中文在线 | 中文字幕成人 | 国产99久久 | 中文字幕亚洲区一区二 | 青青久在线视频 | 日韩欧美一级片 | 国产 日韩 欧美 制服 另类 | 欧美日韩综合一区 |