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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4007|回復: 8
收起左側

單片機步進電機程序4線5相源程序與仿真(加速 減速 順時針 逆時針 暫停)按鍵控制

[復制鏈接]
ID:281009 發表于 2018-4-15 11:11 | 顯示全部樓層 |閱讀模式
這里給大家分享一下常用的4線5相步進電機的單片機源程序和仿真,希望能對大家有所幫助
帶6個按鈕 加速 減速 順時針 逆時針 暫停  運行功能
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)lcd12864液晶顯示:
0.png 0.png 0.png

單片機源程序如下:
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit CS1=P1^6;    /*片選1*/
  5. sbit CS2=P1^7;    /*片選2*/
  6. sbit SEG_LE=P1^0;
  7. sbit LCD_LE=P1^1;
  8. sbit SEG_OE=P1^2;
  9. sbit LCD_OE=P1^3;

  10. uchar code seg[]=//數碼管:正向位置;共陽極;正向連接
  11. {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//0-9

  12. uchar code table_speed_num1[]=
  13. {
  14. 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*1*/
  15. 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,/*5*/
  16. 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,/*0*/
  17. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,/*.*/
  18. 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00/*0*/
  19. };                                                        //150.0
  20. uchar code table_speed_num2[]={
  21. 0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,/*7*/
  22. 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,/*5*/
  23. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,/*.*/
  24. 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,/*0*/
  25. 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00/*0*/
  26. };                                                  //75.00
  27. uchar code table_speed_num3[]={
  28. 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,/*3*/
  29. 0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,/*7*/
  30. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,/*.*/
  31. 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,/*5*/
  32. 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00/*0*/
  33. };                                                 //37.50
  34. uchar code table_speed_num4[]={
  35. 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*1*/
  36. 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,/*8*/
  37. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,/*.*/
  38. 0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,/*7*/
  39. 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00/*5*/
  40. };                                                //18.75
  41. uchar code table_speed_num5[]={
  42. 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,/*9*/
  43. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,/*.*/
  44. 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,/*3*/
  45. 0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,/*7*/
  46. 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00/*5*/
  47. };                                           //9.375

  48. uchar code table_direct_state_Y[]=
  49. {
  50. 0x00,0xFE,0x00,0xFC,0x00,0xFE,0x00,0xF2,0x12,0x1A,0x96,0x12,0x12,0xF2,0x02,0x00,0x20,0x1F,0x00,0x0F,0x00,0x7F,0x00,0x47,
  51. 0x20,0x10,0x0F,0x10,0x20,0x67,0x00,0x00,

  52. 0x00,0xFC,0x44,0x44,0x44,0xFC,0x10,0x90,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x00,0x00,0x07,0x04,0x04,0x04,0x07,0x00,0x00,
  53. 0x03,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,

  54. 0x40,0x30,0x2C,0xEB,0x28,0x28,0x08,0x40,0x40,0x40,0xFF,0x40,0x40,0x40,0x40,0x00,0x01,0x01,0x01,0x7F,0x21,0x11,0x09,0x00,
  55. 0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00
  56. };                                          //順時針

  57. uchar code table_direct_state_N[]=
  58. {
  59. 0x40,0x42,0xCC,0x00,0x00,0x08,0xC9,0x0E,0x08,0xF8,0x0C,0x0B,0xC8,0x08,0x00,0x00,0x40,0x20,0x1F,0x20,0x40,0x40,0x51,0x49,
  60. 0x47,0x41,0x41,0x41,0x41,0x40,0x40,0x00,

  61. 0x00,0xFC,0x44,0x44,0x44,0xFC,0x10,0x90,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x00,0x00,0x07,0x04,0x04,0x04,0x07,0x00,0x00,
  62. 0x03,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,

  63. 0x40,0x30,0x2C,0xEB,0x28,0x28,0x08,0x40,0x40,0x40,0xFF,0x40,0x40,0x40,0x40,0x00,0x01,0x01,0x01,0x7F,0x21,0x11,0x09,0x00,
  64. 0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00
  65. };                                          //逆時針



  66. uchar code table_state_roll[]=
  67. {
  68. 0x40,0x41,0xCE,0x04,0x00,0x20,0x22,0xA2,0x62,0x22,0xA2,0x22,0x22,0x22,0x20,0x00,0x40,0x20,0x1F,0x20,0x28,0x4C,0x4A,0x49,
  69. 0x48,0x4C,0x44,0x45,0x5E,0x4C,0x40,0x00,

  70. 0x10,0x08,0x84,0xC6,0x73,0x22,0x40,0x44,0x44,0x44,0xC4,0x44,0x44,0x44,0x40,0x00,0x02,0x01,0x00,0xFF,0x00,0x00,0x00,0x00,
  71. 0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,

  72. 0x00,0x00,0xFC,0x08,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,0x08,0xFC,0x08,0x00,0x00,0x00,0x00,0x07,0x02,0x02,0x02,0x02,0xFF,
  73. 0x02,0x02,0x02,0x02,0x07,0x00,0x00,0x00,

  74. 0x00,0xC0,0xC0,0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  75. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  76. };                                         //運行中...

  77. uchar code table_state_pause[]=
  78. {
  79. 0x80,0x92,0x9A,0x96,0xFB,0x52,0x52,0x80,0x7E,0x12,0x12,0x12,0xF2,0x12,0x10,0x00,0x00,0x00,0x00,0x7E,0x4B,0x4A,0x4B,0x4A,
  80. 0x4A,0x4A,0x4A,0x7E,0x01,0x00,0x00,0x00,

  81. 0x80,0x40,0x20,0xF8,0x07,0x02,0x04,0x74,0x54,0x55,0x56,0x54,0x74,0x04,0x04,0x00,0x00,0x00,0x00,0xFF,0x00,0x03,0x01,0x05,
  82. 0x45,0x85,0x7D,0x05,0x05,0x05,0x03,0x00,

  83. 0x00,0x00,0xFC,0x08,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,0x08,0xFC,0x08,0x00,0x00,0x00,0x00,0x07,0x02,0x02,0x02,0x02,0xFF,
  84. 0x02,0x02,0x02,0x02,0x07,0x00,0x00,0x00,

  85. 0x00,0xC0,0xC0,0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  86. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  87. };                                        //暫停中...

  88. uchar code stepmotor_Y_table[]={0x02,0x06,0x04,0x0C,0x08,0x09,0x01,0x03};//B-BC-C-CD-D-DA-A-AB-B 順時針 八拍
  89. uchar code stepmotor_N_table[]={0x01,0x09,0x08,0x0C,0x04,0x06,0x02,0x03};//A-AD-D-DC-C-CB-B-BA-A 逆時針 八拍
  90. uchar p; //控制轉一圈的八次轉動
  91. uchar direct;        //轉動方向標志
  92. uchar speed=3,delay=0;        //轉動速度標志

  93. extern display(uchar page,uchar column,uchar code *hzk,uchar num);        //顯示漢字函數
  94. extern display_char(uchar page,uchar column,uchar code *hzk,uchar num);         //顯示字符函數
  95. extern Keys_Scan();                 //按鍵檢測函數
  96. extern LCD_DIS();                 //LCD初始化函數
  97. //x=1時延時2ms
  98. void DelayMS(unsigned int x)
  99. {
  100.         unsigned int i,j;
  101.          for(i=x;i>0;i--)
  102.          {
  103.                  for(j=0;j<247;j++)
  104.                 ;
  105.         }        
  106. }
  107. /*********顯示速度數值函數****************/
  108. void dis_speed_num(uchar *v)        
  109. {
  110.         CS1=0;
  111.         CS2=1;
  112.         display_char(2,48,v,2);        

  113.         CS1=1;
  114.         CS2=0;
  115.         display_char(2,0,&v[32],3);
  116. }
  117. /*********顯示方向函數****************/
  118. void dis_direct_Y_N(uchar dir)
  119. {
  120.         CS1=1;
  121.         CS2=0;
  122.         if(dir==1)
  123.                 display(4,0,table_direct_state_Y,3);
  124.         if(dir==2)
  125.                 display(4,0,table_direct_state_N,3);
  126. }
  127. /*********顯示電機狀態函數****************/
  128. void dis_state_P_R(uchar *buffer)
  129. {
  130.         CS1=1;
  131.         CS2=0;
  132.         display(6,0,buffer,4);
  133. }

  134. void main()
  135. {
  136.         uchar k=0,i=0,j=0,key=0;
  137.         TMOD=0x11;
  138.         TH0=(65536-50000)/256;
  139.         TL0=(65536-50000)%256;
  140.         EA=1;
  141.         ET0=1;
  142.         SEG_OE=1;          //關數碼管輸出使能
  143.         LCD_OE=0;          //開LCD輸出使能
  144.         LCD_LE=1;          //關LCD鎖存輸出
  145.         LCD_DIS();
  146. //        TR0=1;        
  147.         while(1)
  148.         {
  149.                 while(key==0)
  150.                         key=Keys_Scan();   //檢測按鍵鍵值
  151.                 if(key==3)
  152.                 {
  153.                         direct=1;         //轉動方向標志為1,順時針轉動
  154.                         dis_direct_Y_N(direct);         
  155.                         key=0;
  156.                 }
  157.                 if(key==4)
  158.                 {
  159.                         direct=2;           //轉動方向標志為2,逆時針轉動
  160.                         dis_direct_Y_N(direct);
  161.                         key=0;
  162.                 }
  163.                 if(key==5)
  164.                 {
  165.                         TR0=0;                //關T0中斷,電機暫停轉動
  166.                         dis_state_P_R(table_state_pause);
  167.                         key=0;
  168.                 }
  169.                 if(key==6)
  170.                 {
  171.                         TR0=1;           //開T0中斷,電機開始轉動
  172.                         dis_state_P_R(table_state_roll);
  173.                         key=0;
  174.                 }
  175.                 if(key==1)
  176.                 {                        
  177.                         speed=speed-1;;        //轉動一次所需延時時間減少,轉動加速
  178.                         if(speed<=1)
  179.                                 speed=1;        //最少延時一次
  180.                         key=0;
  181.                 }
  182.                 if(key==2)
  183.                 {         
  184.                         speed=speed+1; //轉動一次所需延時時間增加,轉動減速
  185.                         if(speed>=5)
  186.                                 speed=5;   //最多延時五次
  187.                         key=0;
  188.                 }
  189.                 if(speed==1)          //顯示相應延時時間的速度數值
  190.                         dis_speed_num(table_speed_num1);
  191.                 if(speed==2)
  192.                         dis_speed_num(table_speed_num2);
  193.                 if(speed==3)
  194.                         dis_speed_num(table_speed_num3);
  195.                 if(speed==4)
  196.                         dis_speed_num(table_speed_num4);
  197.                 if(speed==5)
  198.                         dis_speed_num(table_speed_num5);
  199.                 LCD_LE=0;           //關LCD輸出使能
  200.                 SEG_OE=0;           //開數碼管輸出使能
  201.                 SEG_LE=1;           //關數碼管鎖存輸出
  202.                 P0=seg[speed]; //輸出當前速度檔位1-5,也就是延時時間
  203.                 SEG_LE=0;           //開數碼管鎖存輸出,鎖存輸出值
  204.                 LCD_LE=1;           //關LCD鎖存輸出
  205.                 DelayMS(100);  //延時一會,等待外圍器件工作,
  206.                 //沒有延時,在加速加速時可能會產生多加速或多減速
  207.         }        
  208. }
  209. /**********電機轉動函數************/
  210. void roll()
  211. {                     
  212.         if(direct==1)         //檢測方向標志,使電機順時針轉動
  213.                 P3=stepmotor_Y_table[p++];
  214.         if(direct==2)        //檢測方向標志,使電機逆時針轉動
  215.                 P3=stepmotor_N_table[p++];
  216.         if(p==8)        //轉動8次正好一圈
  217.                 p=0;
  218. }

  219. void delayspeed()
  220. {        
  221.         delay=delay+1;
  222.         if(delay>=speed)        //當延時時間delay大于速度時間speed就會使電機轉動
  223.         {                                        //特別是當加速時,delay可能是大于speed,這樣會在加速時產生等待時間
  224.                 roll();
  225.                 delay=0;
  226.         }
  227.         
  228. ……………………

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

所有資料51hei提供下載:
步進電機.zip (136.81 KB, 下載次數: 58)


回復

使用道具 舉報

ID:277788 發表于 2018-5-2 09:50 | 顯示全部樓層
資料清晰,再做個上位機更完美
回復

使用道具 舉報

無效樓層,該帖已經被刪除
ID:161115 發表于 2018-5-2 13:18 | 顯示全部樓層
很好的學習資料,感謝樓主無私的分享
回復

使用道具 舉報

ID:171940 發表于 2018-5-9 10:26 | 顯示全部樓層
很想學習一下,黑B不夠啊
回復

使用道具 舉報

ID:299677 發表于 2018-6-17 23:17 | 顯示全部樓層
老鐵這個是什么那個型號步進電機?38?
回復

使用道具 舉報

ID:355739 發表于 2018-6-21 09:27 | 顯示全部樓層
感謝分享,正在做這個東西
回復

使用道具 舉報

ID:379823 發表于 2018-7-27 16:00 來自觸屏版 | 顯示全部樓層
不錯,是個好東西
回復

使用道具 舉報

ID:379823 發表于 2018-7-27 16:01 來自觸屏版 | 顯示全部樓層
這個應該是5V的
回復

使用道具 舉報

ID:284421 發表于 2018-7-27 18:22 | 顯示全部樓層

很好的學習資料,感謝樓主的分享
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: aa级毛片毛片免费观看久 | 精品一二三| 精品一区二区久久久久久久网精 | 久久久免费观看视频 | 一级一级毛片免费看 | 国产精品区二区三区日本 | 国产激情一区二区三区 | 国产精品免费观看 | 亚洲一区二区三区四区av | 黄a免费网络 | 黄色免费网站在线看 | 黄网站涩免费蜜桃网站 | 天堂一区二区三区 | 国产美女视频黄a视频免费 国产精品福利视频 | 巨大黑人极品videos精品 | 中文字幕在线观看 | 国产一区二 | 色资源在线视频 | 91玖玖 | 国产成人99久久亚洲综合精品 | 国产免费麻豆视频 | 亚洲精品一区在线 | 亚洲大片在线观看 | 国产精品成av人在线视午夜片 | 成人av一区二区三区 | 黄色片在线网站 | 欧美精品1区2区3区 精品国产欧美一区二区 | 老妇激情毛片免费 | 97影院2| 日日日干干干 | 午夜精品一区二区三区在线观看 | 一区二区三区欧美 | 中文字幕免费观看 | 日韩在线视频一区二区三区 | 91国在线高清视频 | .国产精品成人自产拍在线观看6 | 精品91久久 | 欧美亚洲视频在线观看 | 亚洲精品一区国产精品 | 在线观看视频91 | 久久久久国产精品人 |