在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

  • <object id="1jp1h"></object>
    <address id="1jp1h"><nav id="1jp1h"></nav></address>
  • <label id="1jp1h"></label>
    
    

    <bdo id="1jp1h"></bdo>

    新聞中心

    STM8 PWM例程

    作者: 時間:2016-11-25 來源:網(wǎng)絡 收藏
    單片機應用系統(tǒng)中,也常常會用到PWM 信號輸出,例如電機轉(zhuǎn)速的控制?,F(xiàn)在很多高檔的單片機

    也都集成了PWM 功能模塊,方便用戶的應用。
    對于PWM 信號,主要涉及到兩個概念,一個就是PWM 信號的周期或頻率,另一個就是PWM 信號的
    占空比。例如一個頻率為1KHZ,占空比為30%,有效信號為1 的PWM 信號,在用示波器測量時,
    就是高電平的時間為300uS,低電平的時間為700uS 的周期波形。
    在單片機中實現(xiàn)PWM 信號的功能模塊,實際上就是帶比較器的計數(shù)器模塊。首先該計數(shù)器循環(huán)計數(shù),
    例如從0 到N,那么這個N 就決定了PWM 的周期,PWM 周期=(N+1)*計數(shù)器時鐘的周期。在計數(shù)
    器模塊中一定還有一個比較器,比較器有2 個輸入,一個就是計數(shù)器的當前值,另一個是可以設置的
    數(shù),這個數(shù)來自一個比較寄存器。當計數(shù)器的值小于比較寄存器的值時,輸出為1(可以設置為0),
    當計數(shù)器的值大于或等于比較寄存器的值時,輸出為0(也可設置為1,與前面對應)。
    了解了這個基本原理后,我們就可以使用STM8 單片機中的PWM 模塊了。下面的實驗程序首先將定
    時器2 的通道2 設置成PWM 輸出方式,然后通過設置自動裝載寄存器TIM2_CCR2,決定PWM 信號
    的周期。在程序的主循環(huán)中,循環(huán)修改占空比,先是從0 逐漸遞增到128,然后再從128 遞減到0。
    當把下面的程序在ST 的三合一板上運行時,可以看到發(fā)光二極管LD1 逐漸變亮,然后又逐漸變暗,
    就這樣循環(huán)往復。如果用示波器看,可以看到驅(qū)動LD1 的信號波形的占空比從0 變到50%,然后又從
    50%變到0。
    同樣還是利用ST 的開發(fā)工具,生成一個C 語言程序的框架,然后修改其中的main.c,修改后的代碼
    如下。
    // 程序描述:用PWM 輸出驅(qū)動LED
    #include "STM8S207C_S.h"
    void CLK_Init(void);
    void TIM_Init(void);
    // 函數(shù)功能:延時函數(shù)
    // 輸入?yún)?shù):ms -- 要延時的毫秒數(shù),這里假設CPU 的主頻為2MHZ
    // 輸出參數(shù):無
    // 返回值:無
    // 備注:無
    void DelayMS(unsigned int ms)
    {
    unsigned char i;
    while(ms != 0)
    {
    for(i=0;i<250;i++);
    for(i=0;i<75;i++);
    ms--;
    }
    }

    本文引用地址:http://www.biyoush.com/article/201611/321401.htm

    // 函數(shù)功能:初始化時鐘
    // 輸入?yún)?shù):無
    // 輸出參數(shù):無
    // 返回值:無
    // 備注:無
    void CLK_Init()
    {
    CLK_CKDIVR = 0x11; // 10: fHSI = fHSI RC output/ 4
    // = 16MHZ / 4 =4MHZ
    // 001: fCPU=fMASTER/2. = 2MHZ
    }
    // 函數(shù)功能:初始化定時器2 的通道2,用于控制LED 的亮度
    // 輸入?yún)?shù):無
    // 輸出參數(shù):無
    // 返回值:無
    // 備注:無
    void TIM_Init()
    {
    TIM2_CCMR2 = TIM2_CCMR2 | 0x70;// Output mode PWM2.
    // 通道2 被設置成比較輸出方式
    // OC2M = 111,為PWM 模式2,
    // 向上計數(shù)時,若計數(shù)器小于比較值,為無效電平
    // 即當計數(shù)器在0 到比較值時,輸出為1,否則為0
    TIM2_CCER1 = TIM2_CCER1 | 0x30;// CC polarity low,enable PWM output */
    // CC2P = 1,低電平為有效電平
    // CC2E = 1,開啟輸出引腳
    //初始化自動裝載寄存器,決定PWM 方波的頻率,F(xiàn)pwm=4000000/256=15625HZ
    TIM2_ARRH = 0;
    TIM2_ARRL = 0xFF;
    //初始化比較寄存器,決定PWM 方波的占空比
    TIM2_CCR2H = 0;
    TIM2_CCR2L = 0;
    // 初始化時鐘分頻器為1,即計數(shù)器的時鐘頻率為Fmaster=4MHZ
    TIM2_PSCR = 0;
    // 啟動計數(shù)
    TIM2_CR1 = TIM2_CR1 | 0x01;
    }
    main()
    {
    unsigned char i;
    CLK_Init(); // 初始化時鐘
    TIM_Init(); // 初始化定時器
    while(1) // 進入無限循環(huán)
    {
    // 下面的循環(huán)將占空比逐漸從0 遞增到50%
    for(i=0;i<128;i++)
    {
    TIM2_CCR2H = 0;
    TIM2_CCR2L = i;
    DelayMS(5);
    }
    // 下面的循環(huán)將占空比逐漸從50%遞減到0
    for(i=128;i>0;i--)
    {
    TIM2_CCR2H = 0;
    TIM2_CCR2L = i;
    DelayMS(5);
    }
    }
    }



    關(guān)鍵詞: STM8PWM例

    評論


    技術(shù)專區(qū)

    關(guān)閉