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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 21184|回復(fù): 6
收起左側(cè)

用51單片機(jī)控制兩相四線步進(jìn)電機(jī)

  [復(fù)制鏈接]
ID:96054 發(fā)表于 2015-11-16 23:31 | 顯示全部樓層 |閱讀模式
最近學(xué)習(xí)步進(jìn)電機(jī)的驅(qū)動原理,照著教材自己實(shí)踐了一下用ULN2003驅(qū)動28BYJ-48兩相5線步進(jìn)電機(jī),可以正常轉(zhuǎn)動。手頭有一個舊光驅(qū),拆開發(fā)現(xiàn)里面有三個電機(jī),其中有一個控制激光頭尋跡的兩相四線步進(jìn)電機(jī),我就用51的單片機(jī)讓它也轉(zhuǎn)起來。一開始照葫蘆畫瓢用ULN2003驅(qū)動,結(jié)果發(fā)現(xiàn)無論如何也不行。原來ULN2003基本沒輸出電流,只能驅(qū)動有公共端的兩相五線、兩相六線步進(jìn)電機(jī),不能驅(qū)動2相4線步進(jìn)電機(jī)。然后改用L293D驅(qū)動,可以轉(zhuǎn)動。通過按鈕控制正反轉(zhuǎn)時發(fā)現(xiàn),按鍵釋放后,電機(jī)迅速發(fā)熱,燙手。用萬用表測量,發(fā)現(xiàn)電機(jī)A,A-或B,B-直接存在電位差!應(yīng)該是按鍵釋放時,IN1-IN4沒有歸零。找到問題,就容易解決了。修改程序,可以完美運(yùn)行,鍵1按下正轉(zhuǎn),釋放停下,鍵2按下反轉(zhuǎn),釋放停下。IN1-IN4分別接P1口的低四位。工作方式選用8拍。
A       1     1     0     0     0     0     0     1
A-      0     0     0     1     1     1     0     0
B       0     1     1     1     0     0     0     0
B-      0     0     0     0     0     1     1     1
附上源程序,僅供參考。
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit K3=P2^5;
sbit K4=P2^4;
//k3正轉(zhuǎn)。k4反轉(zhuǎn)。釋放停止
uchar code step_table[]={0x8,0xa,0x2,0x6,0x4,0x5,0x1,0x9};
void delay(unsigned int m)
    {
      unsigned int i,j;
      for(i=m;i>0;i--)
       for(j=110;j>0;j--);
         }
void xp()//x軸正轉(zhuǎn)
{
while(!K3)
        {
                        uint i;
                for(i=0;i<8;i++)
                {
                        P1=step_table[ i];
                        delay(10);
                }
        
        }
P1=0;//按鍵釋放時,反轉(zhuǎn)P1停在table某處,導(dǎo)致電機(jī)有電壓從而使電機(jī)發(fā)熱,需要?dú)w零。
}
void xn()//x軸反轉(zhuǎn)
{
                        uint i;
while(!K4)
        {
                for(i=8;i>0;i--)
                {
                        P1=step_table[ i];
                        delay(10);
                }
        
        }
P1=0;//按鍵釋放時,反轉(zhuǎn)P1停在table某處,導(dǎo)致電機(jī)有電壓從而使電機(jī)發(fā)熱,需要?dú)w零。
}
void main()
{
while(1)
{
                if(K3==0)
                {
                        delay(20);
                        if(K3==0)
                        {
                //        LED1=0;
                        xp();
                        }
                }
                if(K4==0)
                {
                        delay(20);
                        if(K4==0)
                        {
                //        LED1=0;
                        xn();
                        }
                }

}
}

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的積分獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:495287 發(fā)表于 2020-7-9 00:09 | 顯示全部樓層
樓主你好,我在調(diào)試你這個程序的時候發(fā)現(xiàn)了一個疑問,不知道是否可商榷?
在X軸反轉(zhuǎn)函數(shù)里面
void xn()//x軸反轉(zhuǎn)
{
                        uint i;
while(!K4)
        {
                for(i=8;i>0;i--)
                {
                        P1=step_table[ i];
                        delay(10);
                }

這個for循環(huán)for(i=8;i>0;i--)可以調(diào)試通,但是反轉(zhuǎn)實(shí)際運(yùn)行步數(shù)是少一步的,這樣會不會有丟步現(xiàn)象。


這是地址數(shù)組真值表:
uchar code step_table[]={0x8,0xa,0x2,0x6,0x4,0x5,0x1,0x9};
數(shù)組循環(huán)i++是正確,因?yàn)閄軸正轉(zhuǎn)的for循環(huán)是i++:for(i=0;i<8;i++)
數(shù)組的下標(biāo)是從零開始,這樣八位table取值是0,1,2,3,4,5,6,7,剛好匹配,


==========================重點(diǎn)
在反轉(zhuǎn)中采用for循環(huán)i--:for(i=8;i>0;i--),
當(dāng)?shù)谝淮窝h(huán)取的數(shù)值是step_table[i=8],實(shí)際上這已經(jīng)數(shù)組越界,但是越界為什么會能轉(zhuǎn),因?yàn)橹挥袔资撩氲耐娧h(huán),可能堵轉(zhuǎn),這樣第二步(step_table[i=7]是倒敘數(shù)組表也就是取的正傳最后一位是正確的)當(dāng)循環(huán)到step_table[i=0]時,因?yàn)榕袛鄺l件是i>0,這樣正轉(zhuǎn)第一步也就是i=0是不賦值的,出現(xiàn)舍棄現(xiàn)象, X軸反轉(zhuǎn)函數(shù)P1=step_table[0]是不執(zhí)行的;會不會出現(xiàn)丟步?

===========================測試過程
按照這個思路修改調(diào)試:
先修改反轉(zhuǎn)循環(huán)for(i=7;i>=0;i--),調(diào)試運(yùn)行到最后一步I=0第一次可以,隨后下一步出現(xiàn)堵轉(zhuǎn),
跟蹤發(fā)現(xiàn):在反轉(zhuǎn)函數(shù)中,當(dāng)i=0循環(huán)完畢后隨后下一步,會出現(xiàn)隨機(jī)數(shù)整數(shù),在看開始定義約定。

unsigned int i,j;
這個unsigned 參數(shù)類型約定了無符號整形,查詢一部分文檔才發(fā)現(xiàn)無符號隨機(jī)數(shù)的跳轉(zhuǎn),因?yàn)椴煌跀?shù)組賦值真值表,所以出現(xiàn)堵轉(zhuǎn)。

按照保險的做法,又聲明一個反轉(zhuǎn)數(shù)組,只是把位置顛倒過來:
正轉(zhuǎn):uchar code step_table[]={0x8,0xa,0x2,0x6,0x4,0x5,0x1,0x9};
反轉(zhuǎn):uchar code step_table[]={0x9,0x1,0x5,0x4,0x6,0x2,0xa,0x8};
然后反轉(zhuǎn)for循環(huán)是i++:for(i=0;i<8;i++)
這樣步數(shù)同步了。
還一種方法,聲明i參數(shù)不要unsigned 無符號聲明,原來您的代碼只是修改為for(i=7;i>=0;i--)其他不變,這樣改不知道在單片機(jī)編程中是否合規(guī)。

為什么會考慮這個問題呢?
當(dāng)需要循環(huán)計算指定角度步數(shù)的時候,需要累加循環(huán)次數(shù),每八拍丟一步,實(shí)際上道最后差別就大了。

不知道我的思路對不對,希望樓主指點(diǎn)。
謝謝!
回復(fù)

使用道具 舉報

ID:164250 發(fā)表于 2017-2-15 20:23 來自手機(jī) | 顯示全部樓層
樓主uchar code 是怎么定義的?
回復(fù)

使用道具 舉報

ID:195841 發(fā)表于 2017-5-3 07:07 來自手機(jī) | 顯示全部樓層
你那個按鍵不能識別吧
回復(fù)

使用道具 舉報

ID:270824 發(fā)表于 2018-1-3 15:49 | 顯示全部樓層
請問轉(zhuǎn)動的時候震動嚴(yán)重什么問題
回復(fù)

使用道具 舉報

ID:229064 發(fā)表于 2018-3-9 17:27 | 顯示全部樓層
能分享一下,接線圖嗎?
回復(fù)

使用道具 舉報

ID:106821 發(fā)表于 2020-9-15 13:56 | 顯示全部樓層
i=8 和i=0開始是一樣的計數(shù)次數(shù)的

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久吹潮 | 日本亚洲一区 | 91久久精品一区二区三区 | 黄色片亚洲 | 最新中文在线视频 | 欧美精品一区二区三区在线播放 | 美女国内精品自产拍在线播放 | 亚洲人成在线观看 | 欧美一级免费看 | 91视视频在线观看入口直接观看 | 91视频a | www.久久 | 久久综合久久综合久久 | 一区二区三区亚洲 | 亚洲一区二区三区免费视频 | 亚洲一区二区中文字幕在线观看 | 亚洲免费视频一区 | 视频一区 亚洲 | 成人av一区 | 欧美一区二区三区久久精品 | 久久久久久av | 精品一区二区久久久久久久网站 | 欧美日韩电影一区二区 | 午夜免费视频观看 | 久久久久国产精品午夜一区 | 亚洲成人毛片 | 国产剧情一区二区三区 | 国产农村妇女毛片精品久久麻豆 | 国产不卡一区 | 国产精品欧美精品 | 国产精品一区二区三区99 | 国产精品久久久久久久久久免费看 | 久久综合婷婷 | 欧美一区二区三区久久精品 | 中文字幕在线播放第一页 | 成人精品国产一区二区4080 | 国产精品久久久久久久免费观看 | 国产高清性xxxxxxxx | 91精品国产综合久久婷婷香蕉 | 欧美成人免费在线视频 | 中文av网站 |