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

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

QQ登錄

只需一步,快速開始

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

請(qǐng)教stc系列單片機(jī)的pwm產(chǎn)生問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:608920 發(fā)表于 2019-11-18 19:26 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
我想做一個(gè)pwm按鍵控制電機(jī)速度,然后程序中又有兩個(gè)中斷計(jì)算電機(jī)的轉(zhuǎn)速,轉(zhuǎn)速已經(jīng)完成,但是控制電機(jī)的pwm一直沒有波形,我想請(qǐng)各位幫我看看,是哪方面的問題,謝謝

  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uch unsigned char
  4. #define uin unsigned int

  5. uch code table[]="Duty Ratio:";
  6. uch code able[]="Rev:";
  7. uin count,countt,rad,f,t,g,s,q,w,m,b;
  8. //uin b;
  9. //uin PWM_T = 0;   //占空比控制變

  10. sbit rs=P1^2;
  11. sbit rw=P1^1;
  12. sbit en=P1^0;

  13. sbit down = P1^5;
  14. sbit up = P1^6;
  15. sbit fan=P1^4;

  16. void delay(uin time)
  17. {
  18.         uin i,j;
  19.         for(i=time;i>0;i--)
  20.                 for(j=110;j>0;j--);
  21. }

  22. void time0()
  23. {

  24.         TMOD=0x11;

  25.         TH0=0xdc;
  26.         TL0=0x00;
  27.         ET0=1;
  28.         TR0=1;

  29.         IT1=1;
  30.         EX1=1;
  31. //        EA=1;

  32.         TH1=(65536-100)/256;     //寫入預(yù)置初值(取值1-255,數(shù)越大PWM頻率越高)
  33.         TL1=(65536-100)%256;     //寫入預(yù)置值 (取值1-255,數(shù)越大PWM頻率越高)
  34.         ET1=1;                 //允許定時(shí)器0中斷
  35.         TR1=1;       //啟動(dòng)定時(shí)器

  36.         EA=1;        //允許總中斷

  37. }

  38. uch lcd_readbusy()
  39. {
  40.         uch temp;
  41.         rs=0;
  42.         rw=1;
  43.         _nop_();
  44.         P2=0xff;
  45.         _nop_();
  46.         en=1;
  47.         _nop_();
  48.         temp=P2;
  49.         _nop_();
  50.         en=0;
  51.         return(temp&0x80);
  52. }
  53. void write_com(uch com)
  54. {
  55.         while(lcd_readbusy());
  56.         rs=0;
  57.         rw=0;
  58.         P2=com;
  59.         delay(5);
  60.         en=1;
  61.         delay(10);
  62.         en=0;
  63. }
  64. void write_data(uch dat)
  65. {
  66.         while(lcd_readbusy());
  67.         rs=1;
  68.         rw=0;
  69.         P2=dat;
  70.         delay(5);
  71.         en=1;
  72.         delay(5);
  73.         en=0;
  74. }
  75. void display1()        {

  76.         countt=rad/3;
  77.         f=rad*10%10;
  78.         g=countt%10;
  79.         s=(countt/10)%10;
  80. //        b=(countt/100)%10;
  81. //        q=(countt/1000)%10;
  82. //        w=countt/10000;

  83. //        write_com(0xc0+5);
  84. //        write_data(w+0x30);  //萬位
  85. //        write_com(0xc0+6);
  86. //        write_data(q+0x30); //千位
  87. //        write_com(0xc0+7);
  88. //        write_data(b+0x30);   //百位
  89.         write_com(0xc0+8);
  90.         write_data(s+0x30); //十位
  91.         write_com(0xc0+9);
  92.         write_data(g+0x30); //個(gè)位
  93.         write_com(0xc0+11);
  94.         write_data(f+0x30); //浮點(diǎn)位
  95. }
  96. void init()
  97. {        uin i=0;

  98.         write_com(0x38);
  99.         write_com(0x0c);
  100.         write_com(0x01);

  101.         write_com(0x80);
  102.                 for(i=0;i<11;i++)
  103.         {
  104.                 write_data(table[i]);
  105.         }
  106.         write_com(0x80+15);
  107.         write_data('%');
  108.        
  109.         write_com(0xc0);
  110.         for(i=0;i<4;i++)
  111.         {
  112.                 write_data(able[i]);
  113.         }

  114.         write_com(0xc0+10);
  115.         write_data('.');
  116.         write_com(0xc0+13);
  117.         write_data('R');
  118.         write_data('P');
  119.         write_data('S');        // 轉(zhuǎn)每秒

  120. }
  121. void button()
  122. {
  123.          if(!up)
  124.                          {
  125.                                 if(m<=100)
  126.                                         {        m++;
  127. //                                          PWM_T++;
  128.                                         }
  129. //                               
  130. //                                delay(10);
  131.                         }
  132.                  if(!down)
  133.                          {
  134.                                 if(m>=1)
  135.                                         {          m-- ;
  136. //                                          PWM_T--;
  137.                                         }
  138. //                               
  139. //                                delay(10);
  140.                         }       
  141. }
  142. void main()
  143. {

  144.         count=0;
  145.         t=0;
  146.         b=0;
  147.         m=50;
  148.         init();
  149.         time0();
  150.         while(1)
  151.         {        display1();
  152.                 button();

  153. }
  154.   }
  155. writerdown_time1() interrupt 2
  156. {
  157.         count++;
  158. }
  159. taker_time2() interrupt 1
  160. {
  161.         t++;
  162.         TH0=0xdc;
  163.         TL0=0x00;
  164.         if(t==200)
  165.         {        rad=count/3;
  166. //                display1();
  167.                 count=0;
  168.                 t=0;
  169.         }
  170. }
  171. time3() interrupt 3
  172. {        TR1=0;
  173.         TH1=(65536-100)/256;
  174.         TL1=(65536-100)%256;
  175.                  b++;    //每次定時(shí)器溢出加1
  176.          if(b<m)   //PWM周期 100個(gè)單位
  177.                  {

  178.                           fan=1;  //輸出端口
  179.                  }
  180.        
  181.                   else

  182.                  {  
  183.                          fan=0;        //  
  184.                  }
  185.                  if(b>100)b=1;
  186. }
復(fù)制代碼




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

使用道具 舉報(bào)

沙發(fā)
ID:25310 發(fā)表于 2019-11-19 08:36 | 只看該作者
你這是用定時(shí)器做的PWM,比較耗資源,實(shí)時(shí)性強(qiáng)的程序都運(yùn)行不了的。直接用硬件PWM不會(huì)消耗CPU資源的。
回復(fù)

使用道具 舉報(bào)

板凳
ID:282850 發(fā)表于 2019-11-19 15:03 | 只看該作者
程序看上去沒有問題,定時(shí)器是不耗資源的,當(dāng)然直接用硬件PWM更爽。試試上電時(shí):
fan=1;   
延時(shí) 500;
fan=0;
延時(shí) 500;
fan=1;  
延時(shí) 500;
fan=0;
用萬用表測(cè)fan是否有高低電平。估計(jì)你要經(jīng)過三極管、NMOS再輸出PWM,會(huì)不會(huì)后級(jí)有問題。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 黄视频国产 | 国产高清精品在线 | 麻豆av电影网 | 97影院2| 久久久av | 国产日韩一区 | 91爱爱·com| 天堂亚洲 | 久久最新 | 国产亚洲一区二区在线观看 | 一级毛片免费看 | 国产午夜精品久久久久免费视高清 | 久久久91精品国产一区二区三区 | 国产精品久久久久久久久图文区 | 99国产精品一区二区三区 | 99re视频在线| 国产日韩欧美在线观看 | 91免费看片神器 | 99久久婷婷 | 亚洲成人免费观看 | 日韩在线视频一区 | 久久最新网址 | 成人影院在线观看 | 在线不卡视频 | 男女搞网站 | 91亚洲欧美| 精品伊人 | 久久综合九色综合欧美狠狠 | 国产高清一区二区三区 | 免费电影av | 国产精品高潮呻吟久久av黑人 | 亚洲福利网 | 国产精品久久视频 | 犬夜叉在线观看 | 欧美福利在线 | 日韩精品一二三 | 免费一区| 亚洲 欧美 综合 | 国产成人精品999在线观看 | 久草欧美 | 色资源在线视频 |