EDABOSS电子论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 555|回复: 1

[资料共享] 51单片机IR2101S的全桥步进电机驱动器PCB文件+原理图+程序

[复制链接]

111

主题

1

回帖

356

E币

助理工程师

Rank: 3Rank: 3

积分
224
发表于 2019-1-10 17:44:38 | 显示全部楼层 |阅读模式
分立器件的全桥电机驱动,可以驱动直流电机也可以驱动步进电机

Altium Designer画的原理图和PCB图如下
1.PNG

2.png

H桥直流电机调速红外单片机源程序如下:
  1. #include<AT89X52.H>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit led1=P2^4;
  5. sbit led2=P2^5;
  6. sbit led3=P2^6;
  7. sbit led4=P2^7;


  8. sbit key1=P1^0;
  9. sbit key2=P1^1;
  10. sbit key3=P1^2;
  11. sbit key4=P1^3;
  12. sbit key5=P1^4;
  13. sbit key6=P1^5;

  14. sbit zheng=P2^0;
  15. sbit fan=P2^1;

  16. sbit zhengled=P3^6;
  17. sbit fanled=P3^7;
  18. sbit zhixing=P3^5;
  19. uchar code table[]={0xA0,0xBB,0x62,0x2A,0x39,0x2C,0x24,0xBA,
  20.                           0x20,0x28,0x30,0x25,0xE4,0x23,0x64,0x74};
  21. uint count=0,count1=0,time=0;
  22. uint qian,bai,shi,ge;
  23. uint moshi=0;  
  24. uchar pwm=75;
  25. unsigned long int jishu=0,shuzhi;

  26. void delay(uint xms)         //延时函数
  27. {
  28.         int a,b;
  29.         for(a=xms;a>0;a--)
  30.                 for(b=110;b>0;b--);
  31. }

  32. void initclock()                           //时钟初始化
  33. {
  34.         T2MOD=0x00;
  35.         T2CON=0x04; /*定时器2为自动重装定时工作模式)  TR2=1 */
  36.         RCAP2L=(65536-50000)%256;                //给定时器T2装初值
  37.         RCAP2H=(65536-50000)/256;
  38.         TR2=1;    //打开定时器中断1,2
  39.         ET2=1;
  40.         EA=1;                 //开中断
  41. }


  42. void timer_init()                                          //定时器一初始化
  43. {
  44.         TMOD=0x15;
  45.         TH1=(65536-50000)/256;
  46.         TL1=(65536-50000)%256;
  47.         ET1=1;                 //开定时器零1中断
  48.         TR1=1;                 //启动计数器1

  49.         TH0=0X00;
  50.         TL0=0X00;
  51.         ET0=1;                 //开计数器中断
  52.         TR0=1;                 //启动计数器器0               
  53.         EA=1;                 //开中断
  54. }
  55. void jisuan()                                                   //计算时间速度距离函数
  56. {

  57.         if(time==1)
  58.         {
  59.                  jishu=10;
  60.                  jishu=TH0*256+TL0;                                 //读取计数器的值
  61.                  TH0=0X00;
  62.                  TL0=0X00;                                                 //重装
  63.                  time=0;
  64.                  TF2=0;
  65.                  RCAP2H=(65536-50000)/256;
  66.                  RCAP2L=(65536-50000)%256;
  67.                  jishu=jishu*60;
  68.                  shuzhi=jishu;
  69.                  qian=jishu/1000;
  70.                  bai=jishu%1000/100;
  71.                  shi=jishu%1000%100/10;
  72.                  ge=jishu%1000%100%10;
  73.         }               
  74. }
  75. void display()
  76. {
  77.           led1=0;
  78.           P0=table[qian];
  79.           delay(5);
  80.           led1=1;

  81.           led2=0;
  82.           P0=table[bai];
  83.           delay(5);
  84.           led2=1;

  85.           led3=0;
  86.           P0=table[shi];
  87.           delay(5);
  88.           led3=1;

  89.           led4=0;
  90.           P0=table[ge];
  91.           delay(5);
  92.           led4=1;
  93. }

  94. void keyscan()
  95. {
  96.         if(key1==0)
  97.         {
  98.                 delay(5);
  99.                 if(key1==0)
  100.                 {
  101.                         while(!key1);
  102.                         moshi=0;
  103.                 }
  104.         }
  105.         if(key2==0)
  106.         {
  107.                 delay(5);
  108.                 if(key2==0)
  109.                 {
  110.                         while(!key2);
  111.                         moshi=1;
  112.                 }
  113.         }
  114.         if(key3==0)
  115.         {
  116.                 delay(5);
  117.                 if(key3==0)
  118.                 {
  119.                         EA=0;
  120.                         delay(2);
  121.                         while(!key3);
  122.                         pwm=pwm+5;
  123.                         if(pwm>=150)
  124.                         {
  125.                                 pwm=145;        
  126.                         }
  127.                         EA=1;
  128.                 }
  129.         }
  130.         if(key4==0)
  131.         {
  132.                 delay(5);
  133.                 if(key4==0)
  134.                 {
  135.                         while(!key4);
  136.                         EA=0;
  137.                         delay(2);
  138.                         pwm=pwm-5;
  139.                         if(pwm<=5)
  140.                         {
  141.                                 pwm=5;        
  142.                         }
  143.                         EA=1;
  144.                
  145.                 }
  146.         }
  147.         if(key5==0)
  148.         {
  149.                 delay(5);
  150.                 if(key5==0)
  151.                 {
  152.                         while(!key5);
  153.                         timer_init();
  154.                         initclock();
  155.                         EA=1;
  156.                         delay(100);
  157.                         zhixing=0;
  158.                 }
  159.         }
  160.         if(key6==0)
  161.         {
  162.                 delay(5);
  163.                 if(key6==0)
  164.                 {
  165.                         while(!key6);
  166.                         zhixing=1;
  167.                         EA=0;
  168.                         zheng=0;
  169.                         fan=0;
  170.                         jishu=0;
  171.                 }
  172.         }
  173. }
  174. void main()
  175. {
  176.          while(1)
  177.          {
  178.                    display();
  179.                   jisuan();
  180.                   keyscan();
  181.                   if(shuzhi<1000)
  182.                   {
  183.                           zhengled=0;
  184.                         fanled=1;
  185.                   }
  186.                   if(shuzhi>2500)
  187.                   {
  188.                           zhengled=1;
  189.                         fanled=0;
  190.                   }
  191.                   if(shuzhi>=1000&&shuzhi<=2500)
  192.                   {
  193.                           zhengled=1;
  194.                         fanled=1;
  195.                   }
  196.          }
  197. }
  198. void T1_time()interrupt 5                   //定时器
  199. {
  200.         TF2=0;
  201.         RCAP2H=(65536-50000)/256;
  202.         RCAP2L=(65536-50000)%256;
  203.         count++;
  204.         if(count==10)
  205.         {
  206.                 time=1;
  207.                 count=0;
  208.         }
  209. }

  210. void time1(void)interrupt 3                                     //定时器1溢出,yichu=1
  211. {
  212.         TH1=(65536-1000)/256;
  213.         TL1=(65536-1000)%256;
  214.         count1++;
  215.         if(count1==156)
  216.         {
  217.                  count1=0;
  218.         }
  219.         if(moshi==0)
  220.         {
  221.                
  222.                  zheng=0;
  223.                  if(count1<pwm)
  224.                  {
  225.                           fan=0;
  226.                  }
  227.                  if(count1>=pwm)
  228.                  {
  229.                           fan=1;
  230.                  }
  231.         }
  232.         if(moshi==1)
  233.         {
  234.                  fan=0;
  235.                  if(count1<pwm)
  236.                  {
  237.                           zheng=0;
  238.                  }
  239.                  if(count1>=pwm)
  240.                  {
  241.                           zheng=1;
  242.                  }
  243.         }
  244. }
复制代码



电机驱动.zip

5.25 MB, 下载次数: 2, 下载积分: E币 -5 元

积分规则
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|EDABOSS电子论坛

GMT+8, 2024-4-20 03:48 , Processed in 0.043781 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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