日韩在线不卡免费视频一区,日韩欧美精品一区二区三区经典,日产精品码2码三码四码区,人妻无码一区二区三区免费,日本feerbbwdh少妇丰满

  • 回復(fù)
  • 收藏
  • 點(diǎn)贊
  • 分享
  • 發(fā)新帖

STC輸出PWM,波形抖動(dòng)怎么解決

QQ圖片20150205222713

 

全部回復(fù)(13)
正序查看
倒序查看
anndan
LV.6
2
2015-03-09 09:44

上圖是程序,用定時(shí)器0產(chǎn)生中斷,這個(gè)圖是PWM輸出波形,放電后波形是左右抖動(dòng)的厲害。如果在主程序中wihle(1)后面沒有任何語句就穩(wěn)定,加隨便一個(gè)語句就會(huì)出現(xiàn)圖上那樣。請問如何解決?

0
回復(fù)
2015-03-09 14:23
@anndan
[圖片]上圖是程序,用定時(shí)器0產(chǎn)生中斷,這個(gè)圖是PWM輸出波形,放電后波形是左右抖動(dòng)的厲害。如果在主程序中wihle(1)后面沒有任何語句就穩(wěn)定,加隨便一個(gè)語句就會(huì)出現(xiàn)圖上那樣。請問如何解決?
你的主程序中斷的時(shí)間太久了,明白沒有。盡量少去中斷定時(shí)器,不然就會(huì)有抖動(dòng)。
0
回復(fù)
2015-03-10 09:22
@anndan
[圖片]上圖是程序,用定時(shí)器0產(chǎn)生中斷,這個(gè)圖是PWM輸出波形,放電后波形是左右抖動(dòng)的厲害。如果在主程序中wihle(1)后面沒有任何語句就穩(wěn)定,加隨便一個(gè)語句就會(huì)出現(xiàn)圖上那樣。請問如何解決?
怎么樣了現(xiàn)在~?  
0
回復(fù)
anndan
LV.6
5
2015-03-12 20:31
@yueyunno1
你的主程序中斷的時(shí)間太久了,明白沒有。盡量少去中斷定時(shí)器,不然就會(huì)有抖動(dòng)。
有沒有具體辦法?
0
回復(fù)
lvyunzeng
LV.4
6
2015-03-13 08:01

STC單片機(jī)有內(nèi)部PWM生成器,十分好用,不占用CPU的資源。馮諾依曼結(jié)構(gòu)的MCU就是這個(gè)問題。以下是初始化,PWM初始化,PWM設(shè)置程序段

 

//=============================================================================//函 數(shù) 名: TickInit() //功 能:中斷初始化程序,對整個(gè)的系統(tǒng)的設(shè)置進(jìn)行配置。//說 明://調(diào) 用://全局變量://入口參數(shù)://出口參數(shù):無//返 回 值:無//=============================================================================void TickInit(){ //--- 定時(shí)器 0 中斷初始化,設(shè)定時(shí)間 --- //------------------------------------- //       50ms    10ms   5ms   1ms // TH0  0x4B    0xDB   0xED  0xFC // TL0  0xF9    0xFE   0xFF  0x66 //------------------------------------- TMOD |=0x11;  //=== 16bit timer === TH0  =0x3F;  //=== 50ms intterupt === TL0  =0x8F;  ET0  =1;     //=== enable timer0 ===    TR0  =0;     //=== timer0 stop  === // TR0  =1;     //=== timer0 run  === /* //--- 定時(shí)器 1 中斷初始化,進(jìn)行顯示溫度壓力時(shí)間信息 --- TH1  =0xED;  //=== 50ms intterupt === TL1  =0xFF; ET1  =1;     //=== enable timer0 === TR1  =1;     //=== timer0 run  === */ //--- 外部按鍵中斷初始化 ---  IT0   = 1;   // edge trigger    IT1   = 1;   // edge trigger  EX0   = 1;   // enable ext int, used for key input    EX1   = 1; EA   =1;     //=== all intterupt enable === //--- 電機(jī)停止轉(zhuǎn)動(dòng)程序 ---   CR = 0; //--- 關(guān)閉 PWM 輸出。--- //---- PWM固定的 高 電平輸出 ---- PCA_PWM1=0x00; //--- 1:固定低電平輸出 0:固定高輸出 --- CCAP1L = 0x00; Qiao_Low_R  =  1;       //=== 電橋中 右橋臂 下橋臂  控制信號(hào)  === Qiao_Low_L  =  1;       //=== 電橋中 右橋臂 下橋臂  控制信號(hào)  ===    //------- ADC初始化程序段 ------  InitADC();                      //Init ADC sfr     delay10ms(2);}

//=============================================================================//函 數(shù) 名: void PCA_INIT(); //---PCA計(jì)數(shù)器初始化程序 ---//功 能   : PCA計(jì)數(shù)器初始化程序//說 明   ://調(diào) 用   ://全局變量://入口參數(shù)://出口參數(shù):NO//返 回 值:NO//=============================================================================void PCA_INIT(){ //CMOD=0x02; //--- PCA在空閑模式下停止。PCA時(shí)鐘模式為fose/2.禁止PCA計(jì)數(shù)器溢出中斷。 --- CMOD=0x00; //--- PCA在空閑模式下停止。PCA時(shí)鐘模式為fose/12.禁止PCA計(jì)數(shù)器溢出中斷。 ---    CCON=0x00; //--- 禁止PCA計(jì)數(shù)器工作,清除中斷標(biāo)志、計(jì)數(shù)器溢出標(biāo)志。--- CL =0x00;  //--- 清0計(jì)數(shù)器。--- CH =0x00; //--- 設(shè)置模塊1 為8位PWM輸出模式。--- CCAPM1 =0x42;   //--- P3.5 --- PCA_PWM1=0x00; //--- 設(shè)置模塊1 為8位PWM輸出模式。--- CCAPM0 =0x42; PCA_PWM0=0x00;  PWM_set_data(); //---對不同模塊設(shè)置不同的占空比。--- //------------------- // CR=1; //--- 打開 PWM 輸出。---      CR = 0; //--- 關(guān)閉 PWM 輸出。---} //=============================================================================//函 數(shù) 名: void PWM_set_data(); //---對不同模塊設(shè)置不同的占空比。---//功 能   : 對不同模塊設(shè)置不同的占空比?//說 明   ://調(diào) 用   ://全局變量://入口參數(shù)://出口參數(shù):NO//返 回 值:NO//=============================================================================void PWM_set_data(){ CCAP1H = PWM_data_buffer1; CCAP0H = PWM_data_buffer0 ;

}

 

0
回復(fù)
lvyunzeng
LV.4
7
2015-03-13 08:02
//=============================================================================
//函 數(shù) 名: TickInit()  
//功 能:中斷初始化程序,對整個(gè)的系統(tǒng)的設(shè)置進(jìn)行配置。 
//說 明:
//調(diào) 用:
//全局變量:
//入口參數(shù):
//出口參數(shù):無
//返 回 值:無
//=============================================================================
void TickInit()
{
	//--- 定時(shí)器 0 中斷初始化,設(shè)定時(shí)間 ---
	//-------------------------------------
	//       50ms    10ms   5ms   1ms
	//	TH0  0x4B    0xDB   0xED  0xFC
	//	TL0  0xF9    0xFE   0xFF  0x66
	//-------------------------------------
	TMOD |=0x11;  //=== 16bit timer ===
	TH0  =0x3F;  //=== 50ms intterupt ===
	TL0  =0x8F;	 
	ET0  =1;     //=== enable timer0 ===
    TR0  =0;     //=== timer0 stop  ===
	// TR0  =1;     //=== timer0 run  ===
	/*
	//--- 定時(shí)器 1 中斷初始化,進(jìn)行顯示溫度壓力時(shí)間信息 ---
	TH1  =0xED;  //=== 50ms intterupt ===
	TL1  =0xFF;
	ET1  =1;     //=== enable timer0 ===
	TR1  =1;     //=== timer0 run  === 
	*/
	//--- 外部按鍵中斷初始化 ---
 	IT0	  = 1;			// edge trigger
    IT1	  = 1;			// edge trigger
 	EX0	  = 1;			// enable ext int, used for key input
    EX1	  = 1;
	EA   =1;     //=== all intterupt enable ===
	//--- 電機(jī)停止轉(zhuǎn)動(dòng)程序 ---   
	CR = 0; //--- 關(guān)閉 PWM 輸出。---
	//---- PWM固定的 高 電平輸出 ----
	PCA_PWM1=0x00; //--- 1:固定低電平輸出 0:固定高輸出 ---
	CCAP1L = 0x00;
	Qiao_Low_R  =  1;       //=== 電橋中 右橋臂 下橋臂  控制信號(hào)  === 
	Qiao_Low_L  =  1;       //=== 電橋中 右橋臂 下橋臂  控制信號(hào)  ===
    //------- ADC初始化程序段 ------
	 InitADC();                      //Init ADC sfr
     delay10ms(2);
} 

//=============================================================================
//函 數(shù) 名: void PCA_INIT(); //---PCA計(jì)數(shù)器初始化程序 --- 
//功 能   : PCA計(jì)數(shù)器初始化程序
//說 明   :
//調(diào) 用   :
//全局變量:
//入口參數(shù):
//出口參數(shù):NO
//返 回 值:NO
//=============================================================================
void PCA_INIT()
{
	//CMOD=0x02; //--- PCA在空閑模式下停止。PCA時(shí)鐘模式為fose/2.禁止PCA計(jì)數(shù)器溢出中斷。 ---
	CMOD=0x00; //--- PCA在空閑模式下停止。PCA時(shí)鐘模式為fose/12.禁止PCA計(jì)數(shù)器溢出中斷。 ---
    CCON=0x00; //--- 禁止PCA計(jì)數(shù)器工作,清除中斷標(biāo)志、計(jì)數(shù)器溢出標(biāo)志。---
	CL =0x00;  //--- 清0計(jì)數(shù)器。---
	CH =0x00; 
	//--- 設(shè)置模塊1 為8位PWM輸出模式。---
	CCAPM1 =0x42;   //--- P3.5 ---
	PCA_PWM1=0x00;
	//--- 設(shè)置模塊1 為8位PWM輸出模式。---
	CCAPM0 =0x42;
	PCA_PWM0=0x00;  
	PWM_set_data(); //---對不同模塊設(shè)置不同的占空比。---
	//-------------------
	// CR=1; //--- 打開 PWM 輸出。---
      CR = 0; //--- 關(guān)閉 PWM 輸出。---
} 
 
//=============================================================================
//函 數(shù) 名: void PWM_set_data(); //---對不同模塊設(shè)置不同的占空比。---
//功 能   : 對不同模塊設(shè)置不同的占空比?
//說 明   :
//調(diào) 用   :
//全局變量:
//入口參數(shù):
//出口參數(shù):NO
//返 回 值:NO
//=============================================================================
void PWM_set_data()
{ 
	CCAP1H = PWM_data_buffer1; 
	CCAP0H = PWM_data_buffer0 ;

}
0
回復(fù)
anndan
LV.6
8
2015-03-13 08:51
@lvyunzeng
//=============================================================================//函數(shù)名:TickInit()//功能:中斷初始化程序,對整個(gè)的系統(tǒng)的設(shè)置進(jìn)行配置。//說明://調(diào)用://全局變量://入口參數(shù)://出口參數(shù):無//返回值:無//=============================================================================voidTickInit(){//---定時(shí)器0中斷初始化,設(shè)定時(shí)間---//-------------------------------------//50ms10ms5ms1ms//TH00x4B0xDB0xED0xFC//TL00xF90xFE0xFF0x66//-------------------------------------TMOD|=0x11;//===16bittimer===TH0=0x3F;//===50msintterupt===TL0=0x8F;ET0=1;//===enabletimer0===TR0=0;//===timer0stop===//TR0=1;//===timer0run===/*//---定時(shí)器1中斷初始化,進(jìn)行顯示溫度壓力時(shí)間信息---TH1=0xED;//===50msintterupt===TL1=0xFF;ET1=1;//===enabletimer0===TR1=1;//===timer0run===*///---外部按鍵中斷初始化---IT0=1;//edgetriggerIT1=1;//edgetriggerEX0=1;//enableextint,usedforkeyinputEX1=1;EA=1;//===allintteruptenable===//---電機(jī)停止轉(zhuǎn)動(dòng)程序---CR=0;//---關(guān)閉PWM輸出。---//----PWM固定的高電平輸出----PCA_PWM1=0x00;//---1:固定低電平輸出0:固定高輸出---CCAP1L=0x00;Qiao_Low_R=1;//===電橋中右橋臂下橋臂控制信號(hào)===Qiao_Low_L=1;//===電橋中右橋臂下橋臂控制信號(hào)===//-------ADC初始化程序段------InitADC();//InitADCsfrdelay10ms(2);}//=============================================================================//函數(shù)名:voidPCA_INIT();//---PCA計(jì)數(shù)器初始化程序---//功能:PCA計(jì)數(shù)器初始化程序//說明://調(diào)用://全局變量://入口參數(shù)://出口參數(shù):NO//返回值:NO//=============================================================================voidPCA_INIT(){//CMOD=0x02;//---PCA在空閑模式下停止。PCA時(shí)鐘模式為fose/2.禁止PCA計(jì)數(shù)器溢出中斷。---CMOD=0x00;//---PCA在空閑模式下停止。PCA時(shí)鐘模式為fose/12.禁止PCA計(jì)數(shù)器溢出中斷。---CCON=0x00;//---禁止PCA計(jì)數(shù)器工作,清除中斷標(biāo)志、計(jì)數(shù)器溢出標(biāo)志。---CL=0x00;//---清0計(jì)數(shù)器。---CH=0x00;//---設(shè)置模塊1為8位PWM輸出模式。---CCAPM1=0x42;//---P3.5---PCA_PWM1=0x00;//---設(shè)置模塊1為8位PWM輸出模式。---CCAPM0=0x42;PCA_PWM0=0x00;PWM_set_data();//---對不同模塊設(shè)置不同的占空比。---//-------------------//CR=1;//---打開PWM輸出。---CR=0;//---關(guān)閉PWM輸出。---}//=============================================================================//函數(shù)名:voidPWM_set_data();//---對不同模塊設(shè)置不同的占空比。---//功能:對不同模塊設(shè)置不同的占空比?//說明://調(diào)用://全局變量://入口參數(shù)://出口參數(shù):NO//返回值:NO//=============================================================================voidPWM_set_data(){CCAP1H=PWM_data_buffer1;CCAP0H=PWM_data_buffer0;}

硬件PWM只能產(chǎn)生信號(hào)都是原邊對齊的波形,我要的是2路互補(bǔ)帶死區(qū)的PWM波形。

0
回復(fù)
2015-03-13 10:49
@anndan
硬件PWM只能產(chǎn)生信號(hào)都是原邊對齊的波形,我要的是2路互補(bǔ)帶死區(qū)的PWM波形。
那你用STC15F4K系列的芯片直接就可以了
0
回復(fù)
anndan
LV.6
10
2015-03-13 23:14
@yueyunno1
那你用STC15F4K系列的芯片直接就可以了
腳多,價(jià)格貴
0
回復(fù)
lvyunzeng
LV.4
11
2015-03-14 13:18
@anndan
腳多,價(jià)格貴

那你所有程序都在中斷中進(jìn)行,主程序中為空,或者都是標(biāo)志位。但是不穩(wěn)當(dāng)一個(gè)沒響應(yīng)過來就死掉了

0
回復(fù)
2015-03-14 16:21
@lvyunzeng
那你所有程序都在中斷中進(jìn)行,主程序中為空,或者都是標(biāo)志位。但是不穩(wěn)當(dāng)一個(gè)沒響應(yīng)過來就死掉了
用定時(shí)器去處理,完全可以實(shí)現(xiàn)。
0
回復(fù)
2015-03-14 16:24
@yueyunno1
用定時(shí)器去處理,完全可以實(shí)現(xiàn)。
建議你用硬件去實(shí)現(xiàn)死區(qū)控制,要不然你在調(diào)試的時(shí)候你的MOS管都會(huì)損壞不少。
0
回復(fù)
anndan
LV.6
14
2015-03-15 19:33
@yueyunno1
建議你用硬件去實(shí)現(xiàn)死區(qū)控制,要不然你在調(diào)試的時(shí)候你的MOS管都會(huì)損壞不少。

不行就還是用3525

0
回復(fù)
發(fā)