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

標題: STC8H3K48S4的兩路PWM相位差180度輸出問題 [打印本頁]

作者: gyn20022002    時間: 2025-7-5 09:41
標題: STC8H3K48S4的兩路PWM相位差180度輸出問題


[attach]303883[/attach]

由官方代碼修改,時鐘為24MHZ,頻率為85KHZ,不分頻
實際在20-40%占空比為目標輸出,但是占空比50時另一路在一個周期才會翻轉一次
AB圖為目標輸出
求解惑為什么無法輸出50%占空比,或者有無其他方法實現目標輸出,求思

1.jpg (80.75 KB, 下載次數: 0)

1.jpg

2.jpg (34.37 KB, 下載次數: 0)

2.jpg

3.jpg (103.11 KB, 下載次數: 0)

3.jpg

4.jpg (78.17 KB, 下載次數: 0)

4.jpg

5.jpg (57.94 KB, 下載次數: 0)

5.jpg

6.jpg (220.15 KB, 下載次數: 0)

占空比50波形

占空比50波形

7.jpg (19.54 KB, 下載次數: 0)

目標輸出

目標輸出

作者: WL0123    時間: 2025-7-5 15:25
參考官方示例中帶死區控制的PWM互補輸出,控制死區時間即可達到圖A-B的波形變化。
作者: a825563619    時間: 2025-7-5 17:20
是不是輸出疊加了,頻率不一樣
作者: 622323wjl    時間: 2025-7-6 08:13
從問題描述來看,你在24MHz時鐘下嘗試實現85kHz頻率且占空比20%-40%的輸出,但發現占空比設為50%時另一路信號在單周期內僅翻轉一次,這可能與定時器計數機制及PWM生成邏輯有關。85kHz頻率對應的周期約為11.76μs,24MHz時鐘下每個計數周期為41.67ns,理論上定時器需計數約282次(24MHz/85kHz≈282.35)完成一個周期。若采用向上計數模式,占空比由比較值與周期值的比例決定,當比較值設為周期值一半(如141或142)時理論上應輸出50%占空比,但實際出現異常,可能是定時器工作模式(如是否支持中心對齊PWM)或輸出邏輯配置導致。  

另一路信號單周期僅翻轉一次,可能是因為該通道采用了不同的輸出模式(如僅在計數到頂或底時翻轉),或與主通道存在時序耦合。例如,若兩路PWM共享定時器資源且配置為互補輸出,當占空比設為50%時,可能因死區時間設置或輸出極性配置導致信號翻轉頻率減半。此外,若定時器工作在向上/向下計數模式(中心對齊PWM),比較值設為周期值一半時應生成對稱波形,但若配置為向上計數模式(邊沿對齊PWM),50%占空比需精確設置比較值為周期值的一半,且需確保輸出模式為“匹配時置位/清零”而非“翻轉”模式,后者會導致每匹配一次翻轉一次,使占空比固定為50%但頻率減半。  

要實現目標輸出,可嘗試以下方案:首先確認定時器工作模式及PWM生成方式,若使用邊沿對齊PWM,確保周期值N與比較值C滿足C=N×占空比(如20%占空比時C=0.2N),且輸出模式配置為“匹配時清零/置位”而非翻轉;若需50%占空比且頻率不變,可改用中心對齊PWM模式,通過設置比較值為N/2來生成對稱波形。此外,可獨立配置兩路PWM使用不同定時器資源,避免時序干擾,并通過示波器測量定時器計數寄存器與輸出引腳的時序關系,定位比較值設置與輸出翻轉的實際對應關系,從而優化參數配置。
作者: wff1234    時間: 2025-7-8 09:59
可以用帶PWM硬件移相功能的STC8H2K32U系列
作者: gyn20022002    時間: 2025-7-8 22:44
問題已經解決,換成pwm互補輸出加死區調節的方式實現目標波形輸出
作者: wff1234    時間: 2025-7-9 10:05
1、參考這個程序:15A-PWMB-2個相位差180度的PWM輸出P2口-匹配翻轉輸出
void main(void)
{

        P_SW2  = 0x80;
/*
        XOSCCR = 0xc0;                        //啟動外部晶振
        while (!(XOSCCR & 1));        //等待時鐘穩定
        CLKDIV = 0x00;                        //時鐘不分頻
        CLKSEL = 0x01;                        //選擇外部晶振
*/

        pwmb1 = 200;        //通道1(PWM5)占空比
        pwmb2 = 200;        //通道2(PWM6)占空比
        PWMB_config();

        EA = 1;

        while (1)
        {

        }
}


//========================================================================
// 函數: void PWMB_config(void)
// 描述: PWM配置函數。
// 參數: noe.
// 返回: none.
// 版本: V1.0, 2022-3-15
// 備注:
//========================================================================
void PWMB_config(void)
{
        u8        ccer1;
        u8        ccer2;
        u8        ps;
        u8        eno;

        P_SW2 |= 0x80;                //SFR enable   
        PWMB_CCMR1 = 0x00;                // 通道模式配置, 匹配模式1, 禁止預裝載, 匹配時輸出高
        PWMB_CCMR2 = 0x00;                // 通道模式配置, 匹配模式1, 禁止預裝載, 匹配時輸出高
        PWMB_ENO    = 0;        // IO輸出禁止
        PWMB_IER    = 0;        // 禁止中斷
        PWMB_SR1    = 0;        // 清除狀態
        PWMB_SR2    = 0;        // 清除狀態
        PWMB_CR1    = 0;        // 清除控制寄存器
        PWMB_CR2    = 0;        // 清除控制寄存器
        ccer1 = 0;
        ccer2 = 0;
        ps    = 0;
        eno   = 0;
        PWMB_ISR_En = 0;

        PWMB_PSCR = 11;                        // 預分頻寄存器, PWM時鐘 = 12MHz/(11+1)=1MHz, 分頻 Fck_cnt = Fck_psc/(PSCR[15:0}+1), 邊沿對齊PWM頻率 = SYSclk/((PSCR+1)*(AAR+1)), 中央對齊PWM頻率 = SYSclk/((PSCR+1)*(AAR+1)*2).
        PWMB_DTR  = 0;                        // 死區寄存器, PWMB無效

        PWMB_ARR  = PWMB_DUTY-1;        // 自動重裝載寄存器,  控制PWM周期
        PWMB_ISR_En |= 0x01;        // 使能更新中斷

        PWMB_CCMR1 = 0x68;                // 通道模式配置, PWM模式1, 預裝載允許
        PWMB_CCR1  = pwmb1;                // 比較值, 控制占空比(高電平時鐘數)
        ccer1 |= 0x05;                        // 開啟比較輸出, 高電平有效
        ps    |= 0;                                // 選擇IO, 0:選擇P2.0, 1:選擇P1.7, 2:選擇P0.0, 3:選擇P7.4,
        eno   |= 0x01;                        // IO輸出允許,  bit6: ENO8P, bit4: ENO7P,  bit2: ENO6P,  bit0: ENO5P
//        PWMB_ISR_En |= 0x02;        // 使能PWMB1(PWM5)中斷

        PWMB_CCMR2 = 0x30;                // 通道模式配置, 匹配模式3, 禁止預裝載, 匹配時取反輸出
        PWMB_CCR2  = PWMB_PHASE2;        // 匹配值
        ccer1 |= 0x50;                        // 開啟比較輸出, 高電平有效
        ps    |= (0<<2);                // 選擇IO, 0:選擇P2.1, 1:選擇P5.4, 2:選擇P0.1, 3:選擇P7.5
        eno   |= 0x04;                        // IO輸出允許,  bit6: ENO8P, bit4: ENO7P,  bit2: ENO6P,  bit0: ENO5P
        PWMB_ISR_En |= 0x04;        // 使能PWMB2(PWM6)中斷

        PWMB_CCER1  = ccer1;        // 捕獲/比較使能寄存器1
        PWMB_CCER2  = ccer2;        // 捕獲/比較使能寄存器2
        PWMB_PS     = ps;                // 選擇IO
        PWMB_IER    = PWMB_ISR_En;        //設置允許通道1~4中斷處理

        PWMB_BKR    = 0x80;                // 主輸出使能 相當于總開關
        PWMB_CR1    = 0x81;                // 使能計數器, 允許自動重裝載寄存器緩沖, 邊沿對齊模式, 向上計數,  bit7=1:寫自動重裝載寄存器緩沖(本周期不會被打擾), =0:直接寫自動重裝載寄存器本(周期可能會亂掉)
        PWMB_EGR    = 0x01;                //產生一次更新事件, 清除計數器和預分頻計數器, 裝載預分頻寄存器的值
        PWMB_ENO    = eno;                // 允許IO輸出
}

//        PWMB_PS   = (0<<6)+(0<<4)+(0<<2)+0;        //選擇IO, 4項從高到低(從左到右)對應PWM8 PWM7 PWM6 PWM5
//  PWMB_PS    PWM8    PWM7    PWM6    PWM5
//    00       P2.3    P2.2    P2.1    P2.0
//    01       P3.4    P3.3    P5.4    P1.7
//    02       P0.3    P0.2    P0.1    P0.0
//    03       P7.7    P7.6    P7.5    P7.4



//========================================================================
// 函數: void PWMB_ISR(void) interrupt PWMB_VECTOR
// 描述: PWMA中斷處理程序.
// 參數: None
// 返回: none.
// 版本: V1.0, 2021-6-1
//========================================================================
void PWMB_ISR(void) interrupt PWMB_VECTOR
{
        u8        sr1;
//        u8        sr2;
        sr1 = PWMB_SR1;        //為了快速, 中斷標志用一個局部變量處理
        PWMB_SR1 = 0;        //清除中斷標志
//        sr2 = PWMB_SR2;        //為了快速, 中斷標志用一個局部變量處理
        PWMB_SR2 = 0;        //清除中斷標志
        sr1 &= PWMB_ISR_En;        //每個通道可以單獨允許中斷處理

        if(sr1 & 0x01)        //更新中斷標志
        {
                PWMB_CCR2 = PWMB_PHASE2;        // 通道2匹配值, 匹配時取反輸出
        }

        if(sr1 & 0x04)        //通道2匹配中斷標志
        {
                PWMB_CCR2 = PWMB_PHASE2+pwmb2;        // 通道2匹配值, 匹配時取反輸出
        }
}
2、下面是STC8H2K系列PWM硬件移相程序可以參考:
配置代碼主函數里的改變PWM的代碼





作者: coody_sz    時間: 2025-7-9 11:23
你這種相位差180度的輸出,占空比一定要小于50%,否則就會有重疊,PWM會輸不出來的。




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 日韩少妇视频 | 成人中文字幕在线观看 | 欧美日韩一区在线 | 亚洲国产精品网站 | 首尔之春在线看 | 中文字幕在线观看网站 | 色吧综合| 亚洲播放 | 亚洲三级视频 | 欧美日韩大片 | 91手机在线视频 | 国产精品一区三区 | 免费一级片 | 亚洲va韩国va欧美va精品 | 亚洲国产欧美日韩在线 | 欧美日韩91 | 插插插av| 日韩在线不卡视频 | 深夜福利网 | 国产成人在线免费视频 | 亚洲免费小视频 | 在线观看网址你懂的 | 日韩欧美精品一区二区 | 看国产毛片 | av超碰在线 | www.黄色| av网在线观看 | 欧美日韩免费在线 | 久久精品播放 | 日韩欧美一区二区在线 | 中文字幕永久免费 | 日韩黄色录像 | 成人毛片网 | 成人免费激情视频 | 国产视频一区二区在线观看 | 日韩精品大片 | 黄色一级免费视频 | 羞羞的视频网站 | 黑人精品一区二区 | 久久综合五月天 | 日韩欧美国产一区二区三区 |