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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6088|回復: 8
收起左側

STC8G1K08單片機的PWM為什么沒有輸出,在定時器0定義IO取反,但是占空比不管用

[復制鏈接]
ID:807182 發表于 2021-5-24 13:26 | 顯示全部樓層 |閱讀模式
30黑幣
/************************ 定時器配置 ****************************/
void        Timer_config(void)
{
        TIM_InitTypeDef                TIM_InitStructure;                                                //結構定義
        TIM_InitStructure.TIM_Mode      = TIM_16BitAutoReload;        //指定工作模式,   TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMask
        TIM_InitStructure.TIM_Polity    = Polity_0;                        //指定中斷優先級(低到高) Polity_0,Polity_1,Polity_2,Polity_3
        TIM_InitStructure.TIM_Interrupt = ENABLE;                                        //中斷是否允許,   ENABLE或DISABLE
        TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_1T;                //指定時鐘源,     TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
        TIM_InitStructure.TIM_ClkOut    = ENABLE;                                //是否輸出高速脈沖, ENABLE或DISABLE
        TIM_InitStructure.TIM_Value     = 65536UL - (MAIN_Fosc / 1000);                //中斷頻率, 1000次/秒
        TIM_InitStructure.TIM_Run       = ENABLE;                                        //是否初始化后啟動定時器, ENABLE或DISABLE
        Timer_Inilize(Timer0,&TIM_InitStructure);                                        //初始化Timer0          Timer0,Timer1,Timer2,Timer3,Timer4
}

/***************  串口初始化函數 *****************/
void        PWM_config(void)
{
        PWMx_InitDefine                PWMx_InitStructure;
        
        PWMx_InitStructure.PWM1_Mode    =        CCMRn_PWM_MODE1;        //模式,                CCMRn_FREEZE,CCMRn_MATCH_VALID,CCMRn_MATCH_INVALID,CCMRn_ROLLOVER,CCMRn_FORCE_INVALID,CCMRn_FORCE_VALID,CCMRn_PWM_MODE1,CCMRn_PWM_MODE2
        PWMx_InitStructure.PWM2_Mode    =        CCMRn_PWM_MODE1;        //模式,                CCMRn_FREEZE,CCMRn_MATCH_VALID,CCMRn_MATCH_INVALID,CCMRn_ROLLOVER,CCMRn_FORCE_INVALID,CCMRn_FORCE_VALID,CCMRn_PWM_MODE1,CCMRn_PWM_MODE2
        PWMx_InitStructure.PWM3_Mode    =        CCMRn_PWM_MODE1;        //模式,                CCMRn_FREEZE,CCMRn_MATCH_VALID,CCMRn_MATCH_INVALID,CCMRn_ROLLOVER,CCMRn_FORCE_INVALID,CCMRn_FORCE_VALID,CCMRn_PWM_MODE1,CCMRn_PWM_MODE2
        PWMx_InitStructure.PWM4_Mode    =        CCMRn_PWM_MODE1;        //模式,                CCMRn_FREEZE,CCMRn_MATCH_VALID,CCMRn_MATCH_INVALID,CCMRn_ROLLOVER,CCMRn_FORCE_INVALID,CCMRn_FORCE_VALID,CCMRn_PWM_MODE1,CCMRn_PWM_MODE2

        PWMx_InitStructure.PWM1_SetPolity  = Polity_0;                        //指定中斷優先級(低到高) Polity_0,Polity_1,Polity_2,Polity_3
        PWMx_InitStructure.PWM2_SetPolity  = Polity_0;                        //指定中斷優先級(低到高) Polity_0,Polity_1,Polity_2,Polity_3
        PWMx_InitStructure.PWM3_SetPolity  = Polity_0;                        //指定中斷優先級(低到高) Polity_0,Polity_1,Polity_2,Polity_3
        PWMx_InitStructure.PWM4_SetPolity  = Polity_0;                        //指定中斷優先級(低到高) Polity_0,Polity_1,Polity_2,Polity_3
        
        PWMx_InitStructure.PWM_Period   = 1024;                                                        //周期時間,   0~65535
        PWMx_InitStructure.PWM1_Duty    = PWMA_Duty.PWM1_Duty;        //PWM1占空比時間, 0~Period
        PWMx_InitStructure.PWM2_Duty    = PWMA_Duty.PWM2_Duty;        //PWM2占空比時間, 0~Period
        PWMx_InitStructure.PWM3_Duty    = PWMA_Duty.PWM3_Duty;        //PWM3占空比時間, 0~Period
        PWMx_InitStructure.PWM4_Duty    = PWMA_Duty.PWM4_Duty;        //PWM4占空比時間, 0~Period
        PWMx_InitStructure.PWM_DeadTime = 0;                                                                //死區發生器設置, 0~255
        
        PWMx_InitStructure.PWM_EnoSelect   = ENO1P | ENO1N  ;        //輸出通道選擇,        ENO1P,ENO1N,ENO2P,ENO2N,ENO3P,ENO3N,ENO4P,ENO4N / ENO5P,ENO6P,ENO7P,ENO8P
        PWMx_InitStructure.PWM_PS_SW       = PWM1_SW_P10_P11 ;        //切換端口,                PWM1_SW_P10_P11,PWM1_SW_P20_P21,PWM1_SW_P60_P61
                                                                                                                                                                                                                        //                                                PWM2_SW_P12_P13,PWM2_SW_P22_P23,PWM2_SW_P62_P63
                                                                                                                                                                                                                        //                                                PWM3_SW_P14_P15,PWM3_SW_P24_P25,PWM3_SW_P64_P65
                                                                                                                                                                                                                        //                                                PWM4_SW_P16_P17,PWM4_SW_P26_P27,PWM4_SW_P66_P67,PWM4_SW_P34_P33

        PWMx_InitStructure.PWM_CC1Enable   = ENABLE;                                //開啟PWM1P輸入捕獲/比較輸出,  ENABLE,DISABLE
        PWMx_InitStructure.PWM_CC1NEnable  = ENABLE;                                //開啟PWM1N輸入捕獲/比較輸出,  ENABLE,DISABLE
        PWMx_InitStructure.PWM_CC2Enable   = ENABLE;                                //開啟PWM2P輸入捕獲/比較輸出,  ENABLE,DISABLE
        PWMx_InitStructure.PWM_CC2NEnable  = ENABLE;                                //開啟PWM2N輸入捕獲/比較輸出,  ENABLE,DISABLE
        PWMx_InitStructure.PWM_CC3Enable   = ENABLE;                                //開啟PWM3P輸入捕獲/比較輸出,  ENABLE,DISABLE
        PWMx_InitStructure.PWM_CC3NEnable  = ENABLE;                                //開啟PWM3N輸入捕獲/比較輸出,  ENABLE,DISABLE
        PWMx_InitStructure.PWM_CC4Enable   = ENABLE;                                //開啟PWM4P輸入捕獲/比較輸出,  ENABLE,DISABLE
        PWMx_InitStructure.PWM_CC4NEnable  = ENABLE;                                //開啟PWM4N輸入捕獲/比較輸出,  ENABLE,DISABLE
        
        PWMx_InitStructure.PWM_MainOutEnable= ENABLE;                                //主輸出使能, ENABLE,DISABLE
        PWMx_InitStructure.PWM_CEN_Enable   = ENABLE;                                //使能計數器, ENABLE,DISABLE
        PWM_Configuration(PWMA, &PWMx_InitStructure);                                //初始化PWM,  PWMA,PWMB
}







定時器中斷里面是這樣寫的

if(!PWM1_Flag)
        {
                PWMA_Duty.PWM1_Duty++;
                if(PWMA_Duty.PWM1_Duty >= 2047) PWM1_Flag = 1;
        }
        else
        {
                PWMA_Duty.PWM1_Duty--;
                if(PWMA_Duty.PWM1_Duty <= 0) PWM1_Flag = 0;
        }

        if(!PWM2_Flag)
        {
                PWMA_Duty.PWM2_Duty++;
                if(PWMA_Duty.PWM2_Duty >= 2047) PWM2_Flag = 1;
        }
        else
        {
                PWMA_Duty.PWM2_Duty--;
                if(PWMA_Duty.PWM2_Duty <= 0) PWM2_Flag = 0;
        }

        if(!PWM3_Flag)
        {
                PWMA_Duty.PWM3_Duty++;
                if(PWMA_Duty.PWM3_Duty >= 2047) PWM3_Flag = 1;
        }
        else
        {
                PWMA_Duty.PWM3_Duty--;
                if(PWMA_Duty.PWM3_Duty <= 0) PWM3_Flag = 0;
        }

        if(!PWM4_Flag)
        {
                PWMA_Duty.PWM4_Duty++;
                if(PWMA_Duty.PWM4_Duty >= 2047) PWM4_Flag = 1;
        }
        else
        {
                PWMA_Duty.PWM4_Duty--;
                if(PWMA_Duty.PWM4_Duty <= 0) PWM4_Flag = 0;
        }
        
        UpdatePwm(PWMA, &PWMA_Duty);





回復

使用道具 舉報

ID:584814 發表于 2021-5-26 09:28 | 顯示全部樓層
STC網站或工具中找個程例就可以。
回復

使用道具 舉報

ID:188720 發表于 2022-8-4 16:37 | 顯示全部樓層
STC8G1K08一個PWM有兩個引腳可以輸出,但是怎么選擇哪一個引腳怎么設置呢?文檔里有嗎?
回復

使用道具 舉報

ID:1034262 發表于 2022-8-4 17:49 | 顯示全部樓層
紅燒魚頭 發表于 2022-8-4 16:37
STC8G1K08一個PWM有兩個引腳可以輸出,但是怎么選擇哪一個引腳怎么設置呢?文檔里有嗎?

手冊第3章“功能腳切換”
回復

使用道具 舉報

ID:1034262 發表于 2022-8-4 17:51 | 顯示全部樓層
樓主,PWM輸出的IO有沒有設置為準雙向口或推挽輸出?
回復

使用道具 舉報

ID:213173 發表于 2022-8-4 21:08 | 顯示全部樓層
//適用于STC8G1K08-16/20PIN
#include <STC8.H>

void main()
{
        P1M0 = 0x02;           //P1.1推挽模式
        P1M1 = 0x00;           //P1.1推挽模式
        P3M0 = 0x00;
        P3M1 = 0x00;
        P5M0 = 0x00;
        P5M1 = 0x00;
       
        CCON = 0x00;
        CMOD = 0x08;           //PCA時鐘為系統時鐘
        CL = 0x00;
        CH = 0x00;
       
        CCAPM0 = 0x42;         //PCA模塊0為PWM工作模式
        PCA_PWM0 = 0x00;       //PCA模塊0輸出8位PWM     
        CCAP0H=CCAP0L=0x80;    //PWM占空比為50%
        //默認P1.1輸出PWM,改變CCAP0H值即改變占空比(0xff~0x00=0%~100%)
        while (1);
}
回復

使用道具 舉報

ID:631012 發表于 2022-9-8 10:07 來自觸屏版 | 顯示全部樓層
最初接MOS管,發現沒有輸出,量了一下輸出電壓1.15v,換成三極管后正常輸出,就是頻率不能調低了嗎。
回復

使用道具 舉報

ID:1034262 發表于 2022-9-8 15:55 | 顯示全部樓層
MOS管輸入電容較大,PWM頻率高時,由于IO有內阻,則等效RC濾波了。
回復

使用道具 舉報

ID:999824 發表于 2022-9-8 19:37 | 顯示全部樓層
有沖突應該是,會有問題的
回復

使用道具 舉報

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

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品永久久久久 | 一级毛片在线看 | 国内精品伊人久久久久网站 | 午夜小视频在线播放 | 天天操天天操 | 精久久久 | 国内精品久久久久久久影视简单 | 美女视频. | 91久久久久久 | 欧美视频1 | 亚洲 欧美 日韩 在线 | 国产乱码久久久久久 | 亚洲一区二区三区在线 | 国产资源在线播放 | 欧美成人一区二免费视频软件 | 成人毛片视频免费 | 国产精品久久福利 | 国产精品一区二区久久 | 1204国产成人精品视频 | 精品日韩一区二区 | 日本中文字幕一区 | 欧美日韩一区二区三区在线观看 | 久久精品成人 | 国产成人jvid在线播放 | 一区二区国产在线观看 | 污片在线观看 | 久久久久久精 | 日韩成人中文字幕 | 精品一区av| 欧美一区在线视频 | 国产精品不卡视频 | 日本特黄a级高清免费大片 特黄色一级毛片 | 福利社午夜影院 | 亚洲瑟瑟 | 日韩av在线不卡 | 国产1区 | 国产精彩视频在线观看 | 久久成人一区 | 久久免费看 | 国产免费视频在线 | 天天操天天干天天曰 |