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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機直流電機控制電路原理圖與源程序

  [復制鏈接]
ID:375879 發表于 2018-11-3 00:33 | 顯示全部樓層 |閱讀模式
直流電機控制電路仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
IMG_20181103_002902.jpg 0.png

單片機源程序如下:
  1. ///*************************************************************************************************************
  2. ///直流電機的pwm控制程序
  3. ///功能:直流電機的速度控制,速度測試,速度顯示。
  4. ///作者:廖維斌,郭留濤
  5. ///*************************************************************************************************************


  6. #include<reg51.h>                                ///包含頭文件
  7. #include<absacc.h>
  8. #define gew DBYTE[0X40]                        ///定義顯示緩沖區 個位
  9. #define shiw DBYTE[0X41]                        //////////////////十位
  10. #define baiw DBYTE[0X42]                        //////////////////百位
  11. #define qianw DBYTE[0X43]                        //////////////////千位
  12. #define unint unsigned int                ///自定義變量
  13. #define uchar unsigned char
  14. sbit in1=P3^0;                                        ///控制位定義
  15. sbit in2=P3^1;
  16. sbit ena=P3^7;
  17. uchar code zm[12]={0Xc0,0Xf9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0x73,0x71};///在程序存儲區定義字型碼表
  18. uchar code wm[4]={0xfe,0xfd,0xfb,0xf7};///在程序存儲區定義字位控制碼表***選位
  19. uchar a=8;                                                ///占空比控制字
  20. uchar n=1;                                                ///速度增減量一
  21. uchar m=2;                                                ///速度增減量二
  22. unint speedbuf=0;                                ///速度值
  23. uchar zc=0;
  24. unint ys=0;
  25. key();                                                        ///子函數聲明
  26. display();
  27. control();
  28. delays();
  29. speedcan();
  30. ///*************************************************************************************************************
  31. ///主函數
  32. ///*************************************************************************************************************
  33. main()       
  34. {
  35.         gew=shiw=baiw=qianw=0;                                ///顯示初始化
  36.         P0=0xc0;                                       
  37.         P2=0;
  38.         in1=0;                                                ///電機控制的初始化
  39.         in2=0;
  40.         ena=1;
  41.         TMOD=0X15;                                        ///定時器1為定時模式,使用方式2;定時器0為計數模式,使用方式2
  42.         TH1=0Xfa;                                        ///裝定時器初值
  43.         TL1=0X24;
  44.         TH0=0;                                                ///裝計數器初值
  45.         TL0=0;
  46.         EA=1;                                                ///開總中斷
  47.         ET0=1;                                                ///允許定時器0中斷
  48.         ET1=1;                                                ///允許定時器1中斷
  49.         TR0=1;                                                ///開計數器
  50.         TR1=1;                                                ///開定時器
  51.         while(1)                                        ///無限循環
  52.         {
  53.                 key();                                        ///調用按鍵掃描程序
  54.                 control();                                ///調用電機控制程序
  55.                 display();                                ///調用顯示程序
  56.                 speedcan();                                ///調用速度處理程序
  57.         }
  58. }
  59. ///*************************************************************************************************************
  60. ///中斷處理程序,實現輸出方波占空比控制
  61. ///*************************************************************************************************************
  62. timer_1() interrupt 3 using 1        ///定時器1中斷,使用寄存器組1
  63. {
  64.         TR1=0;                                                ///停止定時
  65.         zc++;                                                ///中斷次數加1
  66.         ys++;
  67.         control();                                       
  68.         speedcan();
  69.         TH1=0Xfa;                                        ///重裝定時初值
  70.         TL1=0X24;
  71.         TR1=1;
  72. }
  73. ///************************************************************************************************************
  74. ///脈寬控制程序,實現PWM的輸出
  75. ///***********************************************************************************************************
  76. control()
  77. {
  78.         if(zc==a)
  79.         {
  80.                 ena=0;
  81.         }
  82.         if(zc==15)
  83.         {
  84.                 zc=0;
  85.                 ena=1;
  86.         }
  87. }
  88. ///*****************************************************************************************************************
  89. ///顯示子函數,顯示當前電機的速度
  90. ///****************************************************************************************************************
  91. display()
  92. {
  93.         uchar i;
  94.         gew=speedbuf%10;                                        ///求速度個位值送各位顯示緩沖
  95.         shiw=(speedbuf/10)%10;                                        ///求速度十位值送十位顯示緩沖
  96.         baiw=(speedbuf/100)%10;                                ///求速度百位值送百位顯示緩沖
  97.         qianw=speedbuf/1000;                                ///求速度千位值送千位顯示緩沖
  98.         for(i=0;i<4;)                                        ///循環選中數碼管的每一位
  99.         {
  100.                 P2=wm[i];
  101.                 if(i==0)                                        ///顯示個位
  102.                 {
  103.                         P0=zm[gew];
  104.                         delays();
  105.                 }
  106.                         else if(i==1)                        ///顯示十位
  107.                         {
  108.                                 P0=zm[shiw];
  109.                                 delays();
  110.                         }
  111.                                 else if(i==2)                ///顯示百位
  112.                                 {
  113.                                         P0=zm[baiw];
  114.                                         delays();
  115.                                 }
  116.                                         else if(i==3)        ///顯示千位
  117.                                         {
  118.                                                 P0=zm[qianw];
  119.                                                 delays();
  120.                                         }               
  121.                 i++;
  122.         }

  123. }
  124. ///**********************************************************************************************************
  125. ///讀速度值子函數,從計數器0中讀計數值,經過計算,求出當前速度值
  126. ///*************************************************************************************************************
  127. speedcan()
  128. {
  129.         if(ys==500)
  130.         {
  131.                 TR0=0;                                                ///停止計數
  132.                 speedbuf=((TH0*256+TL0)*8)/3;///讀計數器
  133.                 ys=0;
  134.                 TH0=0;                                                ///重裝計數初值
  135.                 TL0=0;
  136.                 TR0=1;                                                ///開計數器
  137.         }
  138. }
  139. ///*********************************************************************************************************
  140. ///延時子函數
  141. ///***********************************************************************************************************
  142. delays()
  143. {
  144.         uchar i;
  145.         for(i=80;i>0;i--);
  146. }
  147. ///************************************************************************************************************
  148. ///鍵盤掃描子函數,實現電機的方向 速度的控制
  149. ///*********************************************************************************************************
  150. key()
  151. {
  152.         uchar i;
  153.         P1=0xff;                                                ///拉高P1口的電平
  154.         i=P1;                                                        ///讀P1口
  155.         if(i==0xfe)                                                ///第一個鍵按下
  156.         {        delays();                                        ///延時去抖動
  157.                 if(i==0xfe)                                        ///再判斷按鍵是否按下
  158.                 {
  159.                         in1=0;                                        ///電機順時針轉動
  160.                         in2=1;       
  161.                 }
  162.         }
  163.         if(i==0xfd)                                                ///第二個鍵是否按下
  164.         {
  165.                 delays();                                        ///延時去抖動
  166.                 if(i==0xfd)                                        ///再判斷按鍵是否按下       
  167.                 {
  168.                         in1=1;                                         ///電機逆時針轉動
  169.                         in2=0;
  170.                 }
  171.         }
  172.         if(i==0xfb)                                                ///第三個鍵是否按下
  173.         {
  174.                 delays();
  175.                 if(i==0xfb)
  176.                 {
  177.                         a=a+n;                                        ///速度加((慢速)
  178.                         if(a>=15)                                
  179.                                 a=15;
  180.                 }
  181.         }
  182.         if(i==0xf7)                                               
  183.         {
  184.                 delays();
  185.                 if(i==0xf7)
  186.                 {
  187.                         if(a>3)                                        ///速度減(慢速)
  188.                                 a=a-n;
  189.                         else
  190.                                 a=3;
  191.                 }
  192.         }
  193.         if(i==0xef)
  194.         {
  195.                 delays();
  196.                 if(i==0xef)
  197.                 {
  198.                         a=a+m;                                        ///速度加,(快速)
  199.                         if(a>=15)
  200.                                 a=15;
  201.                 }
  202.         }
  203.         if(i==0xdf)
  204.         {
  205.                 delays();
  206.                 if(i==0xdf)
  207.                         if(a>3)                                        ///速度減,(快速)
  208.                                 a=a-m;
  209.                         else
  210.                                 a=3;
  211.         }
  212.         if(i==0xbf)
  213.         {
  214.                 delays();
  215.                 if(i==0xbf)
  216.                 {
  217.                         in1=0;                                        ///停止轉動
  218.                         in2=0;
  219.                 }
  220.         }
  221.         if(i==0x7f)
  222.         {
  223.                 delays();
  224.                 if(i==0x7f)
  225.                         a=5;                                        ///回到中間速度
  226.         }
  227.         while(P1!=0xff);                                ///等待按鍵放下
  228. }
復制代碼
0.png
所有資料51hei提供下載:
直流電機的pwm控制.rar (162.44 KB, 下載次數: 158)
回復

使用道具 舉報

ID:407593 發表于 2018-11-19 21:10 | 顯示全部樓層
這個里面沒有Proteus仿真,騙人的
希望大家慎重,那個ddb文件也沒有密碼
回復

使用道具 舉報

ID:423751 發表于 2018-12-6 21:27 | 顯示全部樓層
非常感謝,哈哈哈哈哈哈
回復

使用道具 舉報

ID:648191 發表于 2019-11-24 13:28 | 顯示全部樓層
寫的很詳細但是,不知道為什么幾個按鈕控制的不算是太好,還點看看
回復

使用道具 舉報

ID:298008 發表于 2019-12-13 19:51 | 顯示全部樓層
謝謝樓主分享!!
回復

使用道具 舉報

ID:243394 發表于 2019-12-14 09:22 | 顯示全部樓層
謝謝樓主分享!!
回復

使用道具 舉報

ID:927942 發表于 2021-6-4 18:04 | 顯示全部樓層
左上角的示波器是如何調出來的
回復

使用道具 舉報

ID:927942 發表于 2021-6-4 18:07 | 顯示全部樓層
仿真圖里的按鍵不能控制轉速和正反轉
回復

使用道具 舉報

ID:967724 發表于 2021-9-24 08:09 | 顯示全部樓層
如何修改能做到按鈕控制速度?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一区二区三区视频 | 综合网中文字幕 | 久久九七 | 国产精品免费看 | 一级毛片大全免费播放 | 成人免费观看男女羞羞视频 | 国产黄色小视频在线观看 | 欧美日韩中文在线观看 | 网黄在线 | 久在线 | 91日日| 亚洲国产欧美在线 | 国内精品久久久久久 | 国产精品免费看 | 国产一区二区三区四区 | 天天综合干 | 欧美成人a| 欧美国产亚洲一区二区 | 91豆花视频 | 亚洲精品无 | 日韩一区二区在线看 | 日韩视频在线免费观看 | 伊人网一区 | 亚洲一区二区三区免费在线观看 | 久热久热 | 亚洲欧美一区二区三区国产精品 | 成人免费一区二区三区牛牛 | 在线免费黄色小视频 | 精精国产xxxx视频在线播放 | 国产网站在线 | 成人在线精品视频 | 在线欧美激情 | 91中文字幕 | 午夜在线观看免费 | 自拍偷拍中文字幕 | 精品久久精品 | 自拍第1页 | 精品1区2区 | 国产精品久久久久免费 | 欧美成人激情 | 成人国产在线观看 |