找回密码
 立即注册

QQ登录

只需一步,快速开始

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

H桥直流电机调速红外 带单片机源程序原理图与pcb

[复制链接]
ID:184553 发表于 2017-3-29 18:01 | 显示全部楼层 |阅读模式
有程序,h桥原理图以及红外的原理图

下面是用ad画的原理图和pcb
0.png

红外对管电路:
0.png

pcb:
0.png
0.png

单片机源程序:
  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. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码


0.png
下载:
H桥直流电机调速红外.rar (1.2 MB, 下载次数: 68)
回复

使用道具 举报

ID:151348 发表于 2017-3-29 20:05 | 显示全部楼层
电机似乎不是单独供电啊,不知道抗干扰能力怎么样
回复

使用道具 举报

ID:248175 发表于 2017-11-24 15:44 | 显示全部楼层
很好 先收藏了
回复

使用道具 举报

ID:249545 发表于 2017-11-26 21:11 | 显示全部楼层
资料是不错,就是H桥没有设计好,没有隔离驱动.
功率部分工作电压太低,三极管电流也用的小.
回复

使用道具 举报

ID:249545 发表于 2017-11-26 21:13 | 显示全部楼层
初学者能做成这样子,电子基本功学得好呀
回复

使用道具 举报

ID:20345 发表于 2018-10-27 23:42 | 显示全部楼层
不错的设计。
回复

使用道具 举报

ID:399179 发表于 2018-10-28 18:46 来自手机 | 显示全部楼层
感谢楼主分享!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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