色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

PWM是什么?有什么用?PWM能玩出什么花樣?

冬至子 ? 來源:ZYuanBlogs ? 作者:激沄RagingWaves ? 2023-10-31 17:35 ? 次閱讀

一、PWM是什么?有什么用?

PWM指的是脈沖寬度調制技術,通過對脈沖寬度的調節可以達到通信(如控制舵機)、模擬“模擬輸出”(如調節燈的亮度),前者在以后再結合舵機來講,本文側重講后者。

圖片

首先,我們來了解幾個概念:

1、PWM頻率、PWM周期

圖片

這是一個約為50Hz的PWM輸出波形

圖片

這個PWM的周期約為20ms

PWM頻率指1秒的時間里PWM運行的次數;

PWM周期指一次完整的PWM輸出所使用的時間。

2、占空比

圖片

從上往下,占空比分別為25%、50%、75%

占空比指在一個周期內接通的時間占這一周期的比例。

明白這些后,恭喜你已經基本掌握PWM的原理了!

我們知道單片機的IO口只有0和1兩種輸出狀態,只能控制LED的亮與滅,如果我們想要得到下面這樣的輸出效果,思考一下,結合PWM我們可以怎么做?

圖片

你可能已經想到了,IO口保持高電平(1)時LED最亮,此時電壓為5V(以5V電壓工作的單片機為例),如果在里面插入低電平,輸出10101010...不就相當于輸出2.5V了嗎?

不嚴謹地說,這樣使用PWM確實能達到“模擬輸出”的效果,但如果真的需要模擬輸出,單單這樣是不夠的(所以前面標了引號),在此不進行細說。

二、怎樣設計PWM程序?

我們先來構造這么一個框架:

1、確定一個單位時間t,每個t內固定地輸出0或1;

2、過了n個t完成一個PWM周期;

3、使用程序控制一個周期內輸出1的數量為m,輸出0的數量為(n-m)。

有了上面的框架,設計程序就不難了:

我們可以使用定時器,每隔一定的時間進入一次中斷,并記錄進入中斷的次數x,直到完成一次PWM周期,將x歸零;

設我們所需要的PWM輸出占空比為y,當x<=y時輸出高電平,x>y時輸出低電平。

這樣,我們的程序基本就設計出來了,是不是很簡單?(〃'▽'〃)

在正式編寫程序前,我們還需要考慮一些小問題:

因為51單片機的運行頻率不高,PWM的頻率也不能設計得太高,過于頻繁地進入中斷也會影響程序的正常運行。

在下面的例程中,我所設置的定時器中斷的間隔為0.1ms,每20ms完成一次PWM周期。

在這一小節的最后,我們整理一下思路,可以得到下面的流程圖:

圖片

三、寫個程序試試看!

按上面的流程圖,我們就可以寫一個控制LED亮度的程序了:

#include < reg52.h >


#define PWM_T 200                      //產生中斷的時間,因為是24MHz,200即100微秒(0.1毫秒)
#define LED P1


int PWM_count0 = 0;                    //進入中斷的次數
int PWM0 = 100;                        //控制PWM的占空比,下同
int PWM1 = 170;
int PWM2 = 188;
int PWM3 = 198;


sbit LED0 = P1^0;                      //LED引腳定義,下同
sbit LED1 = P1^1;
sbit LED2 = P1^2;
sbit LED3 = P1^3;


void PWM_Start()                      //PWM初始化函數,打開了定時器0
{
  EA = 1;
  ET0 = 1;
  TMOD = 0x09;
  TR0 = 1;


  TH0 = (65536-PWM_T)/256;
  TL0 = (65536-PWM_T)%256;
}


void main()
{
  PWM_Start();                        //PWM開始運行


  while(1)
  {
    if(PWM_count0 <= PWM0)            //調節LED0的亮度
    {
      LED0 = 1;
    }
    else
    {
      LED0 = 0;
    }


    if(PWM_count0 <= PWM1)            //調節LED1的亮度
    {
      LED1 = 1;
    }
    else
    {
      LED1 = 0;
    }


    if(PWM_count0 <= PWM2)            //調節LED2的亮度
    {
      LED2 = 1;
    }
    else
    {
      LED2 = 0;
    }


    if(PWM_count0 <= PWM3)            //調節LED3的亮度
    {
      LED3 = 1;
    }
    else
    {
      LED3 = 0;
    }
  }
}


void Timer0() interrupt 1
{
  TH0 = (65536-PWM_T)/256;
  TL0 = (65536-PWM_T)%256;


  PWM_count0++;
  if(PWM_count0 == 200)                //完成了一個PWM周期,計數變量清零
  {
    PWM_count0 = 0;
  }
}

把上面的程序編譯后下載到開發板上:

圖片

小提示:人眼對亮度的感覺不是線性變化的,因此LED0與LED1雖然占空比相差較大,但肉眼感覺亮度不相上下,感興趣的可以去研究一下。

用邏輯分析儀收集一下IO口的輸出信息

圖片

黃框里的為一個PWM周期

上面的程序還有一些需要注意的地方:

1、記得加while循環,因為PWM輸出是持續的,沒有循環就只會進行一個周期;

2、晶振頻率建議設置為24MHz,12MHz也可以,相應地定時器中斷時間也要更改。

我們可以將上面的程序進一步優化,如果我們把if語句寫成子函數,通過參數控制占空比,返回值控制0和1的輸出,程序會簡化很多:

#include < reg52.h >


#define PWM_T 200                      //產生中斷的時間,因為是24MHz,200即100微秒(0.1毫秒)
#define LED P1


int PWM_count0 = 0;                    //進入中斷的次數
int PWM0 = 100; //去掉7~10行                       //控制PWM的占空比,下同
int PWM1 = 170;
int PWM2 = 188;
int PWM3 = 198;


sbit LED0 = P1^0;                      //LED引腳定義,下同
sbit LED1 = P1^1;
sbit LED2 = P1^2;
sbit LED3 = P1^3;


void PWM_Start()                      //PWM初始化函數,打開了定時器0
{
  EA = 1;
  ET0 = 1;
  TMOD = 0x09;
  TR0 = 1;


  TH0 = (65536-PWM_T)/256;
  TL0 = (65536-PWM_T)%256;
}


int PWM(int PWM_value)                //控制PWM輸出的子函數
{
  if(PWM_count0 <= PWM_value)
  {
    return 1;
  }
  else
  {
    return 0;
  }
}


void main()
{
  PWM_Start();                        //PWM開始運行


  while(1)
  {
    LED0 = PWM(100);                  //調節LED0的亮度
    LED1 = PWM(170);                  //調節LED1的亮度
    LED2 = PWM(188);                  //調節LED2的亮度
    LED3 = PWM(198);                  //調節LED3的亮度
  }
}


void Timer0() interrupt 1
{
  TH0 = (65536-PWM_T)/256;
  TL0 = (65536-PWM_T)%256;


  PWM_count0++;
  if(PWM_count0 == 200)                //完成了一個PWM周期,計數變量清零
  {
    PWM_count0 = 0;
  }
}

可以看到,寫成子函數后調用PWM輸出方便了不少。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 51單片機
    +關注

    關注

    274

    文章

    5705

    瀏覽量

    124081
  • 定時器
    +關注

    關注

    23

    文章

    3255

    瀏覽量

    115181
  • 脈沖寬度調制

    關注

    7

    文章

    81

    瀏覽量

    13766
  • 邏輯分析儀
    +關注

    關注

    3

    文章

    214

    瀏覽量

    23234
  • PWM輸出
    +關注

    關注

    1

    文章

    66

    瀏覽量

    5209
收藏 人收藏

    評論

    相關推薦

    PWM應用

    PWM
    橙群微電子
    發布于 :2023年03月09日 09:11:48

    【FPGA設計實例】JTAG讓你的FPGA玩出新花樣

    本帖最后由 eehome 于 2013-1-5 09:46 編輯 JTAG讓你的FPGA玩出新花樣第1部分:JTAG是什么?第2部分:JTAG如何的工作第3部分:查詢JTAG鏈第4部分:運行
    發表于 03-20 15:03

    stc單片機輸出pwm,旁邊再連上enc28j60模塊什么用

    芯片的stc12c5410ad,這芯片輸出pwm,然后再連上enc28j60網絡模塊,這網絡模塊什么用
    發表于 05-11 21:25

    請問PWM轉為線性電壓什么用

    單片機輸出PWM信號,經過RC變換再經過跟隨器輸出線性電壓,這樣
    發表于 04-16 06:48

    如何把手中的這顆LED燈玩出新花樣

    學會了如何點亮LED燈,那么接下來的就是如何把手中的這顆LED燈玩出新花樣,在上一篇文章的基礎上這次我加入了按鍵去抖和LED呼吸燈的程序。根據電路原理圖可知,按鍵一端分別連接PA0和PA1,另一端連接GND。也就是說當PA0或PA1按下的時候,按鍵與GND導通,使得IO端口短接到...
    發表于 01-24 07:35

    斬波器什么用

    斬波器什么用找來一個東西象電子管的樣子,全金屬封裝,7腳,常州繼電器廠出的。ZB-2-6.3    6.3v/50HZ。不知干什么用的,請教大家。  lszsw回復
    發表于 11-10 10:28 ?1863次閱讀

    vivoNEX雙屏版玩游戲怎么樣

    雙屏版獨特的設計在拍照方面玩出花樣,而作為一名游戲玩家,我發現它還能玩出更多花樣
    的頭像 發表于 01-07 10:07 ?1.3w次閱讀

    Tivoo像素音箱評測 音箱上也能玩出新花樣

    藍牙音箱品牌很多,但是能玩出花的不多。
    的頭像 發表于 03-12 10:33 ?2631次閱讀

    PWM的占空比是什么東西PWM什么優點

    pwm也即脈寬調制,在現實中,pwm在諸多器件中均有所應用。在往期文章中,小編對pwm的原理、調制方法有所介紹。為增進大家對pwm的了解程度,本文將對
    的頭像 發表于 12-12 09:55 ?5.5w次閱讀
    <b class='flag-5'>PWM</b>的占空比是什么東西<b class='flag-5'>PWM</b><b class='flag-5'>有</b>什么優點

    PWM的詳細介紹和PWM頻率與PWM值的區別說明

    對于pwm,想必很多朋友都有所耳聞。但是,大家對于pwm真的了解嗎?譬如,pwm頻率是如何被確定下來的?pwm頻率和pwm值是同一個東西嗎?
    的頭像 發表于 12-12 09:55 ?4.4w次閱讀
    <b class='flag-5'>PWM</b>的詳細介紹和<b class='flag-5'>PWM</b>頻率與<b class='flag-5'>PWM</b>值的區別說明

    藍牙信標定位什么用

    藍牙信標定位什么用
    的頭像 發表于 07-28 14:11 ?1w次閱讀

    小米機器狗什么用

    小米機器狗什么用
    的頭像 發表于 08-12 09:33 ?1.4w次閱讀

    STM32F103輸出一路PWM波形,完整源碼。示波器觀察輸出波形

    STM32F103輸出一路PWM波形,完整源碼。示波器觀察輸出波形 序 言 1) 什么是PWM信號 2) 如何實現
    發表于 01-14 16:06 ?25次下載
    <b class='flag-5'>用</b>STM32F103輸出一路<b class='flag-5'>PWM</b>波形,<b class='flag-5'>有</b>完整源碼。<b class='flag-5'>用</b>示波器觀察輸出波形

    MWCS 2023丨5G時代 還能玩出什么花?

    原文標題:MWCS 2023丨5G時代 還能玩出什么花? 文章出處:【微信公眾號:中興通訊】歡迎添加關注!文章轉載請注明出處。
    的頭像 發表于 06-26 15:55 ?340次閱讀

    pcb仿真技術什么用

    pcb仿真技術什么用
    的頭像 發表于 11-28 15:22 ?1173次閱讀
    主站蜘蛛池模板: 亚洲熟妇色自偷自拍另类 | 麻豆高清免费国产一区 | 男人免费网站 | 亚洲男同tv | 中俄两军在日本海等上空战略巡航 | 在线亚洲精品国产一区麻豆 | 搡女人免费免费视频观看 | 一本道色综合手机久久 | 午夜色网站 | 久久香蕉国产线看观看 | 免费看男人J放进女人J无遮掩 | 色噜噜狠狠色综合中文字幕 | 婷婷久久无码欧美人妻 | 激情内射亚洲一区二区三区爱妻 | 国产日韩欧美三级 | 国产毛片女人高潮叫声 | 猫咪最新破解版下载 | 青青草国产偷拍在线av | 国产啪视频在线播放观看 | 亚洲精品国产SUV | 亚洲AV无码乱码在线观看浪潮 | 国内精品久久 | 亚洲日韩欧美国产中文在线 | 高h肉文np| 国产中文字幕在线 | 老师真棒无遮瑕版漫画免费 | 日日夜夜狠狠干 | 三级黄色在线看 | 忘忧草在线影院www日本 | 交换娇妻呻吟声不停中文字幕 | 日本中文一区 | 久久无码人妻中文国产 | 四虎精品久久久久影院 | 一个人在线观看免费中文www | 亚洲免费精品 | 国产亚洲免费观看 | 影音先锋影院中文无码 | 日日夜夜国产 | 快播电影频道 | 欧美亚洲另类丝袜自拍动漫 | 中文字幕A片视频一区二区 中文字幕AV在线一二三区 |