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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

pwm頻率占空比調(diào)節(jié)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:205966 發(fā)表于 2017-5-29 23:53 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
//------------------------------------------------------------------------------------
//程序功能簡介:本程序產(chǎn)生15HZ~~~50KHZ的方波,并且實(shí)現(xiàn)頻率和脈寬的獨(dú)立調(diào)制,即可
//在改變頻率的同時(shí)不改變脈寬,再改變脈寬的同時(shí)不改變頻率;同時(shí)設(shè)置
//兩個(gè)調(diào)節(jié)步長------在KEY鍵按下時(shí),粗調(diào),沒有按下時(shí),細(xì)調(diào);
//程序思路: 本程序用到兩個(gè)定時(shí)器------定時(shí)器0和定時(shí)器1,其中定時(shí)器0工作在定時(shí)方式下,
//決定方波的頻率;定時(shí)器1,同樣工作在定時(shí)方式下,用于設(shè)定脈寬;
//------------------------------------------------------------------------------------
  #include <reg52.h>
#include <math.h>
#define  uchar unsigned char
#define  uint unsigned int
#define  ALL  65536             //定時(shí)器工作方式1時(shí),最大基數(shù)長度 65536;
#define  F_osc 12000000         //晶振頻率12M;


sbit KEY_F_UP=P0^2;             //頻率上調(diào)按鈕;
sbit KEY_F_DOWN=P0^3;           //頻率下調(diào)按鈕;
sbit KEY_W_UP=P0^4;             //脈寬上調(diào)按鈕;
sbit KEY_W_DOWN=P0^5;           //脈寬下調(diào)按鈕;
sbit KEY=P0^6;                  //粗細(xì)調(diào)節(jié)按鈕-----按下為粗調(diào),否則為細(xì)調(diào);
sbit OUTPUT=P1^0;               //波形輸出;


uchar TIMER0_H,TIMER0_L,TIMER1_H,TIMER1_L;//定時(shí)器0和定時(shí)器1的初值設(shè)置;
uchar PERCENT=50;               //初始占空比;
uchar FLAG_F=0,FLAG_W=0;//頻率調(diào)節(jié)標(biāo)志和脈寬調(diào)制標(biāo)志;
uint  FREQ=50000;               //初始頻率;
float temp;                     //臨時(shí)全局變量,用于數(shù)據(jù)傳遞;
void delay(uchar t);           //延時(shí)函數(shù),用于按鍵去抖;
void init();                      //初始化函數(shù),用于定時(shí)器的初始化;
void calculate_F();     
//頻率計(jì)算函數(shù),當(dāng)頻率變化,計(jì)算出定時(shí)器0初值;
void calculate_W();     
//脈寬計(jì)算函數(shù),脈寬變化時(shí),計(jì)算出定時(shí)器1初值;
void key_scan();             //按鍵掃描函數(shù);
void timer0();                //定時(shí)器0中斷函數(shù);
void timer1();                //定時(shí)器1中斷函數(shù);
void delay(uchar t)
{
    uchar i,j;
    while(t--)             //每個(gè)脈沖為1us
     {
      for(i=0;i<100;i++)
       for(j=0;j<100;j++);
     }
  }
void calculate_F()
{
    TIMER0_H = (uint)temp/256;
    TIMER0_L = (uint)temp%256;
}
void calculate_W()
{
    float TEMP;
    TEMP = (1 - PERCENT/100.0)*ALL + temp*PERCENT/100.0;
    TIMER1_H = (uint)TEMP/256;
    TIMER1_L = (uint)TEMP%256;
  }
  void key_scan()
  {
    delay(4);
    if(!KEY_F_UP)     //頻率上調(diào)鍵按下;
    {
      FLAG_F=1;    //置標(biāo)志位;
      if(!KEY)
        FREQ+=10;
      else
        FREQ++;
      if(FREQ>50000)
        FREQ=1;
    }
    else if(!KEY_F_DOWN)   //頻率下調(diào)鍵按下;
    {
      FLAG_F=1;    //置標(biāo)志位;
      if(!KEY)
        FREQ-=10;
      else
        FREQ--;
      if(FREQ<1)
        FREQ=50000;
     }
     else if(!KEY_W_UP)    //脈寬上調(diào)鍵按下;
     {
       FLAG_W=1;    //置標(biāo)志位;
       if(!KEY)
         PERCENT+=5;
       else
         PERCENT++;
       if(PERCENT>49)
         PERCENT=1;
      }
     else if(!KEY_W_DOWN)   //脈寬下調(diào)鍵按下;
     {
       FLAG_W=1;    //置標(biāo)志位;
       if(!KEY)
         PERCENT-=5;
       else
         PERCENT--;
       if(PERCENT<1)
         PERCENT=49;
      }
      else ;
      }
  void timer0() interrupt 1      //決定頻率
   {
     TH0=TIMER0_H;
     TL0=TIMER0_L;
     TR1=1;           //開定時(shí)器1;
     OUTPUT=1;
   }
   void timer1() interrupt 3     //決定脈寬
   {
     TH1=TIMER1_H;
     TL1=TIMER1_L;
     TR1=0; //關(guān)定時(shí)器1,一定要這一步,因?yàn)槎〞r(shí)器1的定時(shí)短于定時(shí)器0;
     OUTPUT=0;
   }
   void init()
   {
     TMOD=0x11;      //定時(shí)器0和定時(shí)器1都工作在方式1,16位計(jì)數(shù)器;
     calculate_F();  //初始為1KHZ,占空比為50%;
     calculate_W();
     TH0=TIMER0_H;
     TL0=TIMER0_L;
     TH1=TIMER1_H;
     TL1=TIMER1_L;
     ET0=1;
     ET1=1;
     EA=1;
     TR0=1;
     TR1=1;

   }
main()
{
    init();
    while(1)
    {
       key_scan();
       if(FLAG_F)     //改變頻率時(shí)要注意要進(jìn)行脈寬的重新設(shè)置;
       {
         calculate_F();
         calculate_W();
         FLAG_F=0;
       }
       if(FLAG_W)     // 脈寬改變,頻率不改變;
       {
         calculate_W();
         FLAG_W=0;
       }
     }
}

評分

參與人數(shù) 8黑幣 +48 收起 理由
be1008611 + 12 共享資料的黑幣獎勵!
小霸王游戲機(jī) + 8 很給力!
蘆葦劫 + 5 很給力!
wypmz + 5 贊一個(gè)!
309909902 + 3 贊一個(gè)!
wuqilin5 + 5 共享資料的黑幣獎勵!
無奧運(yùn) + 5 贊一個(gè)!
Kiness + 5 贊一個(gè)!

查看全部評分

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

使用道具 舉報(bào)

沙發(fā)
ID:204605 發(fā)表于 2017-6-17 12:55 | 只看該作者
挺好的
回復(fù)

使用道具 舉報(bào)

板凳
ID:213573 發(fā)表于 2017-6-22 16:22 | 只看該作者
挺好的,但是不知道怎么用啊
回復(fù)

使用道具 舉報(bào)

地板
ID:211167 發(fā)表于 2017-6-30 20:34 | 只看該作者
挺好的,但是請問這個(gè)能夠調(diào)節(jié)直流電機(jī)的轉(zhuǎn)速快慢嗎?如果能的話,應(yīng)該怎么去實(shí)現(xiàn)?謝謝
回復(fù)

使用道具 舉報(bào)

5#
ID:215978 發(fā)表于 2017-7-1 21:00 | 只看該作者
學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

6#
ID:221290 發(fā)表于 2017-7-21 10:55 | 只看該作者
真的很有用
回復(fù)

使用道具 舉報(bào)

7#
ID:221290 發(fā)表于 2017-7-21 10:56 | 只看該作者
這幾天 正好學(xué)到這一塊
回復(fù)

使用道具 舉報(bào)

8#
ID:203989 發(fā)表于 2017-8-1 10:03 | 只看該作者
不錯(cuò),在學(xué)這個(gè)
回復(fù)

使用道具 舉報(bào)

9#
ID:183418 發(fā)表于 2017-8-2 19:29 | 只看該作者
學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

10#
ID:226563 發(fā)表于 2017-8-10 14:26 | 只看該作者
收下了
回復(fù)

使用道具 舉報(bào)

11#
ID:226563 發(fā)表于 2017-8-10 14:28 | 只看該作者
很不錯(cuò) 謝謝分享
回復(fù)

使用道具 舉報(bào)

12#
ID:189403 發(fā)表于 2017-9-27 21:14 | 只看該作者
請問樓主下面這個(gè)函數(shù)的temp值是從哪里來的?這個(gè)的付初始值好像沒有。謝謝。
void calculate_F()
{
    TIMER0_H = (uint)temp/256;
    TIMER0_L = (uint)temp%256;
}
回復(fù)

使用道具 舉報(bào)

13#
ID:235106 發(fā)表于 2017-9-27 23:17 | 只看該作者
程序確實(shí)有問題!定時(shí)器0和1工作方式在1模式定時(shí)最大值在8192,不會再65536值之間;temp值沒有賦值,初始值系統(tǒng)可能為0或任意值,定時(shí)器初值沒有設(shè)置好
void calculate_F()
{
    TIMER0_H = (uint)temp/256;
    TIMER0_L = (uint)temp%256;
}
void calculate_W()
{
    float TEMP;
    TEMP = (1 - PERCENT/100.0)*ALL + temp*PERCENT/100.0;
    TIMER1_H = (uint)TEMP/256;
    TIMER1_L = (uint)TEMP%256;
  }

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報(bào)

14#
ID:189403 發(fā)表于 2017-9-28 23:51 | 只看該作者
按照他這個(gè)程序如何改一改能執(zhí)行。
回復(fù)

使用道具 舉報(bào)

15#
ID:151845 發(fā)表于 2017-9-29 21:52 | 只看該作者
謝謝樓主
回復(fù)

使用道具 舉報(bào)

16#
ID:237965 發(fā)表于 2017-10-9 14:31 | 只看該作者
用兩個(gè)TIMER,一個(gè)timer做脈寬,一個(gè)timer做周期。
回復(fù)

使用道具 舉報(bào)

17#
ID:192903 發(fā)表于 2017-10-9 20:10 | 只看該作者
程序感覺有點(diǎn)問題
回復(fù)

使用道具 舉報(bào)

18#
ID:192903 發(fā)表于 2017-10-9 20:35 | 只看該作者
temp=ALL-F_osc/12.0/FREQ;
回復(fù)

使用道具 舉報(bào)

19#
ID:229064 發(fā)表于 2017-10-10 11:08 | 只看該作者
嗯,對于小車編程挺有用的!
回復(fù)

使用道具 舉報(bào)

20#
ID:470545 發(fā)表于 2019-1-19 14:28 | 只看該作者
程序有點(diǎn)小問題,頻率不可以調(diào)節(jié),占空比減不了,我看看能不能完善一下分享給大家
回復(fù)

使用道具 舉報(bào)

21#
ID:149799 發(fā)表于 2019-1-21 10:03 | 只看該作者
期待你的完善,謝謝了。
回復(fù)

使用道具 舉報(bào)

22#
ID:594020 發(fā)表于 2019-10-30 22:45 | 只看該作者
請問temp值怎么賦?謝謝了 急用
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩在线播放网址 | 天天干夜夜操 | 国产精品国产三级国产aⅴ中文 | 国产精品亚洲精品 | 自拍偷拍第一页 | 国产精品久久久久久久久久久免费看 | 日韩一区二区三区在线视频 | 99久久精品国产麻豆演员表 | xxx国产精品视频 | 欧美日韩看片 | 一级片在线免费看 | 色接久久 | 在线色网 | 国产资源一区二区三区 | 日韩免费网站 | 欧美 日韩 国产 在线 | 日韩电影一区 | 国产免费一区二区三区 | 99视频久 | 欧美日韩在线一区二区 | 福利视频日韩 | 免费艹逼视频 | 国产精品久久久久不卡 | 亚洲一区二区久久 | 欧美久久一区二区 | 99在线免费观看视频 | 在线看av网址 | 成人亚洲片 | 国产精品永久 | 亚洲国产午夜 | 亚洲www| 国产露脸对白88av | 欧美一区二区三区四区五区无卡码 | 亚洲成年在线 | 亚州一区二区三区 | 久久成人精品 | 国产在线二区 | www精品美女久久久tv | 欧美成人自拍 | 在线免费观看欧美 | 免费的色网站 |