找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8666|回复: 8
收起左侧

步进电机调速控制系统资料(原理图+单片机源码)

  [复制链接]
ID:287880 发表于 2018-3-5 19:24 | 显示全部楼层 |阅读模式
输入电压12V,经稳压电路后输出5V电压;(12V给电机供电)
电路中四个按键控制电机转速:(由左到右1:正转 2: 反转 3: 加速;4: 减速;)
电路中的四位一体数码管显示转速;
电路中的单独的数码管显示电机的档位(正转为1;反转为2;加速为3;减速为4);
加速/(减速)时:每按一次按键数码管显示转速加1/(减1
电机驱动电路输入端的四个接线端由上到下依次为P1_0,P1_1,P1_2,P1_3
0.jpg
程序流程图与框图:
0.jpg 0.jpg

电路原理图:
0.jpg

单片机源程序如下:
  1. #include<reg52.h>
  2. #define unint unsigned int
  3. void delay();

  4. void anjian();
  5. void frun();
  6. void zrun();
  7. code unsigned char runz[8]={ 0x03,0x0b,0x09,0x0d,0x0c,0x0e,0x06,0x07}; //正转动数组
  8. code unsigned char runf[8]={ 0x07,0x06,0x0e,0x0c,0x0d,0x09,0x0b,0x03}; //反转动数组
  9. code unsigned char seg7code[10]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //显示段码 数码管字跟:
  10. unsigned char a,b,s,i,j,k,z,gw,sw,bw,speed,m;
  11. int y=31;//定义转动速度,数值越大电机转速越慢反之则快
  12. sbit P2_0=P2^0;//正转按键
  13. sbit P2_1=P2^1;//反转按键
  14. sbit P2_2=P2^2;//加速按键
  15. sbit P2_3=P2^3;//减速按键        
  16. sbit P1_7=P1^7;


  17. main()
  18. { P1_7=0;
  19. a=0;
  20. b=0;
  21. while(1)
  22.   {

  23.          if(P2_0==0)
  24.       {
  25.           while(!P2_0);        
  26.                     b=1;
  27.                   P0=seg7code[1];
  28.       }
  29.        if(P2_1==0)
  30.       {
  31.           while(!P2_1);
  32.           b=2;
  33.           P0=seg7code[2];
  34.        }
  35.          anjian();  
  36.           switch(b)
  37.         {
  38.         case 0: break;
  39.         case 1: frun();break;
  40.         case 2: zrun();        break;
  41.         default:break;        
  42.         }
  43.         switch(y)
  44.         {
  45.         case 7:speed=100;break;
  46.         case 9:speed=99;break;
  47.         case 11:speed=98;break;
  48.         case 13:speed=97;break;
  49.         case 15:speed=96;break;
  50.         case 17:speed=95;break;
  51.         case 19:speed=94;break;
  52.         case 21:speed=93;break;
  53.         case 23:speed=92;break;
  54.         case 25:speed=91;break;
  55.         case 27:speed=90;break;
  56.         case 29:speed=89;break;
  57.         case 31:speed=88;break;
  58.         case 33:speed=87;break;
  59.         case 35:speed=86;break;
  60.         case 37:speed=85;break;
  61.         case 39:speed=84;break;
  62.         case 41:speed=83;break;
  63.         case 43:speed=82;break;
  64.         case 45:speed=81;break;
  65.         case 47:speed=80;break;
  66.         case 49:speed=79;break;
  67.         case 51:speed=78;break;
  68.         case 53:speed=77;break;
  69.         case 55:speed=76;break;
  70.         case 57:speed=75;break;
  71.         case 59:speed=74;break;
  72.         case 61:speed=73;break;
  73.         case 63:speed=72;break;
  74.         case 65:speed=71;break;
  75.         case 67:speed=70;break;
  76.         case 69:speed=69;break;
  77.         case 71:speed=68;break;
  78.     case 73:speed=67;break;
  79.         case 75:speed=66;break;
  80.         case 77:speed=65;break;
  81.         case 79:speed=64;break;
  82.         case 81:speed=63;break;
  83.         case 83:speed=62;break;
  84.         case 85:speed=61;break;
  85.         case 87:speed=60;break;
  86.         case 89:speed=59;break;
  87.         case 91:speed=58;break;
  88.         case 93:speed=57;break;
  89.         case 95:speed=56;break;
  90.         case 97:speed=55;break;
  91.         case 99:speed=54;break;
  92.         case 101:speed=53;break;
  93.         case 103:speed=52;break;
  94.         case 105:speed=51;break;
  95.         case 107:speed=50;break;
  96.         case 109:speed=49;break;
  97.         case 111:speed=48;break;
  98.         case 113:speed=47;break;
  99.         case 115:speed=46;break;
  100.         case 117:speed=45;break;
  101.         case 119:speed=44;break;
  102.         case 121:speed=43;break;
  103.         case 123:speed=42;break;
  104.         case 125:speed=41;break;
  105.         case 127:speed=40;break;
  106.         case 129:speed=39;break;
  107.         case 131:speed=38;break;
  108.         case 133:speed=37;break;
  109.         case 135:speed=36;break;
  110.         case 137:speed=35;break;
  111.         case 139:speed=34;break;
  112.         case 141:speed=33;break;
  113.         case 143:speed=32;break;
  114.         case 145:speed=31;break;
  115.         case 147:speed=30;break;
  116.         case 149:speed=29;break;
  117.         case 151:speed=28;break;
  118.         case 153:speed=27;break;
  119.         case 155:speed=26;break;
  120.         case 157:speed=25;break;

  121.         default:break;
  122.         }
  123.   }

  124.    }

  125. void delay(i)//延时函数
  126.   {
  127.       for(j=0;j<i;j++)
  128.              for(k=0;k<30;k++);   
  129.          display();  
  130.   }

  131.   void delay2(m)//延时函数
  132.   {
  133.       for(j=0;j<m;j++);
  134.              for(k=0;k<255;k++);   
  135.                     
  136.   }
  137. void frun()// 反转运行
  138. {
  139.      for(z=0;z<8;z++)
  140.         {
  141.             P1=runf[z];
  142.             delay(y);
  143.          }
  144. }
  145. void zrun()// 正转运行
  146. {

  147.    for(z=0;z<8;z++)
  148.        {
  149.          P1=runz[z];
  150.          delay(y);
  151.        }
  152. }
  153. void anjian()
  154. {         P1_7=0;
  155.       if(P2_2==0)
  156.       {
  157.          
  158.           if(!P2_2);
  159.           delay2(255);
  160.           delay2(255);
  161.           delay2(255);
  162.           delay2(255);
  163.           y--;
  164.           if(y<=7)y=7;
  165.            P0=seg7code[3];
  166.            }
  167.       if(P2_3==0)
  168.       {
  169.          
  170.           if(!P2_3);
  171.           delay2(255);
  172.           delay2(255);
  173.           delay2(255);
  174.           delay2(255);
  175.           P0=seg7code[4];
  176.           if((y<46)&&(y>7))y=+2;
  177.           if((y<157)&&(y>47))y++;
  178.           if(y>=157)y=157;
  179.        }
  180.   }
  181.          
  182. display()
  183. {
  184. bw=speed/100;
  185. sw=speed%100/10;
  186. gw=speed%10;


  187. P2=P2&0x7f; //P2.7 输出低电平,选通千位数
  188. P3=seg7code[0]; //取出千位数,查表,输出。
  189. delay2(8); //延时
  190. P2=P2|0xf0; //销隐
  191. P2=P2&0xbf; //P2.6 输出低电平,选通百位数
  192. P3=seg7code[bw]; //取出百位数,查表,输出。
  193. delay2(8); //延时
  194. P2=P2|0xf0; //销隐
  195. P2=P2&0xdf; //P2.5 输出低电平,选通十位数
  196. P3=seg7code[sw]; //取出十位数,查表,输出。
  197. delay2(8); //延时
  198. P2=P2|0xf0; //销隐
  199. P2=P2&0xef;
  200. P3=seg7code[gw]; //取出个位数,查表,输出。
  201. delay2(8);
  202. P2=P2|0xf0;



  203. }

复制代码
0.png

所有资料51hei提供下载:
步进电机调速控制系统资料.zip (3.96 MB, 下载次数: 179)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:466655 发表于 2019-3-25 14:19 | 显示全部楼层
好东西  留着收藏
回复

使用道具 举报

ID:495408 发表于 2019-3-28 11:03 | 显示全部楼层
收藏学习 感谢分享
回复

使用道具 举报

ID:501595 发表于 2019-3-31 12:45 | 显示全部楼层
谢谢分享。下载学习下 。
回复

使用道具 举报

ID:431364 发表于 2019-4-3 15:40 | 显示全部楼层
学习了,谢谢
回复

使用道具 举报

ID:555767 发表于 2019-6-5 16:43 | 显示全部楼层
好贴,值得收藏
回复

使用道具 举报

ID:445367 发表于 2019-7-13 17:37 | 显示全部楼层
很好,过来学习,资料非常有用
回复

使用道具 举报

ID:584041 发表于 2019-7-14 20:38 | 显示全部楼层
请问楼主,s52和c52可以互替吗?
回复

使用道具 举报

ID:742209 发表于 2020-5-1 11:09 | 显示全部楼层
很详细,易懂,谢谢楼主
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表