找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6550|回复: 3
收起左侧

51单片机PWM直流电机测速proteus仿真加源代码

[复制链接]
ID:180360 发表于 2017-3-22 15:56 | 显示全部楼层 |阅读模式
51单片机PWM直流电机测速的仿真原理图如下:
0.png

单片机源代码:
  1. #include <reg51.h>
  2. #include <math.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #define ON 0
  6. #define OFF 1
  7. sbit PWM=P3^5;
  8. sbit MP=P3^4;
  9. bit FLAG=0;
  10. uchar code dispbit[6]=
  11. {
  12.     0x20,0x10,0x08,0x04,0x02,0x01
  13. }
  14. ;

  15. uchar code seg[]=
  16. {
  17.     0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90
  18. }
  19. ;
  20. //0,1,2,3,4,5,6,7,8,9
  21. uchar disbuf[6]=
  22. {
  23.     0,0,0,0,10,10
  24. }
  25. ;
  26. uint temp[6];
  27. uint discount=0;
  28. uint timecount=0;
  29. //定时的次数
  30. uint T0count=0;
  31. uint hus=0;
  32. uint k=60;
  33. uint Vc;
  34. uint Vs;
  35. uint tm=3000;
  36. uint x;
  37. void t0_serv()interrupt 1
  38. {
  39.     T0count++;
  40. }
  41. void t1_serv()interrupt 3
  42. {
  43.     PWM=1;
  44.     TH1=(65536-tm)/256;
  45.     TL1=(65536-tm)%256;
  46.     hus++;
  47.     if(hus==tm)
  48.     {
  49.         PWM=0;
  50.         TH1=(25536+tm)/256;
  51.         TL1=(25536+tm)%256;
  52.         
  53.     }
  54.     timecount++;
  55.     if(timecount==250)
  56.     {
  57.         //FLAG=1;
  58.         TR0=0;
  59.         hus=0;
  60.         timecount=0;
  61.         Vc=T0count*65536+TH0*256+TL0;
  62.         Vs=144;
  63.         if(abs(Vc-Vs)>5)
  64.         {
  65.             tm=abs(k*(Vc-Vs));
  66.             T0count=0;
  67.             TR0=1;
  68.             TR1=1;
  69.             ET0=1;
  70.             ET1=1;
  71.             EA=1;
  72.         }
  73.         FLAG=1;
  74.         TR0=0;
  75.         timecount=0;
  76.     }
  77.     P0=dispbit[discount];
  78.     P1=seg[disbuf[discount]];
  79.     discount++;
  80.     if(discount==6)
  81.     {
  82.         discount=0;
  83.     }
  84. }
  85. void main()
  86. {
  87.     uint i;
  88.     TMOD=0x15;
  89.     TH0=0;
  90.     TL0=0;
  91.     TH1=(65536-tm)/256;
  92.     TL1=(65536-tm)%256;
  93.     TR0=1;
  94.     TR1=1;
  95.     ET0=1;
  96.     ET1=1;
  97.     EA=1;
  98.     while(1)
  99.     {
  100.         if(FLAG==1)
  101.         {
  102.             FLAG=0;
  103.             x=T0count*65536+TH0*256+TL0;
  104.             for(i=0;i<6;i++)
  105.             {
  106.                 temp[i]=0;
  107.             }
  108.             i=0;
  109.             while(x/10)
  110.             {
  111.                 temp[i]=x%10;
  112.                 x=x/10;
  113.                 i++;
  114.             }
  115.             temp[i]=x;
  116.             for(i=0;i<6;i++)
  117.             {
  118.                 disbuf[i]=temp[i];
  119.             }
  120.             
  121.             timecount=0;
  122.             T0count=0;
  123.             TH0=0;
  124.             TL0=0;
  125.             T0count=0;
  126.             TR0=1;
  127.             
  128.         }
  129.     }
  130.    
  131. }
复制代码

0.png
下载:
C51直流电机PWM测速源程序.rar (26.37 KB, 下载次数: 150)
回复

使用道具 举报

ID:200424 发表于 2017-5-13 21:10 | 显示全部楼层
为啥我运行不成功呢

评分

参与人数 1黑币 +5 收起 理由
y1125024414 + 5 赞一个!

查看全部评分

回复

使用道具 举报

ID:1023888 发表于 2022-5-4 22:29 | 显示全部楼层
Q清嘻嘻 发表于 2017-5-13 21:10
**** 作者被禁止或删除 内容自动屏蔽 ****

我也尝试了一下
回复

使用道具 举报

ID:541750 发表于 2024-9-12 21:21 | 显示全部楼层
有成功的吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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