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

  • 回復(fù)
  • 收藏
  • 點(diǎn)贊
  • 分享
  • 發(fā)新帖
  • 論壇首頁
  • 逆變/光伏/并網(wǎng)
  • 最近用PIC16F716產(chǎn)生SPWM波,但一開機(jī)總是燒H橋。貌似是程序有錯(cuò),麻煩各位大俠幫幫忙,看下什么地方有

最近用PIC16F716產(chǎn)生SPWM波,但一開機(jī)總是燒H橋。貌似是程序有錯(cuò),麻煩各位大俠幫幫忙,看下什么地方有

最近用PIC16F716產(chǎn)生SPWM波,但一開機(jī)總是燒H橋。貌似是程序有錯(cuò),麻煩各位大俠幫幫忙,看下什么地方有

問題。

PIC16F716的PWM模塊工作在半橋模式,H橋一個(gè)橋臂是互為相反的SPWM波(該橋臂一直在做高頻切換),另一橋

臂是互為相反的50HZ方波。timer2的后分頻比是1:5,表格里有40個(gè)脈沖寬度,SPWM的周期是50US。主程序的

while循環(huán)里是做過壓和欠壓保護(hù)以及過流和短路保護(hù)的。50HZ的方波里也加入1ms死區(qū)時(shí)間(燒H橋與這個(gè)時(shí)間

太長有關(guān)嗎)。下面是程序,幫忙看看,謝謝啊~~


#include
#define LED_CTRL_PORT   RA2 ////////////////
#define SD_OUT_PORT    RB6 ////////////////

#define SD_IN_PORT    RB0
#define LEFT_UP_CTRL_PORT  RB1
#define LEFT_DOWN_CTRL_PORT  RB2
#define RIGHT_UP_CTRL_PORT  RB3
#define RIGHT_DOWN_CTRL_PORT RB5
#define HZ50_PORT_MASK   0x06 //RB1,RB2
#define SPWM_PORT_MASK   0x28  // RB5 ,RB3
#define SD_IN_PORT_MASK   0x01  // RB0
#define LED_PORT_MASK   0x04  // RA2
#define SD_OUT_PORT_MASK  0x40 //RB6 ////////////////
#define VOL_PROTECT_NUM   1000
#define CUR_PROTECT_NUM   500


#define FM_CTRL_PORT   RB4
  
__CONFIG(0xFF72);

unsigned char  LeftUpCtrlNum=0,LeftDownCtrlNum=1;
unsigned char  VoltageProtect=0,CurrentProtect=0;
unsigned int PortectNum=0;
volatile unsigned char SinNum=0;

static unsigned char SinTab[]={8,24,39,54,68,83,96,110,122,134,145,
        

155,164,172,179,185,189,193,195,197,
        

197,195,193,189,185,179,172,164,155,
        

145,134,122,110,96,83,68,54,39,24,8};

void interrupt timer1() 

 if(TMR1IF==1)
 {
  TMR1IF=0;
  TMR1H=0xEC;
  TMR1L=0x77;
  //50HZ 死區(qū)時(shí)間  start
  LeftUpCtrlNum++;
  if(LeftUpCtrlNum==9)
  {
   LEFT_UP_CTRL_PORT=0;
  }
  else if(LeftUpCtrlNum==20)
  {
   LeftUpCtrlNum=0;
   LEFT_UP_CTRL_PORT=1;
  }

  LeftDownCtrlNum++;
  if(LeftDownCtrlNum==11)
  {
   LEFT_DOWN_CTRL_PORT=1;
  }
  else if(LeftDownCtrlNum==20)
  {
   LeftDownCtrlNum=0;
   LEFT_DOWN_CTRL_PORT=0;
  }
  //50HZ 死區(qū)時(shí)間  end
  //過流或短路保護(hù)  start
  PortectNum++;
  if(CurrentProtect)
  {
   if(PortectNum==CUR_PROTECT_NUM)
   {
    PortectNum=0;
    LED_CTRL_PORT=~LED_CTRL_PORT;
    FM_CTRL_PORT=~FM_CTRL_PORT;
   }
  }
  if(VoltageProtect)
  {
   if(PortectNum==VOL_PROTECT_NUM)
   {
    PortectNum=0;
    LED_CTRL_PORT=~LED_CTRL_PORT;
    FM_CTRL_PORT=~FM_CTRL_PORT;
   }
  }
  //過流或短路保護(hù)  end

 }
 //占空比調(diào)整
 if(TMR2IF==1)
 {
  TMR2IF=0;
  SinNum++;
  if(SinNum>=40)
  {
   SinNum=0;
  }
     CCPR1L=SinTab[SinNum];
  T2CON=0x24;
 }

}
main(void)
{
 unsigned int i;
 unsigned char ADCResult;
 INTCON=0;
 TRISA=0xff;
// TRISB=0xff;

 ADCON1=0x04;
 ADCON0=0x81;

 TRISA&=~(LED_PORT_MASK);
 TRISB=SPWM_PORT_MASK | SD_IN_PORT_MASK ;

 T1CON=0x00;
 TMR1H=0xEC;
 TMR1L=0x77;
 TMR1IF=0;
 T1CON=0x01;

 PR2=0xf9;
    CCP1CON=0x8C;          //10001100;
    CCPR1L=SinTab[0];
 PWM1CON=0x19;
 TMR2IF=0; //Timer2 中斷標(biāo)志位清零
 T2CON=0x24; //0010 0100預(yù)分頻1,后分頻5,使能timer2


 PIE1=0x03;
 INTCON=0xC0;
 TRISB&=~SPWM_PORT_MASK;

 FM_CTRL_PORT=0;
 LED_CTRL_PORT=1;
 SD_OUT_PORT=0;

 LEFT_UP_CTRL_PORT=1;
 LEFT_DOWN_CTRL_PORT=0;


while(1)
{
 if(!VoltageProtect)
 {
  i=50;
 
  while(i>0)
   i--;
  ADCON0|=0x04;
  while(ADCON0&0x04);
  ADCResult=ADRES;
  //電池電壓檢測
  if(ADCResult<0x28 || ADCResult >0x42)
  {
   PortectNum=0; 
   VoltageProtect=1;
   FM_CTRL_PORT=1;
   LED_CTRL_PORT=0;
   SD_OUT_PORT=1;
   TRISB |=(SPWM_PORT_MASK|HZ50_PORT_MASK);
  }
 }
 //過流或短路保護(hù)信號(hào)檢測
 if(!VoltageProtect && !SD_IN_PORT)/////////////////////
 { 
  PortectNum=0; 
  CurrentProtect=1;

  FM_CTRL_PORT=1;
  LED_CTRL_PORT=0;
  SD_OUT_PORT=1;
  TRISB |=(SPWM_PORT_MASK|HZ50_PORT_MASK);
 }
};
}

全部回復(fù)(21)
正序查看
倒序查看
wells89
LV.1
2
2012-06-10 08:52
我把高頻橋臂的驅(qū)動(dòng)信號(hào)也改為50HZ的方波,就不會(huì)燒管子了。那是不是可以說明之前的SPWM波不對(duì),導(dǎo)致直通發(fā)生,燒了管子?
0
回復(fù)
2012-06-12 08:30
@wells89
我把高頻橋臂的驅(qū)動(dòng)信號(hào)也改為50HZ的方波,就不會(huì)燒管子了。那是不是可以說明之前的SPWM波不對(duì),導(dǎo)致直通發(fā)生,燒了管子?
脈沖周期的長度在哪里表示,燒上管還是下管,什么調(diào)制方式。
0
回復(fù)
2012-06-12 09:30

最好先不開機(jī),把驅(qū)動(dòng)波形調(diào)好,看一下驅(qū)動(dòng)波形之間的時(shí)序是否對(duì),如果對(duì),再開機(jī)如果還燒毀只能說上了強(qiáng)電有問題。現(xiàn)在不知道驅(qū)動(dòng)波形錯(cuò)誤燒毀的,還是加強(qiáng)電之后干擾所至啊

0
回復(fù)
wells89
LV.1
5
2012-06-12 20:22
@westkinger
脈沖周期的長度在哪里表示,燒上管還是下管,什么調(diào)制方式。

PR2=0xf9就表示脈沖周期是20us。我的驅(qū)動(dòng)信號(hào)是類似下面的。 

燒的是AB管

0
回復(fù)
2012-06-12 20:27

真好.會(huì)程式

0
回復(fù)
wells89
LV.1
7
2012-06-12 20:28
@afei_hefei
最好先不開機(jī),把驅(qū)動(dòng)波形調(diào)好,看一下驅(qū)動(dòng)波形之間的時(shí)序是否對(duì),如果對(duì),再開機(jī)如果還燒毀只能說上了強(qiáng)電有問題?,F(xiàn)在不知道驅(qū)動(dòng)波形錯(cuò)誤燒毀的,還是加強(qiáng)電之后干擾所至啊

A是左上方的管子,B是左下方的管子,C是右上,D是右下。開機(jī)之前,我測了AB,CD的波形是互補(bǔ)的,并都有死區(qū)時(shí)間的。怎么確定A和D之間的時(shí)序是否對(duì)啊,我用示波器的一個(gè)通道測A,一個(gè)通道測D,A是低頻的嘛,波形可以保持不動(dòng),但D的波形一直在動(dòng),怎么固定啊(呵呵 這個(gè)問題好低級(jí)哦) 

0
回復(fù)
wells89
LV.1
8
2012-06-12 20:30
@廊橋星辰
真好.會(huì)程式

就是寄存器的讀寫,只會(huì)些簡單的,復(fù)雜的就出問題了,哎

0
回復(fù)
2012-06-12 22:06
@wells89
PR2=0xf9就表示脈沖周期是20us。我的驅(qū)動(dòng)信號(hào)是類似下面的。[圖片] 燒的是AB管

A、B管是雙極性調(diào)制,C、D管卻是工頻調(diào)制,好像搞亂了。

雙極性調(diào)制應(yīng)該是是沒有工頻的。

 

如果是單極性調(diào)制方式,就是死區(qū)的問題了,無他。

 

還有一個(gè)可能是電感不夠大,導(dǎo)致電容里面的電回流到下管。

0
回復(fù)
afei_hefei
LV.5
10
2012-06-13 09:55
@wells89
A是左上方的管子,B是左下方的管子,C是右上,D是右下。開機(jī)之前,我測了AB,CD的波形是互補(bǔ)的,并都有死區(qū)時(shí)間的。怎么確定A和D之間的時(shí)序是否對(duì)啊,我用示波器的一個(gè)通道測A,一個(gè)通道測D,A是低頻的嘛,波形可以保持不動(dòng),但D的波形一直在動(dòng),怎么固定?。ê呛沁@個(gè)問題好低級(jí)哦) 

結(jié)合你以上給的圖,時(shí)序基本正確,注意的是:D管開通時(shí),是A做的SPWM,B是取反做續(xù)流的。AB之間的死區(qū)有多少?你的橋管用的什么器件,是IGBT還是MOS。輸入的高壓有多少?

0
回復(fù)
wells89
LV.1
11
2012-06-13 19:28
@afei_hefei
結(jié)合你以上給的圖,時(shí)序基本正確,注意的是:D管開通時(shí),是A做的SPWM,B是取反做續(xù)流的。AB之間的死區(qū)有多少?你的橋管用的什么器件,是IGBT還是MOS。輸入的高壓有多少?
AB死區(qū)時(shí)間是5us;用的是IRFP460,是MOSFET。高壓是375V左右。我又檢查了下電路,發(fā)現(xiàn)有個(gè)元件焊錯(cuò)了~~。我再試下,我只有晚上有時(shí)間,結(jié)果得好幾天后出來,謝謝你的持續(xù)關(guān)注啊~~。
0
回復(fù)
afei_hefei
LV.5
12
2012-06-14 09:30
@wells89
AB死區(qū)時(shí)間是5us;用的是IRFP460,是MOSFET。高壓是375V左右。我又檢查了下電路,發(fā)現(xiàn)有個(gè)元件焊錯(cuò)了~~。我再試下,我只有晚上有時(shí)間,結(jié)果得好幾天后出來,謝謝你的持續(xù)關(guān)注啊~~。

死區(qū)時(shí)間是夠了,檢查一下電路如果沒有錯(cuò)誤,可能和米勒電容有關(guān)系了。特別是燒高頻側(cè)管

0
回復(fù)
pads2005pcb
LV.7
13
2012-12-07 15:00
@wells89
就是寄存器的讀寫,只會(huì)些簡單的,復(fù)雜的就出問題了,哎

樓主,你好,我正在整SPWM程序,想跟你討論下,麻煩您加下我QQ,謝謝

QQ:2591307978

在線等您

0
回復(fù)
teckey_zuo
LV.1
14
2013-01-17 15:35

 別那么麻煩啦,有更好用的MCU,開發(fā)工具便宜,不需要燒入器都可以下載程序到Flash里邊

英飛凌 XC822 XC836  ,帶硬件乘法器和除法器,看附件的波形。

有需要支持的發(fā)站內(nèi)消息喲。

0
回復(fù)
yinxiangtuo
LV.5
15
2013-01-17 16:05
求SPWM函數(shù)……
0
回復(fù)
1179300092
LV.8
16
2013-01-20 09:29
@yinxiangtuo
求SPWM函數(shù)……
0
回復(fù)
jql393
LV.3
17
2013-02-13 23:29
@1179300092
[圖片]

我看了下樓主的程序 你的50HZ怎么控制SPWM高頻波形的?那里可以突出

你看看我這里的圖1 圖2  圖3

圖1——就是你說的那樣,可是程序里面沒看到怎么寫的,你就單單實(shí)現(xiàn)了SPWM波和50HZ如何做到同步控制的?我不明白。

圖2——就是單極性調(diào)制很成熟了,在這個(gè)程序思路上國內(nèi)很多同行都在不斷更新。

圖3——就是你現(xiàn)在的波形的大概,實(shí)現(xiàn)了SPWM波形,和50HZ,還差一步就是做到,在你50HZ一個(gè)周期里面翻轉(zhuǎn)SPWM型,那樣你就實(shí)現(xiàn)了。   

0
回復(fù)
793238981
LV.1
18
2013-02-26 21:56
@jql393
我看了下樓主的程序你的50HZ怎么控制SPWM高頻波形的?那里可以突出你看看我這里的圖1圖2 圖3圖1——就是你說的那樣,可是程序里面沒看到怎么寫的,你就單單實(shí)現(xiàn)了SPWM波和50HZ如何做到同步控制的?我不明白。圖2——就是單極性調(diào)制很成熟了,在這個(gè)程序思路上國內(nèi)很多同行都在不斷更新。圖3——就是你現(xiàn)在的波形的大概,實(shí)現(xiàn)了SPWM波形,和50HZ,還差一步就是做到,在你50HZ一個(gè)周期里面翻轉(zhuǎn)SPWM型,那樣你就實(shí)現(xiàn)了。[圖片] [圖片] [圖片] 
 我做的單極性的 為什么波形會(huì)變成這樣 好奇怪 在零點(diǎn) 幾乎是一條直線 求高手指導(dǎo)一下
0
回復(fù)
旅行車
LV.4
19
2013-04-09 14:21
芯片正在輸出SPWM波,這時(shí),中斷來了,SPWM壓棧,執(zhí)行中斷子程序,中斷執(zhí)行完畢,SPWM出棧繼續(xù)執(zhí)行,于是H橋炸了。
0
回復(fù)
jiangyan_91
LV.1
20
2013-04-13 12:27

你的成功了沒有,我也弄了一個(gè)軟件產(chǎn)生的SPWM。用的是STC單片機(jī),單片機(jī)路SPWM是正常的,但是我驅(qū)動(dòng)不了H橋。驅(qū)動(dòng)用的是IR2101, 

0
回復(fù)
2013-04-20 22:29

調(diào)試的時(shí)候先斷開上BUS+的電啊 直接看上上下管的GS波形  不斷的開關(guān)電源多次,看有沒有直通。

0
回復(fù)
lilaben
LV.2
22
2013-04-22 16:59
@jiangyan_91
你的成功了沒有,我也弄了一個(gè)軟件產(chǎn)生的SPWM。用的是STC單片機(jī),單片機(jī)路SPWM是正常的,但是我驅(qū)動(dòng)不了H橋。驅(qū)動(dòng)用的是IR2101, 
我也想用stc做一個(gè),不知道你用stc是哪個(gè)型號(hào)的?c語言還是匯編?
0
回復(fù)
發(fā)