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

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

QQ登錄

只需一步,快速開(kāi)始

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

51單片機(jī)控制DM542c驅(qū)動(dòng)器

[復(fù)制鏈接]
回帖獎(jiǎng)勵(lì) 100 黑幣 回復(fù)本帖可獲得 10 黑幣獎(jiǎng)勵(lì)! 每人限 1 次(中獎(jiǎng)概率 50%)
跳轉(zhuǎn)到指定樓層
樓主
ID:411723 發(fā)表于 2020-9-4 21:35 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
額,不知道為啥寫(xiě)的代碼沒(méi)有脈沖輸出過(guò)去,求大佬 寫(xiě)一個(gè)可以輸出脈沖的   主要就是stepCW和StepCCw那塊函數(shù) 如何實(shí)現(xiàn) ,謝謝了 如果能對(duì)框架優(yōu)化就更好了

#include <reg52.h>
#include <stdio.h>
#include <math.h>



///////硬件設(shè)置////////

sbit FLASH = P3 ^ 4;
sbit kk=P1^4;

sbit PUL1 = P1 ^ 0;
sbit DIR1 = P1 ^ 1;
sbit ENA1 = P1 ^ 2;

sbit PUL2 = P1 ^ 5;
sbit DIR2 = P1 ^ 6;
sbit ENA2 = P1 ^ 7;

sbit PUL3 = P2 ^ 0;
sbit DIR3 = P2 ^ 1;
sbit ENA3 = P2 ^ 2;


sbit IN0 = P0 ^ 0;
sbit IN1 = P0 ^ 1;
sbit IN2 = P0 ^ 2;
sbit IN3 = P0 ^ 3;//輸入口 gpios
#define IN P0

sbit OUT0 = P0 ^ 4;
sbit OUT1 = P0 ^ 5;
sbit OUT2 = P0 ^ 6;
sbit OUT3 = P0 ^ 7;

////////////基本函數(shù)////////////
void Delay(unsigned int m)//延時(shí)
{
        unsigned int i, j;
        for (i = 0; i < m; i++)
                for (j = 0; j < 100; j++);
}
void Flash(unsigned int m)//閃爍測(cè)試
{
        FLASH = 0;
        Delay(m);
        FLASH = 1;
}
////軟件數(shù)據(jù)存儲(chǔ)/////
#define HMAX 20
code unsigned int mStep[20]= { 100,90,80,70,60,50,40,38,35,33,30,28,25,23,20,18,16,14,10,8 };
char SPM[9][1];
//////////軟件架構(gòu)函數(shù)///////
void InitTask()//電機(jī)初始化/////////////test    ok
{
        kk=1;
        PUL1 = 1;       
  ENA1 = 1;
  PUL2 = 1;       
  ENA2 = 1;
  PUL3 = 1;
  ENA3 = 1;
}
void StepCW(unsigned int m,char p)//正傳1.8///test  ok
{
        unsigned int mm = m >> 1;
        //switch (p)
        //{
       
                //case 0x1:
            DIR1 = 1;
                        PUL1 = 0;
                        Delay(mm);
                        PUL1 = 1;
                        Delay(mm);
                        //break;
                /*case 0x2:
                        DIR2 = 1;
                        PUL2 = 0;
                        Delay(mm);
                        PUL2 = 1;
                        Delay(mm);
                        break;
                case 0x3:
                        DIR3 = 1;
                        PUL3 = 0;
                        Delay(mm);
                        PUL3 = 1;
                        Delay(mm);
                        break;*/
        //}
       
}
void StepCCW(unsigned int m, char p)//反轉(zhuǎn)1.8//test   ok
{
        unsigned int mm = m >> 1;
        switch (p)
        {
                case 0x1:
                        DIR1 = 0;
                        PUL1 = 0;
                        Delay(mm);
                        PUL1 = 1;
                        Delay(mm);
                        break;
                case 0x2:
                        DIR2 = 0;
                        PUL2 = 0;
                        Delay(mm);
                        PUL2 = 1;
                        Delay(mm);
                        break;
                case 0x3:
                        DIR3 = 0;
                        PUL3 = 0;
                        Delay(mm);
                        PUL3 = 1;
                        Delay(mm);
                        break;
        }       
}

void USP2P(int n, unsigned int m,char p) /////test ok
{
        int i;
        if (n >= 0)
                for (i = 0; i < n; i++) StepCW(m,p);
        else
                for (i = 0; i < -n; i++) StepCCW(m,p);
}

/*void UDP2P1(unsigned int n,unsigned int n1,char p)//啟動(dòng)減速運(yùn)行函數(shù)
{
        int i;
        unsigned int n01,n02,n03;
        if (n < n1)for (i = 0; i < n; i++) StepCW(mStep[0],p);
        else if (n < 2 * n1)
        {
                if (n % 2 == 0) n01 = n02 = n / 2;
                else{n01 = n / 2 + 1; n02 = n / 2;}
                for (i = 0; i < n01;i++)StepCW(mStep[i],p);
                for (i = n02 - 1; i >= 0; i--)StepCW(mStep[i],p);
        }
        else
        {
                n03 = n - 2 * n1;
                for (i = 0; i < n1; i++)StepCW(mStep[i],p);
                for (i = 0; i < n03; i++)StepCW(mStep[n1-1],p);
                for (i = n1-1; i >=0; i--)StepCW(mStep[i],p);
        }
}
void UDP2P2(unsigned int n, unsigned int n1, char p)//啟動(dòng)減速運(yùn)行函數(shù)
{
        int i;
        unsigned int n01, n02, n03;
        if (n < n1)
   {
   for (i = 0; i < n; i++)
    StepCCW(mStep[0], p);
   }
        else if (n < 2 * n1)
        {
                if (n % 2 == 0) n01 = n02 = n / 2;
                else {n01 = n / 2 + 1; n02 = n / 2;}
                for (i = 0; i < n01;i++) StepCCW(mStep[i], p);
                for (i = n02 - 1; i >= 0; i--)StepCCW(mStep[i], p);
        }
        else
        {
                n03 = n - 2 * n1;
                for (i = 0; i < n1; i++)StepCCW(mStep[i], p);
                for (i = 0; i < n03; i++)StepCCW(mStep[n1 - 1], p);
                for (i = n1 - 1; i >= 0; i--)StepCCW(mStep[i], p);
        }
}

void XuanZhe(int n, unsigned int m, char p) /////////////正反判斷函數(shù)
{
        unsigned int nn = abs(n);
        if (n >= 0)
                UDP2P1(nn, m, p);
        else
        {
          UDP2P2(nn, m, p);
        }
       
}*/
void SAVE2(int n,int m) /////test   ok ////////儲(chǔ)存坐標(biāo)2函數(shù)
{
  int xx;
  SPM[xx][0] = n;
  SPM[xx][1] = m;
  xx++;
        if(xx>=9){xx=0;}
}
void Line1(int x,int y,int m)////左上運(yùn)動(dòng)
{
        int N;
        int i=0,F=0;
        N=abs(x)+abs(y);
        for(i=0;i<N;i++)
   {
                 if(F>=0)
                {
                 StepCW(m,0x1);
                 F=F-x;
    }
         else
    {
           StepCW(m,0x2);
                 F=F+x;
    }
         }
}
void Line2(int x,int y,int m)////右上運(yùn)動(dòng)
{
        int N;
        int i=0,F=0;
        N=abs(x)+abs(y);
        for(i=0;i<N;i++)
   {
                 if(F<0)
                {
                 StepCCW(m,0x1);
                 F=F+y;
    }
         else
    {
           StepCW(m,0x2);
                 F=F+x;
    }
         }
}
void Line3(int x,int y,int m)/////右下運(yùn)動(dòng)
{
        int N;
        int i=0,F=0;
        N=abs(x)+abs(y);
        for(i=0;i<N;i++)
   {
                 if(F>0)
                {
                 StepCCW(m,0x1);
                 F=F+y;
    }
         else
    {
           StepCCW(m,0x2);
                 F=F-x;
    }
         }
}
void Line4(int x,int y,int m)////左下運(yùn)動(dòng)
{
        int N;
        int i=0,F=0;
        N=abs(x)+abs(y);
        for(i=0;i<N;i++)
   {
                 if(F<0)
                {
                 StepCW(m,0x1);
                 F=F-y;
    }
         else
    {
           StepCCW(m,0x2);
                 F=F-x;
    }
         }
}

void Line(int x,int y,int m)////直線插補(bǔ)
{
        int k;
        if(x==0)
{
        if(y>0) for(k=0;k<y;k++)  StepCW(m,0x2);
        else  for(k=0;k<-y;k++)  StepCCW(m,0x2);
        return;
}
  if(y==0)
{
        if(x>0) for(k=0;k<x;k++)  StepCW(m,0x1);
        else  for(k=0;k<-x;k++)  StepCCW(m,0x1);
        return;
}
if(x>0)
{
        if(y>0) Line1(x,y,m);
        else Line4(x,y,m);

}
else
{
        if(y>0) Line2(x,y,m);
        else Line3(x,y,m);
}
       
}
void Resetre()/////復(fù)位函數(shù)/////
{
        int i;
        int res[1];
        for(i=0;i<9;i++)
{
        res[0]=res[0]+SPM[i][0];
        res[1]=res[1]+SPM[i][1];
}
        USP2P(res[0], 200,0x1);
        USP2P(res[1], 200,0x2);
}

/////串口構(gòu)架
sbit ENTXD = P3^6;
#define ENABLETXD  {ENTXD=0;}
#define DISABLETXD {ENTXD=1;}
void InitCom(void)/////////////////tesk     ok
{
        //EA=1;      
         //ES=1;
         //ET1=1;
        TMOD = 0x20;//定時(shí)器1中斷允許
        PCON = 0x00;//smod=0
        SCON = 0x50;//方式1 ,定時(shí)器控制
        TH1 = 0Xfd;//波特率9600
        TL1 = 0Xfd;
        TR1 = 1;  //開(kāi)定時(shí)器T1運(yùn)行控制位
}

void comSendByte(unsigned char ch)///////tesk   ok
{
        TI = 0;
        SBUF = ch;
        while (!TI);
}
void comSendCMD(unsigned char node, unsigned char cmd, unsigned char low, unsigned char hi)
{
        ENABLETXD
        comSendByte(0xff);
        comSendByte(0xff);
        comSendByte(node);
        comSendByte(cmd);
        comSendByte(02);
        comSendByte(low);
        comSendByte(hi);
        DISABLETXD
}

unsigned char cmdBuFF[10];
unsigned char iCmdByte = 0;
////////////////////////////////////////
void main()
{
        unsigned char ch;
        unsigned char nodeID, cmdID, nParaBytes, ParaLow, ParaHi;
        unsigned int para;
        unsigned int ii;
        InitCom();
        InitTask();
       
        while (1)
        {
                if (RI)
                {
                        ch = SBUF;
                        RI = 0;
                comSendByte(ch);

                cmdBuFF[iCmdByte] = ch;
                iCmdByte++;
               
                 if (iCmdByte >= 7)
                    {
                        iCmdByte = 0;
                        if (cmdBuFF[0] != 0xff || cmdBuFF[1] != 0xff)
                                {
                                        continue;
                                }

                                else
                                {
                                        // byte0     1      2       3      4         5         6
                                        // 0xFF  0xFF   NODE#  CMDID          PARALEN   PARALOW   PARAHI
                                        nodeID = cmdBuFF[2];
                                        cmdID = cmdBuFF[3];
                                        nParaBytes = cmdBuFF[4];
                                        ParaLow = cmdBuFF[5];
                                        ParaHi = cmdBuFF[6];

                                        para = ParaHi;
                                        para <<= 8;
                                        para |= ParaLow;

                                       
                                        switch (cmdID)
                                        {
                                        case 0x0:
                                                Flash(200);
                                    ENABLETXD
                                                break;
                                        case 0x2:
                                          StepCW((char)ParaLow,nodeID);                                               
                                                break;
                                        case 0x3:
                                          USP2P(500, 100, 0x1);
                                                break;
                                        case 0x4:       
                                                SAVE2((int)ParaLow, (int)ParaHi);
                                                break;
                                        case 0x5:
                                                for(ii=0;ii<9;ii++)
                                          {
                                           Line(SPM[ii][0],SPM[ii][1],(int)ParaHi);
                                                }
                                                break;
                                        case 0x6:
                                                break;
                                        case 0x80:
                                       
                                                break;
                                        case 0x82:
                                               
                                                break;
                                        case 0x84:
                                               
                                                break;

                                        }
                                }
                                }
                }
                }
       
}


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

使用道具 舉報(bào)

沙發(fā)
ID:235954 發(fā)表于 2020-9-5 09:17 | 只看該作者
需要什么,PWM程序,還是串口通信程序
回復(fù)

使用道具 舉報(bào)

板凳
ID:411723 發(fā)表于 2020-9-5 09:39 | 只看該作者
梁廷明 發(fā)表于 2020-9-5 09:17
需要什么,PWM程序,還是串口通信程序

好了 不是程序的問(wèn)題 ,是步進(jìn)電機(jī)電源問(wèn)題, 控制信號(hào)電平太低了 ,換成5v的就可以控制了,謝謝
回復(fù)

使用道具 舉報(bào)

地板
ID:832425 發(fā)表于 2020-11-24 14:42 | 只看該作者
看上去不錯(cuò),沒(méi)有共享出來(lái)大家學(xué)習(xí)一下嗎
回復(fù)

使用道具 舉報(bào)

5#
ID:475858 發(fā)表于 2020-11-27 15:46 | 只看該作者
控制信號(hào)和步進(jìn)電機(jī)之間應(yīng)該有驅(qū)動(dòng)芯片
回復(fù)

使用道具 舉報(bào)

6#
ID:899124 發(fā)表于 2021-4-1 14:52 | 只看該作者
你好,我想請(qǐng)教一下,這個(gè)程序,我需要怎樣接電路啊?
回復(fù)

使用道具 舉報(bào)

7#
ID:899124 發(fā)表于 2021-4-2 16:01 | 只看該作者
你好,我想請(qǐng)教一下單片機(jī)與DM542之間怎么接線呢?是共用5V接正極還是怎么接線?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 岛国午夜 | 男人影音| 在线观看亚洲欧美 | 国产一级电影在线观看 | 天天摸天天干 | 黄视频在线网站 | 午夜激情在线视频 | 欧美日韩精品一区 | 国产1区2区3区 | 免费成人毛片 | 中文字幕第一页在线 | 日韩久久久久 | 国产做a爱免费视频 | 国产成人免费视频网站视频社区 | 中文视频在线 | 亚洲网址 | 国产精品a免费一区久久电影 | 精品久久影院 | 天堂色网 | 色狠狠桃花综合 | 亚洲免费在线 | 国产精品久久久久久久久久久久 | 成人免费看电影 | 久久久123 | 一区二区在线 | 成人欧美一区二区三区黑人孕妇 | 欧美中文字幕一区二区 | 久久三区 | 一区二区三区四区在线播放 | 国产精品一区二区三区久久 | 涩涩视频在线观看 | 女朋友的闺蜜3韩国三级 | 久久毛片 | 中文字幕欧美在线观看 | 久久久久久国产一区二区三区 | 久久久.com | 人成在线视频 | 国产资源在线观看 | 久久黄网 | 久久久观看 | 亚洲欧美另类在线 |