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

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

單片機(jī)做逆變器過(guò)零點(diǎn)波形不對(duì),求幫助

單片機(jī)用的是PIC16F1936,外接20M晶振。程序如下:

#include

__CONFIG (FOSC_HS&WDTE_OFF&PWRTE_OFF&MCLRE_ON&CP_OFF&BOREN_ON&CLKOUTEN_OFF&WRT_OFF&          PLLEN_OFF&LVP_OFF&BORV_25);

#define uchar unsigned char

#define uint unsigned int

const uchar sin_table[100]={16 , 31 ,47 ,62 ,77 ,92 ,106 ,120 ,134 ,147,159 ,171 ,182 ,193 ,202 ,211 ,219 ,226 ,232 ,238,242 ,246 ,248 ,250 ,250 ,250 ,248 ,246 ,242 ,238,232 ,226 ,219 ,211 ,202 ,193 ,182 ,171 ,159 ,147,134 ,120 ,106 ,92 ,77 ,62 ,47 ,31 ,16 ,0,16 , 31 ,47 ,62 ,77 ,92 ,106 ,120 ,134 ,147,159 ,171 ,182 ,193 ,202 ,211 ,219 ,226 ,232 ,238,242 ,246 ,248 ,250 ,250 ,250 ,248 ,246 ,242 ,238,232 ,226 ,219 ,211 ,202 ,193 ,182 ,171 ,159 ,147,134 ,120 ,106 ,92 ,77 ,62 ,47 ,31 ,16 ,0};

uchar num_INT;

Init_IO();

Init_Timer2_clk();

Init_CCP1();/

*The main function of Sine wave inverter*/

void main()

{num_INT=0;

Init_IO();

Init_Timer2_clk();

Init_CCP1();

TMR2ON=1;

TRISB=0xC3;

while(1);}

Init_Timer2_clk()

{TMR2IF=0; //清定時(shí)器2中斷標(biāo)志

TMR2IE=1; //定時(shí)器2中斷使能位

PEIE=1; //外設(shè)中斷使能

GIE=0; //全局中斷禁止

T2CON=0x18; //預(yù)分頻比為0,后分頻比為2

PR2=0xF9; //周期寄存器設(shè)置 249

TMR2=0x00;GIE=1;}

Init_IO()

{P2BSEL=1; //確定P2B位于RC0

CCP2SEL=1; //確定P2A位于RC1

ANSELB=0X03;

TRISB=0x03;}

Init_CCP1() //增強(qiáng)型PWM初始化設(shè)置

{CCP2CON=0x8c; //設(shè)置增強(qiáng)型PWM工作于半橋模式;PWM設(shè)置為高電平有效

CCPTMRS0=0xF3; //設(shè)置PWM模式下CCP2以Timer2作為定時(shí)器

PWM2CON=0X05; //死區(qū)設(shè)置為1us

STR2D=0;

STR2C=0;

STR2B=1;

STR2A=1;

CCPR2L=0;}

void interrupt TMR2INT()

{

    if(TMR2IE&TMR2IF)

    {

        TMR2IF=0;

        num_INT++;

            if(num_INT<=50)

                CCPR2L=sin_table[num_INT-1];

            else

                CCPR2L=250-sin_table[num_INT-1];

            if(num_INT==51)

                {

                    RB4=0;

                    NOP();NOP();NOP();NOP();

                    RB2=1;

                }

            if(num_INT==1)

                {

                    RB2=0;

                    NOP();NOP();NOP();NOP();

                    RB4=1;

                }

            if(num_INT==100)

                    num_INT=0;

    }

}

用以上程序進(jìn)行單片機(jī)調(diào)試發(fā)現(xiàn)輸出波形在過(guò)零點(diǎn)有問(wèn)題

tek00001

過(guò)零點(diǎn)的驅(qū)動(dòng)波形如下

tek00000

用的是后分頻為2的中斷響應(yīng),不知道為什么工頻變換比高頻變換早不到一個(gè)周期,希望在此能得到師傅們的指點(diǎn),不勝感激

全部回復(fù)(13)
正序查看
倒序查看
2014-05-21 15:10
替樓主頂一帖,希望得到老師們的幫助,謝謝!
0
回復(fù)
2014-05-21 16:04

分明是工頻臂超前了一個(gè)周期呀,看看是不是定時(shí)器使用了影子寄存器的自動(dòng)重裝載,用這個(gè)功能可以避免定時(shí)器中斷程序設(shè)置過(guò)程對(duì)極小脈寬的影響,看你的波形應(yīng)該是用了,那么pwm實(shí)際輸出滯后于中斷一個(gè)周期

工頻臂要在電感電流為0時(shí)進(jìn)行切換,這個(gè)具體的時(shí)序需要配合輸出的lc參數(shù)來(lái)決定是超前還是滯后,但是因?yàn)槟孀兤鞯呢?fù)載非??赡懿皇羌冏栊缘?,帶不同負(fù)載的時(shí)候過(guò)零點(diǎn)還是會(huì)出現(xiàn)失真,這方面雙極性的就好很多

0
回復(fù)
2014-05-22 10:58
@wangshujun
分明是工頻臂超前了一個(gè)周期呀,看看是不是定時(shí)器使用了影子寄存器的自動(dòng)重裝載,用這個(gè)功能可以避免定時(shí)器中斷程序設(shè)置過(guò)程對(duì)極小脈寬的影響,看你的波形應(yīng)該是用了,那么pwm實(shí)際輸出滯后于中斷一個(gè)周期工頻臂要在電感電流為0時(shí)進(jìn)行切換,這個(gè)具體的時(shí)序需要配合輸出的lc參數(shù)來(lái)決定是超前還是滯后,但是因?yàn)槟孀兤鞯呢?fù)載非??赡懿皇羌冏栊缘模瑤Р煌?fù)載的時(shí)候過(guò)零點(diǎn)還是會(huì)出現(xiàn)失真,這方面雙極性的就好很多
感謝師傅的回帖,非常感激。再給您看個(gè)圖

上圖是我后分頻為4的一個(gè)輸出,使用的是高電平有效,確實(shí)使用了自動(dòng)重載功能。如果我將上面中斷中的程序改為

if(num_INT==50)

{

RB4=0;

NOP();NOP();NOP();NOP();

RB2=1;

}

if(num_INT==100)

{RB2=0

;NOP();NOP();NOP();NOP();

RB4=1;

}

那結(jié)果就變成

兩圖相比,差一個(gè)載波周期,所以說(shuō),我的工頻輸出已經(jīng)在時(shí)序上補(bǔ)償了一個(gè)中斷的,但結(jié)果卻差的是一個(gè)載波周期,這就讓我很不理解,希望師傅給看看,謝謝

0
回復(fù)
2014-05-22 13:58
@熊貓酒仙
感謝師傅的回帖,非常感激。再給您看個(gè)圖[圖片]上圖是我后分頻為4的一個(gè)輸出,使用的是高電平有效,確實(shí)使用了自動(dòng)重載功能。如果我將上面中斷中的程序改為if(num_INT==50){RB4=0;NOP();NOP();NOP();NOP();RB2=1;}if(num_INT==100){RB2=0;NOP();NOP();NOP();NOP();RB4=1;}那結(jié)果就變成[圖片]兩圖相比,差一個(gè)載波周期,所以說(shuō),我的工頻輸出已經(jīng)在時(shí)序上補(bǔ)償了一個(gè)中斷的,但結(jié)果卻差的是一個(gè)載波周期,這就讓我很不理解,希望師傅給看看,謝謝

你這個(gè)圖,似乎4個(gè)pwm周期才改變一次占空比的,使用了pwm的重復(fù)定時(shí)器?每四次改變一次pwm

你正弦表是100個(gè)的,重復(fù)4次,每周期是400個(gè)載頻周期,載頻是20k,正好是這樣

如果運(yùn)算能力夠用的話(huà),不用重復(fù)寄存器,軟件管理重復(fù)就好辦了,另外做成200點(diǎn)的半周期正弦表效果會(huì)好得多呀,你現(xiàn)在正弦表的前后是重復(fù)的,沒(méi)必要,可以去掉一半的,然后正弦表分辨率擴(kuò)大4倍正好

你改成這樣是差了5個(gè)周期了,超前更多了,如果繼續(xù)使用重復(fù)寄存器修改的話(huà)會(huì)出現(xiàn)要么超前1個(gè),要么之后3個(gè)的問(wèn)題,工頻臂切換時(shí)間最好能做到按照周期調(diào)節(jié)比較好。

0
回復(fù)
2014-05-22 14:05
@wangshujun
你這個(gè)圖,似乎4個(gè)pwm周期才改變一次占空比的,使用了pwm的重復(fù)定時(shí)器?每四次改變一次pwm你正弦表是100個(gè)的,重復(fù)4次,每周期是400個(gè)載頻周期,載頻是20k,正好是這樣如果運(yùn)算能力夠用的話(huà),不用重復(fù)寄存器,軟件管理重復(fù)就好辦了,另外做成200點(diǎn)的半周期正弦表效果會(huì)好得多呀,你現(xiàn)在正弦表的前后是重復(fù)的,沒(méi)必要,可以去掉一半的,然后正弦表分辨率擴(kuò)大4倍正好你改成這樣是差了5個(gè)周期了,超前更多了,如果繼續(xù)使用重復(fù)寄存器修改的話(huà)會(huì)出現(xiàn)要么超前1個(gè),要么之后3個(gè)的問(wèn)題,工頻臂切換時(shí)間最好能做到按照周期調(diào)節(jié)比較好。
我不理解的就是為什么會(huì)差5個(gè)周期,我是四個(gè)載波周期進(jìn)一次中斷的,如果說(shuō)滯后應(yīng)該滯后4的整數(shù)倍,怎么會(huì)出現(xiàn)5個(gè)呢,麻煩您能不能給我解釋的稍微詳細(xì)點(diǎn),謝謝

剛看完您的回復(fù),這款單片機(jī)的運(yùn)算能力有限,后面還要做AD和PI調(diào)節(jié),所以時(shí)候用四個(gè)點(diǎn)調(diào)節(jié)為爭(zhēng)取一點(diǎn)時(shí)間。您說(shuō)的不用重復(fù)寄存器,用軟件管理重復(fù)是怎么個(gè)意思,沒(méi)太明白,您能稍微解釋下嗎?您的QQ多少,方便給我發(fā)下嘛

0
回復(fù)
2014-05-22 14:16
@熊貓酒仙
我不理解的就是為什么會(huì)差5個(gè)周期,我是四個(gè)載波周期進(jìn)一次中斷的,如果說(shuō)滯后應(yīng)該滯后4的整數(shù)倍,怎么會(huì)出現(xiàn)5個(gè)呢,麻煩您能不能給我解釋的稍微詳細(xì)點(diǎn),謝謝剛看完您的回復(fù),這款單片機(jī)的運(yùn)算能力有限,后面還要做AD和PI調(diào)節(jié),所以時(shí)候用四個(gè)點(diǎn)調(diào)節(jié)為爭(zhēng)取一點(diǎn)時(shí)間。您說(shuō)的不用重復(fù)寄存器,用軟件管理重復(fù)是怎么個(gè)意思,沒(méi)太明白,您能稍微解釋下嗎?您的QQ多少,方便給我發(fā)下嘛

有一個(gè)額外的pwm滯后周期是自動(dòng)重裝導(dǎo)致的,你做4次重復(fù)必然是這個(gè)結(jié)果

0
回復(fù)
2014-05-22 20:57
@熊貓酒仙
感謝師傅的回帖,非常感激。再給您看個(gè)圖[圖片]上圖是我后分頻為4的一個(gè)輸出,使用的是高電平有效,確實(shí)使用了自動(dòng)重載功能。如果我將上面中斷中的程序改為if(num_INT==50){RB4=0;NOP();NOP();NOP();NOP();RB2=1;}if(num_INT==100){RB2=0;NOP();NOP();NOP();NOP();RB4=1;}那結(jié)果就變成[圖片]兩圖相比,差一個(gè)載波周期,所以說(shuō),我的工頻輸出已經(jīng)在時(shí)序上補(bǔ)償了一個(gè)中斷的,但結(jié)果卻差的是一個(gè)載波周期,這就讓我很不理解,希望師傅給看看,謝謝

第四個(gè)圖的上面藍(lán)色和紫色的線(xiàn)在零點(diǎn)重合,你的問(wèn)題就解決了。

加油,你只差一點(diǎn)點(diǎn)了。呵呵

0
回復(fù)
2014-05-22 21:04
@熊貓酒仙
我不理解的就是為什么會(huì)差5個(gè)周期,我是四個(gè)載波周期進(jìn)一次中斷的,如果說(shuō)滯后應(yīng)該滯后4的整數(shù)倍,怎么會(huì)出現(xiàn)5個(gè)呢,麻煩您能不能給我解釋的稍微詳細(xì)點(diǎn),謝謝剛看完您的回復(fù),這款單片機(jī)的運(yùn)算能力有限,后面還要做AD和PI調(diào)節(jié),所以時(shí)候用四個(gè)點(diǎn)調(diào)節(jié)為爭(zhēng)取一點(diǎn)時(shí)間。您說(shuō)的不用重復(fù)寄存器,用軟件管理重復(fù)是怎么個(gè)意思,沒(méi)太明白,您能稍微解釋下嗎?您的QQ多少,方便給我發(fā)下嘛

印象中1936時(shí)鐘可以到32M,都有8MIPS了,做這個(gè)應(yīng)該來(lái)得及

另外,你可以改成用2個(gè)ECCP做這個(gè),他好像有幾個(gè)ECCP的。應(yīng)該很容易實(shí)現(xiàn)這個(gè)。

 

0
回復(fù)
2014-05-22 22:09
@lizlk
印象中1936時(shí)鐘可以到32M,都有8MIPS了,做這個(gè)應(yīng)該來(lái)得及另外,你可以改成用2個(gè)ECCP做這個(gè),他好像有幾個(gè)ECCP的。應(yīng)該很容易實(shí)現(xiàn)這個(gè)。 

首先非常感謝張工能來(lái)看我的問(wèn)題,在此深表感謝。

現(xiàn)在問(wèn)題就卡在這里了,不知道為什么會(huì)多出來(lái)一個(gè)載波周期,試了自己能想到的所有辦法,都沒(méi)能搞定,上面師傅說(shuō)“有一個(gè)額外的PWM滯后周期是自動(dòng)重裝導(dǎo)致的”,這點(diǎn)始終沒(méi)想通,明天按著張工所說(shuō)的用兩個(gè)ECCP去試試,到時(shí)候再通報(bào)結(jié)果。

0
回復(fù)
wangshujun
LV.8
11
2014-05-23 08:30
@lizlk
印象中1936時(shí)鐘可以到32M,都有8MIPS了,做這個(gè)應(yīng)該來(lái)得及另外,你可以改成用2個(gè)ECCP做這個(gè),他好像有幾個(gè)ECCP的。應(yīng)該很容易實(shí)現(xiàn)這個(gè)。 
用了自動(dòng)重裝的影子寄存器最好用別再用重復(fù)寄存器,否則沒(méi)法調(diào)整到正好
0
回復(fù)
wangshujun
LV.8
12
2014-05-23 09:43
@lizlk
印象中1936時(shí)鐘可以到32M,都有8MIPS了,做這個(gè)應(yīng)該來(lái)得及另外,你可以改成用2個(gè)ECCP做這個(gè),他好像有幾個(gè)ECCP的。應(yīng)該很容易實(shí)現(xiàn)這個(gè)。 
這個(gè)片子似乎不算便宜呀,比新塘的m0還貴呢,處理能力差了不是一點(diǎn)半點(diǎn)呀
0
回復(fù)
2014-05-23 09:56
@wangshujun
用了自動(dòng)重裝的影子寄存器最好用別再用重復(fù)寄存器,否則沒(méi)法調(diào)整到正好

師傅所說(shuō)的有點(diǎn)不理解,這個(gè)程序中用了自動(dòng)重裝的PWM模塊,中斷響應(yīng)是進(jìn)行了后分頻設(shè)置(設(shè)置為4),您所說(shuō)的重復(fù)寄存器是不是指的就是我使用的后分頻的功能?

您再看兩個(gè)圖

0
回復(fù)
wangshujun
LV.8
14
2014-05-23 10:06
@熊貓酒仙
師傅所說(shuō)的有點(diǎn)不理解,這個(gè)程序中用了自動(dòng)重裝的PWM模塊,中斷響應(yīng)是進(jìn)行了后分頻設(shè)置(設(shè)置為4),您所說(shuō)的重復(fù)寄存器是不是指的就是我使用的后分頻的功能?您再看兩個(gè)圖[圖片][圖片]

應(yīng)該就是后分頻功能,不同廠家的pwm發(fā)生器定義不同

做逆變器不建議用這個(gè)功能

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