欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 單片機(jī)步進(jìn)電機(jī)控制器的設(shè)計-電子系統(tǒng)設(shè)計創(chuàng)新實(shí)驗(yàn)報告+仿真+源碼 [打印本頁]

作者: zzkeng    時間: 2018-10-20 14:32
標(biāo)題: 單片機(jī)步進(jìn)電機(jī)控制器的設(shè)計-電子系統(tǒng)設(shè)計創(chuàng)新實(shí)驗(yàn)報告+仿真+源碼
電子系統(tǒng)設(shè)計創(chuàng)新實(shí)驗(yàn)報告
題目步進(jìn)電機(jī)控制器的設(shè)計

設(shè)計要求:

摘要
   通過制作步進(jìn)電機(jī)控制器的設(shè)計,加深對數(shù)字電路和模擬電路的理解以及了解它們在現(xiàn)實(shí)生活中的應(yīng)用,提高動手能力。

步進(jìn)電機(jī)控制器的設(shè)計設(shè)計框圖如圖所示,系統(tǒng)由按鍵電路、單片機(jī)電路、脈沖放大電路、步進(jìn)電機(jī)等部分組成。時鐘電路產(chǎn)生一個時鐘信號,
     步進(jìn)電機(jī)按鍵電路如圖1所示
     
圖1
              該按鍵電路由六個按鍵開關(guān)組成,第一個按鈕為運(yùn)行狀態(tài)控制,運(yùn)行電機(jī)的啟動與關(guān)閉;第二個按鈕為轉(zhuǎn)速控制,控制電機(jī)的轉(zhuǎn)速;第三個按鈕為步進(jìn)數(shù)預(yù)制,可以設(shè)置電機(jī)的圈數(shù)使其自動停止;第四個按鈕為模式調(diào)節(jié),可以控制電機(jī)的模式;第五個與第六個按鈕為前三個按鈕的參數(shù)調(diào)節(jié),可以調(diào)節(jié)它們的參數(shù)。
(2)時鐘電路
此系統(tǒng)的時鐘電路設(shè)計是采用的內(nèi)部方式,即利用芯片內(nèi)部的振蕩電路。MCS-51內(nèi)部有一個用于構(gòu)成振蕩器的高增益反相放大器。這個放大器外接晶體諧振器以及電容CX1和CX2構(gòu)成并聯(lián)諧振電路,接在放大器的反饋回路中構(gòu)成時鐘電路。時鐘頻率越高,單片機(jī)控制器的控制節(jié)拍越快,運(yùn)算速度也就越快。
圖2
整個系統(tǒng)工作的流程圖如下圖所示:圖需要用VISIO繪制

              對流程圖進(jìn)行描述,如:
              系統(tǒng)上電初始化,然后進(jìn)入等待按鍵狀態(tài),如果無按鍵按下,則繼續(xù)等待,如有按鍵按下,則判斷是哪一個按鍵,然后執(zhí)行相應(yīng)的功能。
還可以再細(xì)點(diǎn)
四、系統(tǒng)測試及調(diào)試(仿真)——如果是實(shí)物制作,則寫系統(tǒng)測試及調(diào)試,如果是仿真,則寫系統(tǒng)測試與仿真
圖3 …….

在protues軟件中繪制系統(tǒng)原理圖,如下圖所示:

(整個系統(tǒng)的原理圖)

仿真過程中,記錄了7個不同的仿真波形,如圖3所示,…….然后對圖中內(nèi)容進(jìn)行說明,可以看出來它們的速度進(jìn)行調(diào)節(jié)會越來越快。


仿真中如還有其它現(xiàn)象則寫進(jìn)來!



五、結(jié)論
系統(tǒng)在仿真過程中比較順利,沒有出現(xiàn)什么大問題,只是在運(yùn)行中顯示當(dāng)前步進(jìn)數(shù)的時候,LCD1602刷新步數(shù)不是很連續(xù)。

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)

單片機(jī)源程序如下:
  1. #include "reg52.h"
  2. #include "lcd.h"

  3. sbit RUN_LED = P2^3;
  4. sbit ON_OFF = P2^4;
  5. sbit SPEED = P2^5;
  6. sbit STEP = P2^6;
  7. sbit MOD = P2^7;
  8. sbit UP = P3^0;
  9. sbit DOWN = P3^1;
  10. sbit M1 = P3^2;
  11. sbit M2 = P3^3;
  12. sbit M3 = P3^4;

  13. #define ui unsigned int
  14. #define uc unsigned char

  15. uc ON_OFF_DATA = 0;//開為1,關(guān)為0
  16. unsigned char SPEED_DATA = 5;//默認(rèn)速度為20,即1.5度為1800r/s,3.0度為600r/s,范圍為1-10
  17. unsigned long STEP_RECORD = 0;//步進(jìn)圈速
  18. unsigned long STEP_PRESET = 0;//步進(jìn)預(yù)置數(shù)
  19. uc MOD_STEP = 0;  //正反轉(zhuǎn),正轉(zhuǎn)為0,反轉(zhuǎn)為1
  20. uc MOD_PHASE = 0;//相位控制,3.0度為0,1.5度為1
  21. uc SetOrNonSetNumberStartUp ;//置數(shù)與非置數(shù)模式啟動判斷,0為非置數(shù)模式,為1為指數(shù)模式
  22. char STATE=0;//此變量存儲線圈通電狀態(tài),在中斷3中switch語句中對應(yīng)
  23. uc ControlState=0;

  24. code uc Disp[]=" STARTING UP ";

  25. int Button();
  26. void Timer1Init();
  27. void control(uc button);

  28. void aaaa()
  29. {
  30.         uc i;
  31.         LcdInit();
  32.         for(i=0;i<13;i++)
  33.         {
  34.                 LcdWriteData(Disp[i]);
  35.         }
  36. }

  37. void main()
  38. {
  39.         M1 = 0;
  40.         M2 = 0;
  41.         M3 = 0;
  42.         
  43.         RUN_LED = 0;
  44.         LcdInit();
  45.         Timer1Init();
  46.         aaaa();
  47.         
  48.         while(1)
  49.         {
  50.                
  51.                 control(Button());
  52.         }
  53. }

  54. int Button()
  55. {
  56.         static char CACHE_ON_OFF=1,
  57.                                 CACHE_SPEED=1,
  58.                                 CACHE_STEP=1,
  59.                                 CACHE_MOD=1,
  60.                                 CACHE_UP=1,
  61.                                 CACHE_DOWN=1;        
  62.         //////////////////////////////////////////////
  63.         if(ON_OFF == 0)
  64.         {
  65.                 //delay(10);
  66.                 if( CACHE_ON_OFF != ON_OFF ) // 按鍵消抖邏輯與上,上一次存入CACHE_ON_OFF的ON_OFF狀態(tài)     
  67.                 {
  68.                         CACHE_ON_OFF = ON_OFF;//將這一次ON_OFF的狀態(tài)存入CACHE_ON_OFF中
  69.                         return 1;
  70.                 }
  71.         }
  72.         else        //將這一次ON_OFF的狀態(tài)存入CACHE_ON_OFF中
  73.         {
  74.                 CACHE_ON_OFF = 1;
  75.         }
  76.         /////////////////////////////////////////////
  77.         if(SPEED == 0)
  78.         {
  79.                 //delay(10);
  80.                 if( CACHE_SPEED != SPEED ) // 按鍵消抖邏輯與上,上一次存入CACHE_SPEED的SPEED狀態(tài)     
  81.                 {
  82.                         CACHE_SPEED = SPEED ;//將這一次SPEED的狀態(tài)存入CACHE_SPEED中
  83.                         return 2;
  84.                 }
  85.         }
  86.         else        //將這一次SPEED的狀態(tài)存入CACHE_SPEED中
  87.         {
  88.                 CACHE_SPEED = 1;
  89.         }
  90.         /////////////////////////////////////////////
  91.         if(STEP == 0)
  92.         {
  93.                 //delay(10);
  94.                 if( CACHE_STEP != STEP ) // 按鍵消抖邏輯與上,上一次存入CACHE_STEP的STEP狀態(tài)     
  95.                 {
  96.                         CACHE_STEP = STEP;//將這一次STEP的狀態(tài)存入CACHE_STEP中
  97.                         return 3;
  98.                 }
  99.         }
  100.         else        //將這一次STEP的狀態(tài)存入CACHE_STEP中
  101.         {
  102.                 CACHE_STEP = 1;
  103.         }
  104.         //////////////////////////////////////////////
  105.         if(MOD == 0)
  106.         {
  107.                 //delay(10);
  108.                 if( CACHE_MOD != MOD ) // 按鍵消抖邏輯與上,上一次存入CACHE_MOD的MOD狀態(tài)     
  109.                 {
  110.                         CACHE_MOD = MOD;//將這一次MOD的狀態(tài)存入CACHE_MOD中
  111.                         return 4;
  112.                 }
  113.         }
  114.         else        //將這一次MOD的狀態(tài)存入CACHE_MOD中
  115.         {
  116.                 CACHE_MOD = 1;
  117.         }
  118.         //////////////////////////////////////////////
  119.         if(UP == 0)
  120.         {
  121.                 //delay(10);
  122.                 if( CACHE_UP != UP )   
  123.                 {
  124.                         CACHE_UP = UP;
  125.                         return 5;
  126.                 }
  127.         }
  128.         else        
  129.         {
  130.                 CACHE_UP = 1;
  131.         }
  132.         //////////////////////////////////////////////
  133.         if(DOWN == 0)
  134.         {
  135.                 //delay(10);
  136.                 if( CACHE_DOWN != DOWN )   
  137.                 {
  138.                         CACHE_DOWN = DOWN;
  139.                         return 6;
  140.                 }
  141.         }
  142.         else        
  143.         {
  144.                 CACHE_DOWN = 1;
  145.         }

  146.         return 0;
  147. }











  148. void control(uc button)
  149. {
  150.         static uc d=0;
  151.         static STEP_RECORD_COMPARE;
  152.         if(button == 2 || button == 3 || button == 4)
  153.         {
  154.                 ControlState = button;//保存當(dāng)前控制界面
  155.         }
  156.         if (button == 0)
  157.         {
  158.                 if( ControlState == 3 )
  159.                 {
  160.                         if( STEP_RECORD_COMPARE != STEP_RECORD)
  161.                         {
  162.                                 LcdStep();
  163.                                 STEP_RECORD_COMPARE = STEP_RECORD;
  164.                         }
  165.                 }
  166.         }
  167.         else if(button == 1)
  168.         {
  169.                 if( (button != 5) && (button != 6) ) //進(jìn)入此if語句不能為上下鍵
  170.                 {
  171.                         ON_OFF_DATA = !ON_OFF_DATA;
  172.                         RUN_LED = ON_OFF_DATA;
  173.                 }
  174.                 if(ON_OFF_DATA == 0)//關(guān)閉
  175.                 {
  176.                         EA = 0;//關(guān)閉中斷
  177.                         M1 = 0;
  178.                         M2 = 0;
  179.                         M3 = 0;
  180.                         SetOrNonSetNumberStartUp = 0;//置數(shù)與非置數(shù)模式置位為非置數(shù)模式
  181.                         if( ControlState == 3 )
  182.                         {
  183.                                 LcdStep();
  184.                         }

  185.                 }
  186.                 else if(ON_OFF_DATA == 1)
  187.                 {
  188.                         SetOrNonSetNumberStartUp = STEP_PRESET;
  189.                         EA = 1;//打開總中斷
  190.                         STATE=0;
  191.                 }
  192.         }
  193.         //判斷運(yùn)行狀態(tài)為運(yùn)行還是關(guān)閉,1運(yùn)行則無法修改,if(b == 0)
  194.         
  195.         else if(ControlState == 2)//speed參數(shù)調(diào)整
  196.         {
  197.                 if(ON_OFF_DATA == 0)
  198.                 {
  199.                         if( (button == 5) && ( SPEED_DATA < 10 ) )
  200.                         {
  201.                                 SPEED_DATA++;
  202.                         }
  203.                         else if( (button == 6) && (SPEED_DATA > 1) )
  204.                         {
  205.                                 SPEED_DATA--;
  206.                         }
  207.                 }
  208.                 LcdSpeed();
  209.                 ///////////////////////////////////////////////////////////////
  210.         }
  211.         else if (ControlState == 3)//STEP,運(yùn)行圈速預(yù)置
  212.         {
  213.                 if( (ON_OFF_DATA == 0) != (button == 3))//進(jìn)入此if語句不得為運(yùn)行狀態(tài),切必須為上下鍵
  214.                  {
  215.                         if(button == 5)
  216.                         {
  217.                                 STEP_PRESET++;
  218.                         }
  219.                         else if( (button == 6) && (STEP_PRESET != 0) )
  220.                         {
  221.                                 STEP_PRESET--;
  222.                         }
  223.                 }
  224.                 else if(ON_OFF_DATA == 0)
  225.                 {
  226.                         STEP_PRESET = 0;
  227.                         STEP_RECORD = 0;
  228.                         //步數(shù)和步速置數(shù)清零
  229.                 }        
  230.                 LcdStep();//更新顯示命令               
  231.         }
  232.         else if (ControlState == 4)//mod,模式預(yù)置
  233.         {
  234.                 if( (button != 5) && (button != 6) )
  235.                 {
  236.                         d = !d;
  237.                 }
  238.                 if(d == 0)
  239.                 {
  240.                                 if(button == 5)
  241.                                 {
  242.                                         if ((MOD_STEP != 1) && (ON_OFF_DATA == 0) )
  243.                                         {
  244.                                                 MOD_STEP++;
  245.                                         }
  246.                                 }
  247.                                 else if(button == 6)
  248.                                 {
  249.                                         if((MOD_STEP != 0)  && (ON_OFF_DATA == 0) )
  250.                                         {
  251.                                                 MOD_STEP--;
  252.                                         }
  253.                                 }
  254.                                 LcdModStep();//更新正反轉(zhuǎn)顯示命令
  255.                 }
  256.                 else if(d != 0)
  257.                 {
  258.                                 if(button == 5)
  259.                                 {
  260.                                         if ( (MOD_PHASE != 1) && (ON_OFF_DATA == 0) )
  261.                                         {
  262.                                                 MOD_PHASE++;
  263.                                         }
  264.                                 }
  265.                                 else if(button == 6)
  266.                                 {
  267.                                         if ( (MOD_PHASE != 0)  && (ON_OFF_DATA == 0) )
  268.                                         {
  269.                                                 MOD_PHASE--;
  270.                                         }
  271.                                 }
  272.                                 LcdModPhase();//更新相位顯示命令
  273.                 }
  274.         }
  275. }




  276. void Timer1Init()//定時器初始化
  277. {
  278.         TMOD|=0X01;//選擇為定時器0模式,工作方式1,僅用TR0打開啟動。

  279.         TH0=0XFC;        //給定時器賦初值,定時8.33ms
  280.         TL0=0X18;        
  281.         ET0=1;//打開定時器1中斷允許
  282.         TR0=1;//打開定時器        


  283.         EA=0;//打開總中斷

  284. }



  285. void Timer0() interrupt 1
  286. {
  287.         static ui b=0;
  288.         
  289.         TH0=0XFC;        //給定時器賦初值,定時8.33ms
  290.         TL0=0X18;
  291.         //if(SetOrNonSetNumberStartUp == 0)
  292.         if( b >= (11 - SPEED_DATA) )
  293.         {
  294.                 b = 0;
  295.                 if( (MOD_STEP == 0) && (MOD_PHASE == 0) ) //正轉(zhuǎn)3
  296.                 {
  297.                         STATE++;
  298.                         STATE++;
  299.                         if( STATE > 4 )
  300.                         {
  301.                                 STATE = 0;
  302.                         }
  303.                 }
  304.                 else if( (MOD_STEP == 0) && (MOD_PHASE == 1) ) //正轉(zhuǎn)1.5
  305.                 {
  306.                         STATE++;
  307.                         if( STATE > 5 )
  308.                         {
  309.                                 STATE = 0;
  310.                         }
  311.                 }
  312.                 else if( (MOD_STEP == 1) && (MOD_PHASE == 0) ) //反轉(zhuǎn)3
  313.                 {
  314.                         STATE--;
  315.                         STATE--;
  316.                         if( STATE < 0 )
  317.                         {
  318.                                 STATE = 4;
  319.                         }
  320.                 }
  321.                 else if( (MOD_STEP == 1) && (MOD_PHASE == 1) ) //反轉(zhuǎn)1.5
  322.                 {
  323.                         STATE--;
  324.                         if( STATE < 0 )
  325.                         {
  326.                                 STATE = 5;
  327.                         }
  328.                 }
  329.                 switch(STATE)
  330.                 {
  331.                         case 0:
  332.                                 M1 = 1;
  333.                                 M2 = 0;
  334.                                 M3 = 0;
  335.                                 break;
  336.                         case 1:
  337.                                 M1 = 1;
  338.                                 M2 = 1;
  339.                                 M3 = 0;
  340.                                 break;
  341.                         case 2:
  342.                                 M1 = 0;
  343. ……………………

  344. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼


所有資料51hei提供下載:
步進(jìn)電機(jī)控制器的設(shè)計.7z (230.14 KB, 下載次數(shù): 105)




作者: admin    時間: 2018-10-20 15:46
好資料,51黑有你更精彩!!!




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