• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > AVR 定時器快速PWM模式使用

    AVR 定時器快速PWM模式使用

    作者: 時間:2013-04-11 來源:網絡 收藏

    PWM很常用,自帶內部PWM功能,分為快速和相位修正

    我們這里選擇方式15 ,由OCR1A保存上限值,由OCR1B保存匹配值,所以輸出管腳 OCR1A不能輸PWM,只能有OCR1B輸出PWM信號。

    如果用方式 5,6,7模式 上限值是固定的,所以我們就可以用OCR1A和OCR1B保存匹配值

    OCR1A和OCR1B都可以輸出PWM信號。

    點擊瀏覽下一頁

    快速PWM時序圖

    點擊瀏覽下一頁

    根據此公式計算出OCR1A和OCR1B的數值

    OCR1A:
    1,11059200 / 100 /64 = 1728 // 11.0592MHz晶振系數 / 100Hz頻率 / 64分頻
    2,1728 - 1 = 1727 //得到上限值,賦值給OCR1A

    OCR1B:
    1,1727 / 5 = 345.4 ( 取值為345 ) //得到匹配值,設定為2ms,賦值給OCR1B

    100Hz表示每秒震動100次,所以周期是1s / 100 = 0.01s 即10ms
    100Hz周期是10ms,要定時2ms即用 1727 / 5 =345.4 取值為345
    所以也可以知道產生的是占空比為20%的PWM信號

    測試代碼:

    #include iom16.h>

    void FastPWM(void)
    {
    DDRD_Bit4 = 1; // OC1B 管腳設置為輸出
    DDRD_Bit5 = 1; // OC1A 管腳設置為輸出

    TCCR1A=(0COM1A1)|(1COM1A0)|(1COM1B1)|(0COM1B0)|(1WGM11)|(1WGM10);
    // OC1A 作為上限值 電平取反 OC1B 作為比較值 比較匹配時清零,到達上限值是置1
    // TCCR1A ==> COM1A1 , COM1A0 , COM1B1 , COM1B0 , FOC1A , FOC1B , WGM11 , WGM10
    // 0 1 1 0 無關 無關 1 1
    TCCR1B=(1WGM13)|(1WGM12)|(0CS12)|(1CS11)|(1CS10);
    // 波形產生模式15 , 64分頻
    // TCCR1B ==> ICNC1 , ICES1 , - , WGM13 , WGM12 , CS12 , CS11 , CS10
    // 無關 無關 1 1 0 1 1

    OCR1A=1727; // 晶振頻率 11.0592MHz , 設定 100Hz PWM信號 , 64分頻
    OCR1B=345; // 為2ms的高電平持續時間
    }

    void main(void)
    {
    FastPWM();

    }

    pwm相關文章:pwm是什么


    pwm相關文章:pwm原理




    關鍵詞: AVR 定時器 PWM模式

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 肥东县| 夹江县| 昆山市| 永新县| 辉县市| 德江县| 万全县| 苏尼特右旗| 册亨县| 黄龙县| 达拉特旗| 长武县| 楚雄市| 肇州县| 正镶白旗| 平远县| 吉隆县| 平原县| 京山县| 邓州市| 寻乌县| 宝鸡市| 肥乡县| 榕江县| 罗城| 余干县| 婺源县| 彰化市| 凤阳县| 德阳市| 通山县| 毕节市| 宜兰县| 红桥区| 将乐县| 明光市| 基隆市| 沂水县| 永泰县| 霍山县| 浪卡子县|