標(biāo)題: 單片機(jī)按鍵控制步進(jìn)電機(jī)正反轉(zhuǎn)程序,怎么不行呀 [打印本頁(yè)]

作者: l156613673    時(shí)間: 2021-12-19 17:12
標(biāo)題: 單片機(jī)按鍵控制步進(jìn)電機(jī)正反轉(zhuǎn)程序,怎么不行呀
#include <REGX51.H>
sbit key1=P1^0;
sbit key2=P1^1;
#define uchar unsigned char
#define uint unsigned int
uchar j;
uchar code steptr[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};
uchar code steptl[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};
uchar *p;
void delayms(j)
{
        unsigned char i;
        TMOD=0X01;
        for(i=0;i<j;i++)
        {
                TH0=(65536-50000)/256;
                TL0=(65536-50000)%256;
                TR0=1;
                while(!TF0);
                        TF0=0;
        }
}

void key11()
{
        int flag=0;
                if(key1==0&&flag==0)
                {
                        flag=1;
                }
                        if(key1==1&&flag==1)
                        {
                                p=steptr;
                                flag=0;
                        }
}

void key22()
{
        int flag1=0;
                if(key2==0&&flag1==0)
                {
                        flag1=1;
                }
                        if(key2==1&&flag1==1)
                        {
                                p=steptl;
                                flag1=0;
                        }
}

void stepper()
{
        int i=0;
                for(i=0;i<8;i++,p++)
        {
                P2=*p;
                delayms(10);
        }
}

void main()
{
        while(1)
        {
                key11();
                key22();
                stepper();
        }
}


作者: akesking    時(shí)間: 2021-12-19 19:26
/**************************************************************************************
*                         步進(jìn)電機(jī)                                                                                  *

硬件連接:
           P0 -->矩陣鍵盤(pán)
                                         DOUT = P3^7;          //輸出
                                         CLK  = P3^6;          //時(shí)鐘
                                         DIN  = P3^4;          //輸入
                                         CS   = P3^5;          //片選
                                         P10   = INA
                                         P11  =  INB
                                         P12  =  INC
                                         P13  =  INB
                                         
                                         OUT A+ A- B+ B-  連接電機(jī)  
                                         
                                         矩陣鍵盤(pán):
                                         0      1      2       3
                                         
                                         4      5      6       7
                                         
                                       
注意事項(xiàng):無(wú)                                                                                                                                                                  
***************************************************************************************/

#include "reg52.h"                       //此文件中定義了單片機(jī)的一些特殊功能寄存器
#include "lcd.h"
#include "key.h"
#include "XPT2046.h"
#include "42Motor.h"

#define u16 unsigned int           //對(duì)數(shù)據(jù)類型進(jìn)行聲明定義
#define u8 unsigned char


/*****************************************************************************/
void Display_rate();
/**************************************************************************

/*****************************************************************************/

u8 key_num;
u16 speed;
/*******************************************************************************/
bit dir,m_run;


/*******************************************************************************
* 函 數(shù) 名       : main
* 函數(shù)功能                 : 主函數(shù)
* 輸    入       : 無(wú)
* 輸    出             : 無(wú)
*******************************************************************************/
void main()
{       



       
        while(1)
                                {       
                                                        key_num=KeyDown();                    //讀取鍵值
                                                        switch(key_num)
                                                                {
                                                                        case 0: m_run=~m_run; break;    //開(kāi)/關(guān)
                                                                        case 1: dir=0;        break;    //正轉(zhuǎn)
                                                                        case 2: dir=1;        break;                //反轉(zhuǎn)
                                                                }
                                       
                                                        speed=Read_AD_Data(0x94)/4;       //取ad值
                                                        if(speed>200)      speed-=200;     
                                                        else               speed=1;        //
                                                               
                                                        if(m_run)                 Motor_Run(dir,speed);  //電機(jī)運(yùn)行
                               
                                }       
                               
}
         
/*****************************************************************************/
/*32*/
/*******************************************************************************/

作者: 興安xa    時(shí)間: 2021-12-19 20:01
是什么不行啊,程序看上去沒(méi)什么問(wèn)題,配上電路圖大家好分析啊
作者: l156613673    時(shí)間: 2021-12-19 20:25
興安xa 發(fā)表于 2021-12-19 20:01
是什么不行啊,程序看上去沒(méi)什么問(wèn)題,配上電路圖大家好分析啊

電路圖沒(méi)問(wèn)題,p1.0,p1.1接按鍵接0v,p2.0-2.3接電機(jī)啟動(dòng)信號(hào)

作者: 名字不是重點(diǎn)    時(shí)間: 2021-12-19 21:05
這個(gè)代碼的結(jié)構(gòu),我坦白,我看不明白。。。


作者: l156613673    時(shí)間: 2021-12-19 21:35
akesking 發(fā)表于 2021-12-19 19:26
/**************************************************************************************
*                         ...

ok,謝謝

作者: Hephaestus    時(shí)間: 2021-12-19 22:43
硬件怎么接的?沒(méi)硬件軟件就是無(wú)根之草。
作者: 00云夢(mèng)澤00    時(shí)間: 2021-12-19 23:03
p2.0-2.3是直接驅(qū)動(dòng)步進(jìn)電機(jī)么?需要加驅(qū)動(dòng)電路的  沒(méi)有電路圖  沒(méi)法具體分析  有條件的話用示波器看一下波形
作者: l156613673    時(shí)間: 2021-12-19 23:13
00云夢(mèng)澤00 發(fā)表于 2021-12-19 23:03
p2.0-2.3是直接驅(qū)動(dòng)步進(jìn)電機(jī)么?需要加驅(qū)動(dòng)電路的  沒(méi)有電路圖  沒(méi)法具體分析  有條件的話用示波器看一下波 ...

有驅(qū)動(dòng)的,程序沒(méi)問(wèn)題吧
作者: l156613673    時(shí)間: 2021-12-19 23:14
Hephaestus 發(fā)表于 2021-12-19 22:43
硬件怎么接的?沒(méi)硬件軟件就是無(wú)根之草。

電路圖沒(méi)問(wèn)題,p1.0,p1.1接按鍵接0v,p2.0-2.3接電機(jī)驅(qū)動(dòng)信號(hào),接驅(qū)動(dòng)板,控制步進(jìn)電機(jī)
作者: 18799730091    時(shí)間: 2021-12-19 23:28
有驅(qū)動(dòng)的,程序沒(méi)問(wèn)題吧
作者: Hephaestus    時(shí)間: 2021-12-19 23:29
l156613673 發(fā)表于 2021-12-19 23:14
電路圖沒(méi)問(wèn)題,p1.0,p1.1接按鍵接0v,p2.0-2.3接電機(jī)驅(qū)動(dòng)信號(hào),接驅(qū)動(dòng)板,控制步進(jìn)電機(jī)

電機(jī)驅(qū)動(dòng)信號(hào)又是個(gè)啥?
作者: glinfei    時(shí)間: 2021-12-20 08:58
這程序是哪里抄來(lái)的啊,至少有2個(gè)問(wèn)題。
1。 void key11()  int flag=0;  // 這個(gè)flag變量要改成 static ,否則按鍵無(wú)效的。另外的一個(gè)也要改。
2。 void stepper()
{
        int i=0;
                for(i=0;i<8;i++,p++) //刪掉p++
        {
                P2=*p; // 改為 P2=*(p+i); 否則只能走8步。
                delayms(10);
        }
}
作者: 興安xa    時(shí)間: 2021-12-20 14:02
電路沒(méi)問(wèn)題也可以用下面的程序試試
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code FFW[]=
{
        0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09
};

uchar code REV[]=
{
        0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01
};

sbit K1 = P1^0;
sbit K2 = P1^1;

void DelayMS(uint ms)
{
        uchar i;
        while(ms--)
        {
                 for(i=0;i<120;i++);
        }
}

void SETP_MOTOR_FFW(uchar n)
{
        uchar i,j;
        for(i=0;i<5*n;i++)
        {
                 for(j=0;j<8;j++)
                {
                        P2 = FFW[j];
                        DelayMS(25);
                }
        }
}

void SETP_MOTOR_REV(uchar n)
{
        uchar i,j;
        for(i=0;i<5*n;i++)
        {
                 for(j=0;j<8;j++)
                {
                        P2 = REV[j];
                        DelayMS(25);
                }
        }
}

void main()
{
        uchar N = 3;
        while(1)
        {
                 if(K1 == 0)
                {
                         P2 = 0xfe;
                        SETP_MOTOR_FFW(N);
                }
                else if(K2 == 0)
                {
                         P2 = 0xfd;
                        SETP_MOTOR_REV(N);
                }
        }
}
作者: a70524414    時(shí)間: 2021-12-24 14:01
這個(gè)程序看不明白
作者: 3125311919    時(shí)間: 2021-12-25 14:18
void stepper()
{
        int i=0;
                for(i=0;i<8;i++,p++)
        {
                P2=*p;
                delayms(10);
        }
}


修改一下

void stepper()
{
        int i=0;
                for(i=0;i<8;i++)
        {
                P2=*p;
                 p++;
                delayms(5);
        }
}

嘗試一下   




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