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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 16127|回復(fù): 8
打印 上一主題 下一主題
收起左側(cè)

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

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
直流電機(jī)控制電路仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


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


  6. #include<reg51.h>                                ///包含頭文件
  7. #include<absacc.h>
  8. #define gew DBYTE[0X40]                        ///定義顯示緩沖區(qū) 個(gè)位
  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};///在程序存儲(chǔ)區(qū)定義字型碼表
  18. uchar code wm[4]={0xfe,0xfd,0xfb,0xf7};///在程序存儲(chǔ)區(qū)定義字位控制碼表***選位
  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();                                                        ///子函數(shù)聲明
  26. display();
  27. control();
  28. delays();
  29. speedcan();
  30. ///*************************************************************************************************************
  31. ///主函數(shù)
  32. ///*************************************************************************************************************
  33. main()       
  34. {
  35.         gew=shiw=baiw=qianw=0;                                ///顯示初始化
  36.         P0=0xc0;                                       
  37.         P2=0;
  38.         in1=0;                                                ///電機(jī)控制的初始化
  39.         in2=0;
  40.         ena=1;
  41.         TMOD=0X15;                                        ///定時(shí)器1為定時(shí)模式,使用方式2;定時(shí)器0為計(jì)數(shù)模式,使用方式2
  42.         TH1=0Xfa;                                        ///裝定時(shí)器初值
  43.         TL1=0X24;
  44.         TH0=0;                                                ///裝計(jì)數(shù)器初值
  45.         TL0=0;
  46.         EA=1;                                                ///開(kāi)總中斷
  47.         ET0=1;                                                ///允許定時(shí)器0中斷
  48.         ET1=1;                                                ///允許定時(shí)器1中斷
  49.         TR0=1;                                                ///開(kāi)計(jì)數(shù)器
  50.         TR1=1;                                                ///開(kāi)定時(shí)器
  51.         while(1)                                        ///無(wú)限循環(huán)
  52.         {
  53.                 key();                                        ///調(diào)用按鍵掃描程序
  54.                 control();                                ///調(diào)用電機(jī)控制程序
  55.                 display();                                ///調(diào)用顯示程序
  56.                 speedcan();                                ///調(diào)用速度處理程序
  57.         }
  58. }
  59. ///*************************************************************************************************************
  60. ///中斷處理程序,實(shí)現(xiàn)輸出方波占空比控制
  61. ///*************************************************************************************************************
  62. timer_1() interrupt 3 using 1        ///定時(shí)器1中斷,使用寄存器組1
  63. {
  64.         TR1=0;                                                ///停止定時(shí)
  65.         zc++;                                                ///中斷次數(shù)加1
  66.         ys++;
  67.         control();                                       
  68.         speedcan();
  69.         TH1=0Xfa;                                        ///重裝定時(shí)初值
  70.         TL1=0X24;
  71.         TR1=1;
  72. }
  73. ///************************************************************************************************************
  74. ///脈寬控制程序,實(shí)現(xiàn)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. ///顯示子函數(shù),顯示當(dāng)前電機(jī)的速度
  90. ///****************************************************************************************************************
  91. display()
  92. {
  93.         uchar i;
  94.         gew=speedbuf%10;                                        ///求速度個(gè)位值送各位顯示緩沖
  95.         shiw=(speedbuf/10)%10;                                        ///求速度十位值送十位顯示緩沖
  96.         baiw=(speedbuf/100)%10;                                ///求速度百位值送百位顯示緩沖
  97.         qianw=speedbuf/1000;                                ///求速度千位值送千位顯示緩沖
  98.         for(i=0;i<4;)                                        ///循環(huán)選中數(shù)碼管的每一位
  99.         {
  100.                 P2=wm[i];
  101.                 if(i==0)                                        ///顯示個(gè)位
  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. ///讀速度值子函數(shù),從計(jì)數(shù)器0中讀計(jì)數(shù)值,經(jīng)過(guò)計(jì)算,求出當(dāng)前速度值
  126. ///*************************************************************************************************************
  127. speedcan()
  128. {
  129.         if(ys==500)
  130.         {
  131.                 TR0=0;                                                ///停止計(jì)數(shù)
  132.                 speedbuf=((TH0*256+TL0)*8)/3;///讀計(jì)數(shù)器
  133.                 ys=0;
  134.                 TH0=0;                                                ///重裝計(jì)數(shù)初值
  135.                 TL0=0;
  136.                 TR0=1;                                                ///開(kāi)計(jì)數(shù)器
  137.         }
  138. }
  139. ///*********************************************************************************************************
  140. ///延時(shí)子函數(shù)
  141. ///***********************************************************************************************************
  142. delays()
  143. {
  144.         uchar i;
  145.         for(i=80;i>0;i--);
  146. }
  147. ///************************************************************************************************************
  148. ///鍵盤(pán)掃描子函數(shù),實(shí)現(xiàn)電機(jī)的方向 速度的控制
  149. ///*********************************************************************************************************
  150. key()
  151. {
  152.         uchar i;
  153.         P1=0xff;                                                ///拉高P1口的電平
  154.         i=P1;                                                        ///讀P1口
  155.         if(i==0xfe)                                                ///第一個(gè)鍵按下
  156.         {        delays();                                        ///延時(shí)去抖動(dòng)
  157.                 if(i==0xfe)                                        ///再判斷按鍵是否按下
  158.                 {
  159.                         in1=0;                                        ///電機(jī)順時(shí)針轉(zhuǎn)動(dòng)
  160.                         in2=1;       
  161.                 }
  162.         }
  163.         if(i==0xfd)                                                ///第二個(gè)鍵是否按下
  164.         {
  165.                 delays();                                        ///延時(shí)去抖動(dòng)
  166.                 if(i==0xfd)                                        ///再判斷按鍵是否按下       
  167.                 {
  168.                         in1=1;                                         ///電機(jī)逆時(shí)針轉(zhuǎn)動(dòng)
  169.                         in2=0;
  170.                 }
  171.         }
  172.         if(i==0xfb)                                                ///第三個(gè)鍵是否按下
  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;                                        ///停止轉(zhuǎn)動(dòng)
  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. }
復(fù)制代碼

所有資料51hei提供下載:
直流電機(jī)的pwm控制.rar (162.44 KB, 下載次數(shù): 158)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏8 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:407593 發(fā)表于 2018-11-19 21:10 | 只看該作者
這個(gè)里面沒(méi)有Proteus仿真,騙人的
希望大家慎重,那個(gè)ddb文件也沒(méi)有密碼
回復(fù)

使用道具 舉報(bào)

板凳
ID:423751 發(fā)表于 2018-12-6 21:27 | 只看該作者
非常感謝,哈哈哈哈哈哈
回復(fù)

使用道具 舉報(bào)

地板
ID:648191 發(fā)表于 2019-11-24 13:28 | 只看該作者
寫(xiě)的很詳細(xì)但是,不知道為什么幾個(gè)按鈕控制的不算是太好,還點(diǎn)看看
回復(fù)

使用道具 舉報(bào)

5#
ID:298008 發(fā)表于 2019-12-13 19:51 | 只看該作者
謝謝樓主分享。
回復(fù)

使用道具 舉報(bào)

6#
ID:243394 發(fā)表于 2019-12-14 09:22 | 只看該作者
謝謝樓主分享!!
回復(fù)

使用道具 舉報(bào)

7#
ID:927942 發(fā)表于 2021-6-4 18:04 | 只看該作者
左上角的示波器是如何調(diào)出來(lái)的
回復(fù)

使用道具 舉報(bào)

8#
ID:927942 發(fā)表于 2021-6-4 18:07 | 只看該作者
仿真圖里的按鍵不能控制轉(zhuǎn)速和正反轉(zhuǎn)
回復(fù)

使用道具 舉報(bào)

9#
ID:967724 發(fā)表于 2021-9-24 08:09 | 只看該作者
如何修改能做到按鈕控制速度?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 一区二区三区中文字幕 | 亚洲一区二区三区在线播放 | 久久久国产精品一区 | 精品久久国产 | 日韩一区二区三区四区五区 | 免费视频一区二区 | 亚洲精品久久久久久久久久久久久 | 久久首页| 一级毛片视频在线 | 成人免费视频网站在线观看 | 欧美精品1区2区 | 国内91在线 | 久久这里有精品 | 日韩精品一区二区三区中文字幕 | 欧美日韩高清在线观看 | 精品一区二区三区视频在线观看 | 91精品国产一区二区三区 | 亚洲一区二区三区免费在线观看 | 午夜国产一级片 | 久草在线影 | 国产丝袜av | 久久精品免费 | 欧美日韩综合精品 | 成人国产精品入口免费视频 | 日韩欧美在线视频 | 午夜欧美一区二区三区在线播放 | 羞羞视频在线观看 | www.99热 | 成人一区二区三区在线观看 | 久久精品综合 | 天天插天天射天天干 | 日韩日韩日韩日韩日韩日韩日韩 | 高清免费在线 | 视频在线一区二区 | 国产精品一区三区 | 久久伊人一区二区 | 懂色av色香蕉一区二区蜜桃 | 影音先锋中文字幕在线观看 | 亚洲国产一区二区视频 | 日本成人午夜影院 | 一区二区三区欧美在线观看 |