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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8018|回復: 9
收起左側

51單片機控制步進電機數碼管顯示(按鍵控制啟動反向加速減速)

  [復制鏈接]
ID:130231 發表于 2017-5-27 16:35 | 顯示全部樓層 |閱讀模式
51單片機控制步進電機數碼管顯示,按鍵控制啟動反向加速減速。

單片機源程序如下:
  1. /****************************************Copyright (c)**************************************************                           
  2. **                                    
  3. ** -----------------------------------------------------------------------------------------------------
  4. ** File Name    :
  5. ** Version      : V1.0.0
  6. ** Description  :                                
  7. * 【外部晶振】: 11.0592mhz       
  8. * 【主控芯片】: STC89C52
  9. * 【編譯環境】: Keil μVisio4       
  10. * 【程序功能】:                                                                                                    
  11. * 【使用說明】:
  12. ** -----------------------------------------------------------------------------------------------------
  13. ** Author       : Creavalia
  14. ** Date         : 10月19日
  15. ** -----------------------------------------------------------------------------------------------------
  16. ** Modify Person:
  17. ** Modify Date  :
  18. ** Description  :
  19. *********************************************************************************************************/
  20. // Includes --------------------------------------------------------------------------------------------
  21. #include<reg51.h>
  22. /********************************************************************************************************
  23. **                         Marcos define
  24. *********************************************************************************************************/
  25. #define MotorTabNum 5
  26. unsigned char T0_NUM;
  27. //IO設置
  28. sbit K1 = P3^5;        // 啟動
  29. sbit K2 = P3^4;        // 反向
  30. sbit K3 = P3^3;        // 加速
  31. sbit K4 = P3^2;        // 減速

  32. sbit FX      = P2^4;     // 方向
  33. sbit MotorEn = P2^5;     // 使能
  34. sbit CLK     = P2^6;     // 脈沖

  35. //----數碼管---------------
  36. sbit SMG1 = P2^0;                                        //數碼管第一位定義
  37. sbit SMG2 = P2^1;                                        //數碼管第二位定義
  38. sbit SMG3 = P2^2;                                        //數碼管第三位定義
  39. sbit SMG4 = P2^3;                                        //數碼管第四位定義

  40. int table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};           //共陰極數碼管段值
  41. //int table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,};           //共陽極數碼管段值


  42. unsigned char g_MotorSt = 0;     // 啟停
  43. unsigned char g_MotorDir = 0;    // 正反

  44. //unsigned char MotorTab[6] = {200, 160, 120, 80, 40, 20};
  45. unsigned char MotorTab[6] = {12, 10, 8, 6, 4, 2};
  46. //unsigned char MotorTab[6] = {6, 5, 4, 3, 2, 1};

  47. signed char g_MotorNum = 0;

  48. //--------------
  49. void delayms(xms);
  50. void mDelay(unsigned int DelayTime);                //延時函數
  51. void T0_Init();

  52. void KeyScan(void);
  53. void Display(void);


  54. // 主程序  main()
  55. void main(void)
  56. {
  57.         unsigned char i;
  58.         T0_Init();             // 定時器0 初始化
  59.         MotorEn = 0;     // L297 使能(只有智能,才能正常工作,否則停止)
  60.         FX = 0;
  61.         while(1)
  62.         {
  63.                 KeyScan();              // 按鍵
  64.                 for(i=0; i<10; i++)
  65.                 Display();
  66.         }

  67. }

  68. /********定時器初始化***********************************************************/
  69. void T0_Init()
  70. {
  71.         TMOD = 0x01;
  72.         TH0 = (65535-100)/256;  // 1ms
  73.         TL0 = (65535-100)%256;
  74.         EA = 1;
  75.         ET0 = 1;
  76. //        TR0 = 1;

  77. }

  78. /********定時器中斷*****************/
  79. void T0_time() interrupt 1
  80. {
  81. //        TR0 = 0;
  82.         TH0 = (65535-100)/256;   
  83.         TL0 = (65535-100)%256;
  84.         T0_NUM++;
  85.         if(T0_NUM >= MotorTab[g_MotorNum])        // 增加按鍵g_MotorNum++   減小按鍵g_MotorNum--
  86.         {
  87.                 T0_NUM = 0;
  88.                 CLK=CLK^0x01;               //   輸出脈沖
  89.         }
  90. //        TR0 = 1;
  91. }         


  92. //-----按鍵控制---------------------
  93. void KeyScan(void)
  94. {
  95.         if(K1 == 0)
  96.         {
  97.                 delayms(5);   // 軟件延時消抖
  98.                 if(K1 == 0)
  99.                 {
  100.                         while(!K1){Display();};
  101.                         g_MotorSt = g_MotorSt ^ 0x01;
  102.                         MotorEn ^= 1;
  103.                         TR0 = 1;
  104.                 }
  105.         }

  106.         if(K2 == 0)
  107.         {
  108.                 delayms(10);   // 軟件延時消抖
  109.                 if(K2 == 0)
  110.                 {
  111.                 //        while(!K2){Display();};       
  112.                         g_MotorDir = g_MotorDir ^ 0x01;
  113.                         FX ^= 1;
  114.                         while(!K2){Display();};       
  115.                 }
  116.         }

  117.         if(K3 == 0)  // 加速
  118.         {
  119.                 delayms(5);   // 軟件延時消抖
  120.                 if(K3 == 0)
  121.                 {
  122.                         while(!K3){Display();};       
  123.                         g_MotorNum++;
  124.                         if(g_MotorNum > MotorTabNum)
  125.                                 g_MotorNum = MotorTabNum;
  126.                 }
  127.         }

  128.         if(K4 == 0)  // 減速
  129.         {
  130.                 delayms(5);   // 軟件延時消抖
  131.                 if(K4 == 0)
  132.                 {
  133.                         while(!K4){Display();};       
  134.                         g_MotorNum--;
  135.                         if(g_MotorNum < 0)
  136.                                 g_MotorNum = 0;
  137.                 }
  138.         }


  139. }


  140. /******************************************************************************
  141. * 名稱: Set_Display()
  142. * 功能: 數碼管顯示函數
  143. * 輸入: 無
  144. * 輸出: 無
  145. * 說明:
  146. ******************************************************************************/
  147. void Display(void)
  148. {
  149.         unsigned char b1, b2;
  150.         b1=g_MotorNum/10;               
  151.     b2=g_MotorNum%10;
  152.         if(FX == 0)
  153.                 P0=0x71;//顯示F
  154.     else
  155.                 P0=0x79;
  156.         SMG1=0;                                                         
  157.     delayms(3);
  158.     SMG1=1;

  159.         P0=0x40;
  160.     SMG2=0;                                                         //顯示--
  161.     delayms(3);
  162.     SMG2=1;

  163.         P0=table[b1];
  164.         SMG3=0;                                                         //顯示十位
  165. ……………………

  166. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
51單片機控制步進電機數碼管顯示.zip (1.75 KB, 下載次數: 181)


回復

使用道具 舉報

ID:1 發表于 2017-6-11 03:20 | 顯示全部樓層
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

ID:89286 發表于 2017-6-11 05:01 | 顯示全部樓層
thanks for sharing
回復

使用道具 舉報

ID:217754 發表于 2017-7-17 23:33 | 顯示全部樓層
新手需要多看。看讀。。謝謝分享。下來學習一下。。
回復

使用道具 舉報

ID:129783 發表于 2017-12-18 15:50 | 顯示全部樓層
請問,剛開始時轉速慢,抖動,電機發熱如何處理?使用42步進電機及驅動器
回復

使用道具 舉報

ID:129783 發表于 2017-12-18 15:51 | 顯示全部樓層
請問,42步進電機發熱,抖動怎么解決,謝謝!
回復

使用道具 舉報

ID:129783 發表于 2017-12-18 15:52 | 顯示全部樓層
請問,42步進電機發熱,抖動如何解決,謝謝!
回復

使用道具 舉報

ID:130231 發表于 2018-1-8 12:15 | 顯示全部樓層
yyyttt_2007 發表于 2017-12-18 15:52
請問,42步進電機發熱,抖動如何解決,謝謝!

看看電機在不在合理的范圍發熱。電機表面60度到70度是正常。抖動的話。就我個人認為,原因和對應的解決方法陳訴如下:
1、馬達選小了,慣量不夠,解決就是更換相應型號的馬達了
2、電流設小了,將電流設成對應值
3、旋鈕未調,將旋鈕調至相應的檔位了
4、處于共振區,建議調節細分或繞開此區
5、馬達接線錯誤(主要是8引線馬達),將馬達引線接對

如果是步進伺服,振動一般是:
1、增益未調對,需調節增益
2、馬達選小了,更換合適的馬達
回復

使用道具 舉報

ID:661047 發表于 2019-12-10 21:42 | 顯示全部樓層
要開始每天簽到,攢黑幣了
回復

使用道具 舉報

ID:922888 發表于 2021-5-22 20:57 | 顯示全部樓層
有PROTEUS圖嗎
回復

使用道具 舉報

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

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 毛片一区二区三区 | 黄色播放 | 亚洲国产成人精品久久久国产成人一区 | 国产91综合一区在线观看 | 日韩在线中文 | 久久免费精品视频 | 国产成人精品久久 | 欧美日韩在线一区二区三区 | 欧美中文字幕在线观看 | 久久综合久色欧美综合狠狠 | 精品久久久久久红码专区 | 日韩欧美国产一区二区 | 日韩和的一区二区 | 精品国产一区二区三区久久影院 | 黄色日批视频 | 日韩在线免费视频 | 成人不卡视频 | 欧美一区免费 | 色成人免费网站 | 一本大道久久a久久精二百 欧洲一区二区三区 | 欧美国产大片 | 91高清在线观看 | 成人精品视频 | 免费在线a视频 | 国产精品不卡一区 | 三级视频国产 | 91麻豆精品国产91久久久更新资源速度超快 | 日韩精品视频在线观看一区二区三区 | 81精品国产乱码久久久久久 | 天天综合永久 | 国产免费视频在线 | 成人在线一区二区三区 | 成人免费一区二区三区视频网站 | 国产欧美一区二区三区久久人妖 | 精品福利一区二区三区 | 天天操天天干天天曰 | 国产成人免费网站 | 日日干干夜夜 | 久久国产精品免费一区二区三区 | 久久99精品国产 | 欧美精品一二区 |