性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

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

STC輸出PWM,波形抖動怎么解決

QQ圖片20150205222713

 

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

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

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

STC單片機有內部PWM生成器,十分好用,不占用CPU的資源。馮諾依曼結構的MCU就是這個問題。以下是初始化,PWM初始化,PWM設置程序段

 

//=============================================================================//函 數 名: TickInit() //功 能:中斷初始化程序,對整個的系統(tǒng)的設置進行配置。//說 明://調 用://全局變量://入口參數://出口參數:無//返 回 值:無//=============================================================================void TickInit(){ //--- 定時器 0 中斷初始化,設定時間 --- //------------------------------------- //       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  === /* //--- 定時器 1 中斷初始化,進行顯示溫度壓力時間信息 --- 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 === //--- 電機停止轉動程序 ---   CR = 0; //--- 關閉 PWM 輸出。--- //---- PWM固定的 高 電平輸出 ---- PCA_PWM1=0x00; //--- 1:固定低電平輸出 0:固定高輸出 --- CCAP1L = 0x00; Qiao_Low_R  =  1;       //=== 電橋中 右橋臂 下橋臂  控制信號  === Qiao_Low_L  =  1;       //=== 電橋中 右橋臂 下橋臂  控制信號  ===    //------- ADC初始化程序段 ------  InitADC();                      //Init ADC sfr     delay10ms(2);}

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

}

 

0
回復
lvyunzeng
LV.4
7
2015-03-13 08:02
//=============================================================================
//函 數 名: TickInit()  
//功 能:中斷初始化程序,對整個的系統(tǒng)的設置進行配置。 
//說 明:
//調 用:
//全局變量:
//入口參數:
//出口參數:無
//返 回 值:無
//=============================================================================
void TickInit()
{
	//--- 定時器 0 中斷初始化,設定時間 ---
	//-------------------------------------
	//       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  ===
	/*
	//--- 定時器 1 中斷初始化,進行顯示溫度壓力時間信息 ---
	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 ===
	//--- 電機停止轉動程序 ---   
	CR = 0; //--- 關閉 PWM 輸出。---
	//---- PWM固定的 高 電平輸出 ----
	PCA_PWM1=0x00; //--- 1:固定低電平輸出 0:固定高輸出 ---
	CCAP1L = 0x00;
	Qiao_Low_R  =  1;       //=== 電橋中 右橋臂 下橋臂  控制信號  === 
	Qiao_Low_L  =  1;       //=== 電橋中 右橋臂 下橋臂  控制信號  ===
    //------- ADC初始化程序段 ------
	 InitADC();                      //Init ADC sfr
     delay10ms(2);
} 

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

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

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

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

那你所有程序都在中斷中進行,主程序中為空,或者都是標志位。但是不穩(wěn)當一個沒響應過來就死掉了

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

不行就還是用3525

0
回復
發(fā)