找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

求指導(dǎo) 四相步進(jìn)電機(jī),如何在原來的基礎(chǔ)上加上步數(shù)控制的設(shè)計思路和方法?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:925099 發(fā)表于 2021-5-28 15:19 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
求大神指導(dǎo) 已經(jīng)能夠?qū)崿F(xiàn)方式選擇,正反轉(zhuǎn),簡單的加減速,步數(shù)顯示,但仍需對步數(shù)控制的設(shè)計,例如默認(rèn)初始步數(shù)為10,則通過按鍵可以加減步數(shù),然后步進(jìn)電機(jī)運行指定步數(shù)后停下。由于篇幅限制,仿真及程序在附件中

  1. #include<reg51.h>
  2. #include<stdio.h>
  3. void delay1(void);
  4. void delay2(void);
  5. void display(int);
  6. int bs=0;
  7. int cishu;
  8. main()
  9. {
  10.         char a,b,c,d,j,*q,
  11.         done1[8]=
  12.         {0x01,0x02,0x04,0x00,0x01,0x04,0x02,0x00},
  13.   done2[8]=
  14.   {0x03,0x06,0x05,0x00,0x03,0x05,0x06,0x00},
  15.   done3[14]=
  16.   {0x01,0x03,0x02,0x06,0x04,0x05,0x00,0x01,0x05,0x04,0x06,0x02,0x03,0x00};
  17.         P3=0x20;
  18.         delay1();
  19.         L:a=P3;
  20.                 while(!(a&0x08))
  21.                 {
  22.                         P3=0x20;
  23.                         a=P3;
  24.                         delay1();
  25.                 }
  26.                 if(a&0x01)
  27.                         q=done1;
  28.                 if(a&0x02)
  29.                         q=done2;
  30.                 if(a&0x04)
  31.                         q=done3;
  32.                 if(a&0x20)
  33.                         cishu=5;
  34.                 else cishu=50;
  35.                 if(a&0x10)
  36.                 {
  37.                         P3=0x40;
  38.                         b=0;
  39.                 }
  40.                 else
  41.                 {
  42.                         P3=0x80;
  43.                         if(a&0x04)
  44.                                 b=7;
  45.                         else b=4;
  46.     }
  47.                 d=b;
  48.                 while(1)
  49.                 {
  50.                         c=*(q+b);
  51.                         if(c==0)
  52.                                 b=d;
  53.                         else
  54.                         {
  55.                                 P1=c;
  56.                                 b++;
  57.                                 bs++;
  58.                                 display(bs);
  59.                                 j=a;
  60.                                 a=P3;
  61.                                 if(a!=j)
  62.                                 {
  63.                                         if(!(a&0x08))
  64.                                                 bs=0;
  65.                                         goto L;
  66.                                 }
  67.                         }
  68.                 }
  69.         }
  70.         void delay1()
  71.         {
  72.                 int i,j;
  73.                 for(i=0;i<200;i++)
  74.                 for(j=0;j<300;j++);
  75.         }
  76.         void display(int n)
  77.         {
  78.                 unsigned char tab[10]=
  79.                 {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67};
  80.                 unsigned char i,k,t,num[4];
  81.                         num[0]=n%10;
  82.                         num[1]=(n/10)%10;
  83.                         num[2]=(n/100)%10;
  84.                         num[3]=(n/1000)%10;
  85.                         for(t=0;t<cishu;t++)
  86.                         {
  87.                                 k=0x08;
  88.                                 for(i=0;i<4;i++)
  89.                                 {
  90.                                         P2=k;
  91.                                         P0=~(tab[num[i]]);
  92.                                         k=k>>1;
  93.                                         delay2();
  94.                                 }
  95.                         }
  96.                 }
  97.         void delay2()
  98.                 {
  99.                         int i,j;
  100.                         for(i=0;i<10;i++)
  101.                         for(j=0;j<60;j++);
  102.                 }
復(fù)制代碼

單片機(jī)綜合作業(yè).rar (66.55 KB, 下載次數(shù): 6)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:844772 發(fā)表于 2021-5-28 17:23 | 只看該作者
while(1)
                {
                        c=*(q+b);
                        if(c==0)
                                b=d;
                        else
                        {
                                P1=c;
                                b++;
                                bs++;
                                display(bs);
                                j=a;
                                a=P3;
                                if(a!=j)
                                {
                                        if(!(a&0x08))
                                                bs=0;
                                        goto L;
                                }
                        }
                }
你的while循環(huán)幾次,就轉(zhuǎn)幾步的,你現(xiàn)在情況是有按鍵就停轉(zhuǎn),假如變量roteNum 保存轉(zhuǎn)幾步,你加一句在  if(a!=j)的前面就行了 : if(roteNum--)  goto L;   (前面怎么給roteNum 賦值我就不管了,還有我不贊成你程序的寫法)
回復(fù)

使用道具 舉報

板凳
ID:883698 發(fā)表于 2021-5-28 18:36 | 只看該作者
有一個步進(jìn)電機(jī)控制軟件,主要功能是:
1、可以分別控制3個步進(jìn)電機(jī)運轉(zhuǎn)
2、每個步進(jìn)電機(jī),轉(zhuǎn)動一圈是 2048 步
3、三個步進(jìn)可以任意輸入不同步數(shù)運行
4、步進(jìn)電機(jī)運行時,可以實時讀取當(dāng)前電機(jī)位置

回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表