久久久国产精品视频袁燕,99re久久精品国产,亚洲欧美日韩国产综合v,天天躁夜夜躁狠狠久久,激情五月婷婷激情五月婷婷

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

【我是工程師】調(diào)頻調(diào)壓(串口控制)+C8051F120源碼+PCB

單位的項目,要求變頻、變壓。用來驅(qū)動高壓變壓器,做絕緣測試使用。上位機軟件通過串口控制升壓過程。

廢話不多說!先上原理圖!不知道如何轉(zhuǎn)圖片,只能傳文件了。

Protel Schematic.pdf

再來兩張印版的照片吧!

正面

IMG_20150319_133852

背面

IMG_20150319_133904

焊接完畢的

IMG_20150319_134451

接下來是源碼,采用的MCU是C8051F120相中的是控制簡單(PCA模塊),速度夠快(100Mhz主頻,SPWM分辨率可以達到12位)。

/*
使用外部晶振22.1184MHz 方便串口通訊 用PLL 4.5倍頻于99.5328MHz
PCA0十六位PWM方式 中斷中將計算好的初值加0xF000賦予捕捉模塊 計數(shù)器賦初值0xF000 作為十二位PWM使用
載頻24.3kHz
M_min	= 0.?
M_max = 0.9514
*/
#include 
#include 
#include 
#include 
#include 

#define  PI         3.1415926                    // π
#define  Carrier    24300                        // 載波載頻
#define  SYSCLK     99532800L                    // 晶振頻率
#define  BAUDRATE   115200                       // 波特率
#define  value      4096                         // 載波周期計數(shù)器值

unsigned int        *point_sin;                  // 數(shù)組指針
unsigned int        frequency = 50;              // 調(diào)制波頻率
unsigned int        j;                           // 用于操作數(shù)組
unsigned int        reload;                      // PCA0重載值
unsigned int        ISR_time;                    // 中斷計數(shù)
unsigned int        finish;                      // 調(diào)制波半周期載波個數(shù)
float               M = 0.9;                     // 調(diào)制比(輸出電壓)
unsigned char data  *s,receive[15],volt[6],freq[6]; // 接收電壓、頻率字符串
unsigned int xdata  sin_list[4095];					 // 用于存放計算好的計數(shù)器初值

bit                 Isr_flag;                    // 發(fā)生重載標志
bit                 Fun_flag;                    // 調(diào)制波半周期到標志
bit                 String_flag;                 // 串口接收到新參數(shù)標志 
sbit                funwave  = P0^3;             // 基波
sbit                btlamp   = P0^5;             // 呼吸燈

void OSCILLATOR_Init (void);
void PORT_Init (void);
void PCA0_Init (void);
void CALCULATE (void);
void UART1_Init (void);
void Timer2_Init(void);

void main()
{
   WDTCN = 0xde;
   WDTCN = 0xad;
   OSCILLATOR_Init ();
   PORT_Init ();
   CALCULATE ();
   reload = sin_list[0];
   PCA0_Init ();
   UART1_Init ();
	Timer2_Init();
   EA = 1;
   CR = 1;
   while(1)
   {
   if(String_flag)
      {
      String_flag  = 0;
      s = strtok(receive,"@");
      strcpy(volt,s);
      s = strtok(NULL,"@");
      strcpy(freq,s);
      memset(receive,0,15);
      M = atof(volt);
      frequency = atoi(freq);
      CALCULATE ();
      }
   if(Isr_flag)
      {
      Isr_flag = 0;
      j++;
      if(j < finish)
         reload = sin_list[j];
      else
         {
         j = 0;
         reload = sin_list[j];
         }
      }
   if(Fun_flag)
      {
      Fun_flag = 0;
      funwave  = ~funwave;
      }
   }
}

void CALCULATE (void)                           // 實時計算各交點sin值 裝入數(shù)組
{
   unsigned int        i;
   static unsigned int median,surplus;
   finish = (Carrier/frequency) >> 1;
   point_sin = &sin_list[0];
   median = value * sin(PI * (finish * 2 - 1)/(finish * 2)) * M;
   surplus = (value - median) >> 1;
   for(i=1; i<2 * finish; i+=2)
      {
      median = value * sin(PI * i / finish / 2) * M;
      if(median > 4066) median = 4066;
      *point_sin = surplus + 0xF000 + (value - median) / 2;
      surplus = (value - median) >> 1;
      point_sin++;
      }
}

void OSCILLATOR_Init (void)                     // 使用外部晶振22.1184MHz 4.5倍頻 鎖定在99.5328MHz
{
   unsigned int        i;
   char SFRPAGE_SAVE = SFRPAGE;
   SFRPAGE  = CONFIG_PAGE;
   OSCICN   = 0x80;
   CLKSEL   = 0x00;
   OSCXCN   = 0x67;
   for (i=0; i < 256; i++);
   while (!(OSCXCN & 0x80));
   SFRPAGE  = LEGACY_PAGE;
   FLSCL   |=  0x30;
   if(SYSCLK <= 25000000)
	   FLSCL &= ~0x30;
	else if(SYSCLK <= 50000000)
	   FLSCL &= ~0x20;
	else if(SYSCLK <= 75000000)
	   FLSCL &= ~0x10;
	else
	   FLSCL &= ~0x00;
	SFRPAGE  = PLL0_PAGE;
   PLL0CN   = 0x04;
   PLL0CN  |= 0x01;
   PLL0DIV  = 0x02;
   PLL0FLT &= ~0x0f;
   PLL0FLT |=  0x07;
   PLL0FLT &= ~0x30;
   PLL0FLT |=  0x00;
   PLL0MUL  = 0x09;
   for (i = 0; i < 256; i++) ;
   PLL0CN  |= 0x02;
   while (PLL0CN & 0x10 == 0x00);
   SFRPAGE  = CONFIG_PAGE;
   CLKSEL   = 0x02;
   SFRPAGE  = SFRPAGE_SAVE;
}

void PORT_Init (void)
{
   char SFRPAGE_save = SFRPAGE;
   SFRPAGE  = CONFIG_PAGE;
   XBR0     = 0x08;
   XBR1     = 0x00;
   XBR2     = 0x44;
   P0MDOUT |= 0xFF;
   SFRPAGE  = SFRPAGE_save;
}

void PCA0_Init (void)
{
   char SFRPAGE_save = SFRPAGE;
   SFRPAGE  = PCA0_PAGE;
   PCA0CN   = 0x00;
   PCA0MD   = 0x09;
   PCA0CPM0 = 0xC2;
   PCA0H    = 0xF0;
   PCA0CPL0 = (reload & 0x00FF);
   PCA0CPH0 = (reload & 0xFF00)>>8;
   SFRPAGE  = CONFIG_PAGE;
   EIE1    |= 0x08;
   EIP1    |= 0x08;
   SFRPAGE  = SFRPAGE_save;
}

void UART1_Init (void)
{
   char SFRPAGE_SAVE = SFRPAGE;
   SFRPAGE = UART1_PAGE;
   SCON1   = 0x10;
   SFRPAGE = TIMER01_PAGE;
   TMOD   &= ~0xF0;
   TMOD   |=  0x20;
   if(SYSCLK/BAUDRATE/2/256 < 1)
	   {
      TH1 = -(SYSCLK/BAUDRATE/2);
      CKCON |= 0x10;
		}
	else if (SYSCLK/BAUDRATE/2/256 < 4)
	   {
      TH1 = -(SYSCLK/BAUDRATE/2/4);
      CKCON &= ~0x13;
      CKCON |=  0x01;
		}
	else if (SYSCLK/BAUDRATE/2/256 < 12)
	   {
      TH1 = -(SYSCLK/BAUDRATE/2/12);
      CKCON &= ~0x13;
		}
	else
	   {
      TH1 = -(SYSCLK/BAUDRATE/2/48);
      CKCON &= ~0x13;
      CKCON |=  0x02;
      }
   TL1 = TH1;
   TR1 = 1;
   EIE2      = 0x40;				   // 允許中斷
   SFRPAGE = SFRPAGE_SAVE;
}

void Timer2_Init(void)
{
   char SFRPAGE_SAVE = SFRPAGE;
   SFRPAGE = TMR2_PAGE;
   TMR2CN = 0x04;                      // 自動重裝模式并啟動
   ET2 = 1;                            // 中斷使能
   SFRPAGE = SFRPAGE_SAVE;
}

void Timer2_ISR (void) interrupt 5
{
   static unsigned char i;
	TF2 = 0;
   if(i < 63)
      i++;
   else
	   {
		btlamp = ~btlamp;
		i = 0;
		}   
}

void PCA0_ISR (void) interrupt 9
{
   CF       = 0;
   PCA0H    = 0xF0;
   PCA0CPL0 = (reload & 0x00FF);
   PCA0CPH0 = (reload & 0xFF00)>>8;
   if(!j)
   Fun_flag = 1;
   Isr_flag = 1;
}

void UART1_Interrupt (void) interrupt 20
{
   static char i;
   if(RI0)
      {
      RI0 = 0;
      if(SBUF0 == '!')
         {
         i = 0;
         String_flag = 1;
		   }
      else
         {
         receive[i] = SBUF0;
         i++;
         }
      }
   if(TI0)	TI0 = 0;
}

通訊格式為A(浮點數(shù))+@(固定)+B(整數(shù))+?。ü潭ǎ?

例如:0.9@50!   表示輸出調(diào)制比為0.9(如果母線電壓為310V輸出大概為200V)輸出頻率為50Hz

波形待續(xù)……(主要還是想看看熱度

繼續(xù)中……

這是串口助手,大家應(yīng)該不陌生。

IMG_20150320_114608

0.1@50!

IMG_20150320_114813

0.3@50!

IMG_20150320_114828

0.5@50!

IMG_20150320_114843

0.9@50!

IMG_20150320_114905

0.9@10!

IMG_20150320_114958

0.9@20!

IMG_20150320_115008

0.9@300!

IMG_20150320_115026

以上波形測得條件為:其中一路SPWM輸出,串接5.1K電阻、104電容到地

下面是PCB文件,及簡圖。

新建 WinRAR 壓縮文件.rar

未命名

待橋電路搭建完成后,再繼續(xù)上完整的正弦波形圖。

(未完待續(xù)…………)

全部回復(fù)(43)
正序查看
倒序查看
brsys
LV.7
2
2015-03-19 14:41

看來我的這個問題你也應(yīng)該碰到過。

就是負載變小或全橋的母線電壓升高,波形會變成這樣的。

怎么樣能解決?

現(xiàn)在是L取4MH,負載R取150歐。C取1UF。

 

0
回復(fù)
ker304
LV.4
3
2015-03-19 16:23
@brsys
看來我的這個問題你也應(yīng)該碰到過。就是負載變小或全橋的母線電壓升高,波形會變成這樣的。怎么樣能解決?現(xiàn)在是L取4MH,負載R取150歐。C取1UF。[圖片] 

我感覺應(yīng)該是波形的序列不對,因為你的雜波是出現(xiàn)在最高的占空比之后,所以做此判斷。原因可能是MCU進入中斷后耗時過長,待重新裝載后,PCA計數(shù)器已經(jīng)跑在重載值之后。所以要等一個周期之后,才會比較成功,再次進入中斷。

這個問題,我的確遇到過。我的解決辦法是。用該款MCU特有的16位PWM方式,

該方式在比較寄存器存入一個數(shù)值,不斷和PCA計數(shù)器比較,如果小于,則輸出低電平,如果大于等于。則輸出高電平。

每個周期只進入一次中斷(溢出后),然后裝入下一個周期值。這樣的話,只要我的中斷時間小于一個PWM周期。波形就不會亂。

不知道我說的夠明白不!

0
回復(fù)
brsys
LV.7
4
2015-03-19 17:25
@ker304
我感覺應(yīng)該是波形的序列不對,因為你的雜波是出現(xiàn)在最高的占空比之后,所以做此判斷。原因可能是MCU進入中斷后耗時過長,待重新裝載后,PCA計數(shù)器已經(jīng)跑在重載值之后。所以要等一個周期之后,才會比較成功,再次進入中斷。這個問題,我的確遇到過。我的解決辦法是。用該款MCU特有的16位PWM方式,該方式在比較寄存器存入一個數(shù)值,不斷和PCA計數(shù)器比較,如果小于,則輸出低電平,如果大于等于。則輸出高電平。每個周期只進入一次中斷(溢出后),然后裝入下一個周期值。這樣的話,只要我的中斷時間小于一個PWM周期。波形就不會亂。不知道我說的夠明白不!
"..., 這個問題,我的確遇到過。我的解決辦法是。用該款MCU特有的16位PWM方式,

該方式在比較寄存器存入一個數(shù)值,不斷和PCA計數(shù)器比較,如果小于,則輸出低電平,如果大于等于。則輸出高電平。...."

 

======================================================

這輸出的高電平低電平,就是輸出的要去推動的PWM信號是嗎?并且只要改變這個存入的數(shù)值就會改變占空比,是這個意思嗎?

 

--------------------------------------

我碰到的問題是在加大橋電壓時,波形不對了,在22V還是好好的,加大到23V時,就相差1V左右,波形變成這樣了。

怎么樣的解釋才能說得通:橋電壓相差1V左右,波形變差了?

我的芯片5V,驅(qū)動15V,橋電壓20V左右,由三組電源分別加上,只不過COM是連在一起的。

如果是由于電壓升高造芯片電壓升高,顯然是不可能。

如果是由于延遲關(guān)系造成這個數(shù)值沒有在必要時修改而造成的輸出波形變差的話,相差1V就會造那么大變化?在22V為什么無任何異常?

這才22V左右,要加到220V那還了得啊。

我想我的問題會不會是其它原因。

0
回復(fù)
2015-03-19 17:51
項目直播貼啊,贊,坐等后文!
0
回復(fù)
ker304
LV.4
6
2015-03-19 21:54
@brsys
"...,這個問題,我的確遇到過。我的解決辦法是。用該款MCU特有的16位PWM方式,該方式在比較寄存器存入一個數(shù)值,不斷和PCA計數(shù)器比較,如果小于,則輸出低電平,如果大于等于。則輸出高電平。...." ======================================================這輸出的高電平低電平,就是輸出的要去推動的PWM信號是嗎?并且只要改變這個存入的數(shù)值就會改變占空比,是這個意思嗎? --------------------------------------我碰到的問題是在加大橋電壓時,波形不對了,在22V還是好好的,加大到23V時,就相差1V左右,波形變成這樣了。怎么樣的解釋才能說得通:橋電壓相差1V左右,波形變差了?我的芯片5V,驅(qū)動15V,橋電壓20V左右,由三組電源分別加上,只不過COM是連在一起的。如果是由于電壓升高造芯片電壓升高,顯然是不可能。如果是由于延遲關(guān)系造成這個數(shù)值沒有在必要時修改而造成的輸出波形變差的話,相差1V就會造那么大變化?在22V為什么無任何異常?這才22V左右,要加到220V那還了得啊。我想我的問題會不會是其它原因。

呵呵!這也正是我要強調(diào)的問題,這樣說吧,輸出增加1V靠的是什么呢?絕不是升高母線電壓對吧!我們目前采用的是增加每個PWM調(diào)制波的占空比這個應(yīng)該很好理解是吧,也就是說,假如我們的調(diào)制波半周期當中含有3個基波,我們只要相應(yīng)的按照正弦規(guī)律去增加這三個基波的占空比。注意,是占空比。而且是增加。既然是增加。那么“占”一定是趨近于整個PWM周期(時間越來越長),“空”相對于PWM周期來說一定是越來越小(時間越來越短)。這樣說沒錯吧!

問題就在這里,處理器的速度不可能是無限高的。也就是說處理器要完成一系列的操作,需要時間。如果在處理“事件”的時候,又有“觸發(fā)”條件生成。該“觸發(fā)”有可能被忽略,或是“淹沒”

或者這樣說,如果高低電平都需要處理器參與控制的話,最理想的辦法是采用中斷(難道你想要用查詢?呵呵)。既然是中斷,肯定會有出棧入桟吧,也就是匯編的“PUSH”“POP”還有一系列的動作吧,比如說端口置位復(fù)位等,甚至還有計算。這需要時間……。假如正在你(MCU)處理這些事情的時候,另一個觸發(fā)條件生成了。這時候就杯具了,你是響應(yīng)還是不響應(yīng)呢。

所以我說,你的波形問題可能出在你的輸出占空比最大的時候。這時候你的“空”時間很短,需要你輸出高電平的時候,你的程序還在中斷函數(shù)當中,沒有返回。所以,這次中斷請求就被忽略了。只有等下一次計數(shù)器輪回了,而程序也返回了,才會繼續(xù)響應(yīng)。才會出現(xiàn)占空比升高的時候,出現(xiàn)不正常的波形。

而且我猜,你的一定是反向驅(qū)動,也就是說,你的MCU輸出低電平時,開關(guān)管導(dǎo)通。

0
回復(fù)
ker304
LV.4
7
2015-03-19 22:17
@ker304
呵呵!這也正是我要強調(diào)的問題,這樣說吧,輸出增加1V靠的是什么呢?絕不是升高母線電壓對吧!我們目前采用的是增加每個PWM調(diào)制波的占空比這個應(yīng)該很好理解是吧,也就是說,假如我們的調(diào)制波半周期當中含有3個基波,我們只要相應(yīng)的按照正弦規(guī)律去增加這三個基波的占空比。注意,是占空比。而且是增加。既然是增加。那么“占”一定是趨近于整個PWM周期(時間越來越長),“空”相對于PWM周期來說一定是越來越小(時間越來越短)。這樣說沒錯吧!問題就在這里,處理器的速度不可能是無限高的。也就是說處理器要完成一系列的操作,需要時間。如果在處理“事件”的時候,又有“觸發(fā)”條件生成。該“觸發(fā)”有可能被忽略,或是“淹沒”或者這樣說,如果高低電平都需要處理器參與控制的話,最理想的辦法是采用中斷(難道你想要用查詢?呵呵)。既然是中斷,肯定會有出棧入桟吧,也就是匯編的“PUSH”“POP”還有一系列的動作吧,比如說端口置位復(fù)位等,甚至還有計算。這需要時間……。假如正在你(MCU)處理這些事情的時候,另一個觸發(fā)條件生成了。這時候就杯具了,你是響應(yīng)還是不響應(yīng)呢。所以我說,你的波形問題可能出在你的輸出占空比最大的時候。這時候你的“空”時間很短,需要你輸出高電平的時候,你的程序還在中斷函數(shù)當中,沒有返回。所以,這次中斷請求就被忽略了。只有等下一次計數(shù)器輪回了,而程序也返回了,才會繼續(xù)響應(yīng)。才會出現(xiàn)占空比升高的時候,出現(xiàn)不正常的波形。而且我猜,你的一定是反向驅(qū)動,也就是說,你的MCU輸出低電平時,開關(guān)管導(dǎo)通。

不好意思,啰嗦了一大堆,剛才回頭看你的問題才發(fā)現(xiàn),你的問題似乎不是軟件的問題,希望不會誤導(dǎo)你才好。

你說的問題,有可能是出在“只不過COM是連在一起的”,呵呵 既然用了三組電源,肯定是想起到隔離的作用是吧?因為同一時刻,全橋各開關(guān)管的“S”極電位是不同的,共有三種電位,所以需要三組隔離電源供電。

我猜,之所以22V沒事兒,是因為22-15=7V,可能不到MOS管的開通電壓,所以影響不大,可一旦上到23V,G-S壓差就達到了8V,開關(guān)管就可能誤導(dǎo)通。從而導(dǎo)致時序紊亂。你把三組電源分開來試一下吧?;蛘呱蠄D,求教高手幫你解決。

0
回復(fù)
brsys
LV.7
8
2015-03-20 08:50
@ker304
不好意思,啰嗦了一大堆,剛才回頭看你的問題才發(fā)現(xiàn),你的問題似乎不是軟件的問題,希望不會誤導(dǎo)你才好。你說的問題,有可能是出在“只不過COM是連在一起的”,呵呵既然用了三組電源,肯定是想起到隔離的作用是吧?因為同一時刻,全橋各開關(guān)管的“S”極電位是不同的,共有三種電位,所以需要三組隔離電源供電。我猜,之所以22V沒事兒,是因為22-15=7V,可能不到MOS管的開通電壓,所以影響不大,可一旦上到23V,G-S壓差就達到了8V,開關(guān)管就可能誤導(dǎo)通。從而導(dǎo)致時序紊亂。你把三組電源分開來試一下吧。或者上圖,求教高手幫你解決。

不錯,樓主對自已的貼非常的熱心啊。

你想法:運行中斷回調(diào)函數(shù)(或匯編里的一小段連續(xù)的棧區(qū))所用時間大于中斷到來的間隔時間,這個想法很對的有些時候是會碰到的。

我也一直想這個問題,雖然我現(xiàn)在還沒有去繼續(xù)開工調(diào)試,但是呢,現(xiàn)在確信問題應(yīng)該在橋電路或LCR部分。

你項目的下文繼續(xù)啊,很多人等著呢。

0
回復(fù)
2015-03-20 10:23
帖子不錯哦,推薦到帖子底部經(jīng)典圖庫。更多請點擊:http://www.15119.cn/bbs/classic/
0
回復(fù)
tianyao9393
LV.5
10
2015-03-20 13:13
@brsys
不錯,樓主對自已的貼非常的熱心啊。你想法:運行中斷回調(diào)函數(shù)(或匯編里的一小段連續(xù)的棧區(qū))所用時間大于中斷到來的間隔時間,這個想法很對的有些時候是會碰到的。我也一直想這個問題,雖然我現(xiàn)在還沒有去繼續(xù)開工調(diào)試,但是呢,現(xiàn)在確信問題應(yīng)該在橋電路或LCR部分。你項目的下文繼續(xù)啊,很多人等著呢。
有點意思,坐等更新
0
回復(fù)
ducheng
LV.1
11
2015-03-21 08:18
@tianyao9393
有點意思,坐等更新
**此帖已被管理員刪除**
0
回復(fù)
ducheng
LV.1
12
2015-03-21 08:19
@brsys
不錯,樓主對自已的貼非常的熱心啊。你想法:運行中斷回調(diào)函數(shù)(或匯編里的一小段連續(xù)的棧區(qū))所用時間大于中斷到來的間隔時間,這個想法很對的有些時候是會碰到的。我也一直想這個問題,雖然我現(xiàn)在還沒有去繼續(xù)開工調(diào)試,但是呢,現(xiàn)在確信問題應(yīng)該在橋電路或LCR部分。你項目的下文繼續(xù)啊,很多人等著呢。
**此帖已被管理員刪除**
0
回復(fù)
ducheng
LV.1
13
2015-03-21 08:19
@brsys
不錯,樓主對自已的貼非常的熱心啊。你想法:運行中斷回調(diào)函數(shù)(或匯編里的一小段連續(xù)的棧區(qū))所用時間大于中斷到來的間隔時間,這個想法很對的有些時候是會碰到的。我也一直想這個問題,雖然我現(xiàn)在還沒有去繼續(xù)開工調(diào)試,但是呢,現(xiàn)在確信問題應(yīng)該在橋電路或LCR部分。你項目的下文繼續(xù)啊,很多人等著呢。
**此帖已被管理員刪除**
0
回復(fù)
ducheng
LV.1
14
2015-03-21 08:19
@brsys
不錯,樓主對自已的貼非常的熱心啊。你想法:運行中斷回調(diào)函數(shù)(或匯編里的一小段連續(xù)的棧區(qū))所用時間大于中斷到來的間隔時間,這個想法很對的有些時候是會碰到的。我也一直想這個問題,雖然我現(xiàn)在還沒有去繼續(xù)開工調(diào)試,但是呢,現(xiàn)在確信問題應(yīng)該在橋電路或LCR部分。你項目的下文繼續(xù)啊,很多人等著呢。
**此帖已被管理員刪除**
0
回復(fù)
ducheng
LV.1
15
2015-03-21 08:19
@ker304
不好意思,啰嗦了一大堆,剛才回頭看你的問題才發(fā)現(xiàn),你的問題似乎不是軟件的問題,希望不會誤導(dǎo)你才好。你說的問題,有可能是出在“只不過COM是連在一起的”,呵呵既然用了三組電源,肯定是想起到隔離的作用是吧?因為同一時刻,全橋各開關(guān)管的“S”極電位是不同的,共有三種電位,所以需要三組隔離電源供電。我猜,之所以22V沒事兒,是因為22-15=7V,可能不到MOS管的開通電壓,所以影響不大,可一旦上到23V,G-S壓差就達到了8V,開關(guān)管就可能誤導(dǎo)通。從而導(dǎo)致時序紊亂。你把三組電源分開來試一下吧?;蛘呱蠄D,求教高手幫你解決。
**此帖已被管理員刪除**
0
回復(fù)
ducheng
LV.1
16
2015-03-21 08:19
@brsys
"...,這個問題,我的確遇到過。我的解決辦法是。用該款MCU特有的16位PWM方式,該方式在比較寄存器存入一個數(shù)值,不斷和PCA計數(shù)器比較,如果小于,則輸出低電平,如果大于等于。則輸出高電平。...." ======================================================這輸出的高電平低電平,就是輸出的要去推動的PWM信號是嗎?并且只要改變這個存入的數(shù)值就會改變占空比,是這個意思嗎? --------------------------------------我碰到的問題是在加大橋電壓時,波形不對了,在22V還是好好的,加大到23V時,就相差1V左右,波形變成這樣了。怎么樣的解釋才能說得通:橋電壓相差1V左右,波形變差了?我的芯片5V,驅(qū)動15V,橋電壓20V左右,由三組電源分別加上,只不過COM是連在一起的。如果是由于電壓升高造芯片電壓升高,顯然是不可能。如果是由于延遲關(guān)系造成這個數(shù)值沒有在必要時修改而造成的輸出波形變差的話,相差1V就會造那么大變化?在22V為什么無任何異常?這才22V左右,要加到220V那還了得啊。我想我的問題會不會是其它原因。
**此帖已被管理員刪除**
0
回復(fù)
ducheng
LV.1
17
2015-03-21 08:20
@ker304
呵呵!這也正是我要強調(diào)的問題,這樣說吧,輸出增加1V靠的是什么呢?絕不是升高母線電壓對吧!我們目前采用的是增加每個PWM調(diào)制波的占空比這個應(yīng)該很好理解是吧,也就是說,假如我們的調(diào)制波半周期當中含有3個基波,我們只要相應(yīng)的按照正弦規(guī)律去增加這三個基波的占空比。注意,是占空比。而且是增加。既然是增加。那么“占”一定是趨近于整個PWM周期(時間越來越長),“空”相對于PWM周期來說一定是越來越?。〞r間越來越短)。這樣說沒錯吧!問題就在這里,處理器的速度不可能是無限高的。也就是說處理器要完成一系列的操作,需要時間。如果在處理“事件”的時候,又有“觸發(fā)”條件生成。該“觸發(fā)”有可能被忽略,或是“淹沒”或者這樣說,如果高低電平都需要處理器參與控制的話,最理想的辦法是采用中斷(難道你想要用查詢?呵呵)。既然是中斷,肯定會有出棧入桟吧,也就是匯編的“PUSH”“POP”還有一系列的動作吧,比如說端口置位復(fù)位等,甚至還有計算。這需要時間……。假如正在你(MCU)處理這些事情的時候,另一個觸發(fā)條件生成了。這時候就杯具了,你是響應(yīng)還是不響應(yīng)呢。所以我說,你的波形問題可能出在你的輸出占空比最大的時候。這時候你的“空”時間很短,需要你輸出高電平的時候,你的程序還在中斷函數(shù)當中,沒有返回。所以,這次中斷請求就被忽略了。只有等下一次計數(shù)器輪回了,而程序也返回了,才會繼續(xù)響應(yīng)。才會出現(xiàn)占空比升高的時候,出現(xiàn)不正常的波形。而且我猜,你的一定是反向驅(qū)動,也就是說,你的MCU輸出低電平時,開關(guān)管導(dǎo)通。
**此帖已被管理員刪除**
0
回復(fù)
ducheng
LV.1
18
2015-03-21 08:20
**此帖已被管理員刪除**
0
回復(fù)
ker304
LV.4
19
2015-03-21 19:10
@ducheng
**此帖已被管理員刪除**
我對你的惡意廣告表示不滿!
0
回復(fù)
ker304
LV.4
20
2015-03-21 19:10
@ducheng
**此帖已被管理員刪除**
我對你的惡意廣告表示不滿!
0
回復(fù)
ker304
LV.4
21
2015-03-21 19:10
@ducheng
**此帖已被管理員刪除**
我對你的惡意廣告表示不滿!
0
回復(fù)
ker304
LV.4
22
2015-03-21 19:10
@ducheng
**此帖已被管理員刪除**
我對你的惡意廣告表示不滿!
0
回復(fù)
ker304
LV.4
23
2015-03-21 19:10
@ducheng
**此帖已被管理員刪除**
我對你的惡意廣告表示不滿!
0
回復(fù)
ker304
LV.4
24
2015-03-21 19:10
@ducheng
**此帖已被管理員刪除**
我對你的惡意廣告表示不滿!
0
回復(fù)
ker304
LV.4
25
2015-03-21 19:11
@ducheng
**此帖已被管理員刪除**
我對你的惡意廣告表示不滿!
0
回復(fù)
ker304
LV.4
26
2015-03-21 19:11
@ducheng
**此帖已被管理員刪除**
我對你的惡意廣告表示不滿!
0
回復(fù)
2015-03-23 10:11
@ker304
我對你的惡意廣告表示不滿!

刷廣告的已經(jīng)屏蔽了??!討厭!

ker304繼續(xù)~

0
回復(fù)
2015-03-23 10:12
軟硬結(jié)合的項目直播貼,贊~!上頭條!
0
回復(fù)
ker304
LV.4
29
2015-03-23 10:43
@電源網(wǎng)-娜娜姐
軟硬結(jié)合的項目直播貼,贊~!上頭條!

謝謝‘娜娜姐’

周六周日休息,這兩天把橋電路搭出來。很快就會上圖的,大家別著急。

0
回復(fù)
2015-03-24 09:12
@ker304
謝謝‘娜娜姐’[圖片]周六周日休息,這兩天把橋電路搭出來。很快就會上圖的,大家別著急。
期待啦!~
0
回復(fù)
2015-03-27 16:56

看你波形只有正半周median=value*sin(PI*(finish*2-1)/(finish*2))*M,

沒有負半周median2=value-median=value*(1-sin(PI*(finish*2-1)/(finish*2)))*M

,是單極性的

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