SyncMOS Technologies Inc. SyncMOS SPWM Application Note Jan 2009 For SM5964、SM8954A、SM8958A、SM89516A、SM59264、SM59128、SM79108 Specific Pulse Width Modulation(SPWM) Function Application Notes 適用產品: 1. SM5964、SM8954A、SM8958A、SM89516A(P1.3~P1.7) 2. SM59264、SM59128(P1.2~P1.5) 3. SM79108(P1.3) 功能說明: 每個 SPWM 波型是由一個 8bit 暫存器的組合而成,其組合成份為 5bit 的 SPWM 及 3bit 的 BRM。在 5bit SPWM 部份,其值將決定輸出的脈衝寬度(“Hi”)。3bit 的 BRM 將產生 1~7 個狹小的脈衝在一個 SPWM 週期架構之 間分別插入。 應用範圍:1、背光版亮度控制 2、CCD Clock 輸出 3、電壓變化控制。 特殊暫存器說明:P1CON, SPWMC, SPWMD[4:0] 1、P1CON(0x9BH): (Example to define P1.3~P1.7 ) SPWME4 SPWME3 SPWME2 SPWME1 SPWME0 Unused Unused Unused Read /Write R/W R/W R/W R/W R/W Reset Value 0 0 0 0 0 * * * P1.7 P1.6 P1.5 P1.4 P1.3 SM5964 (Example to define P1.2~P1.5 ) TWSIDAE TWSICLE SPWME3 SPWME2 SPWME1 SPWME0 Unused Unused Read /Write R/W R/W R/W R/W R/W R/W Reset Value 0 0 0 0 0 0 * * P1.5 P1.4 P1.3 P1.2 SM59264 SPWME [4:0]:初始值為 0,當位元設定為 1 時,對應 Port1 的腳位即設為 SPWM 的功能,當設定為 0 時 SPWM 的腳位即為一般的 I/O Pin。 2、SPWMC(0xA3H): Unused Unused Unused Unused Unused Unused SPFS1 SPFS0 Read /Write R/W R/W Reset Value * * * * * * 0 0 SPFS[1:0] :是設定外部頻率的被除數以決定 SPWM 時脈。 SPFS1 SPFS0 Divider SPWM clock at Fosc=20MHz SPWM clock at Fosc=40MHz 0 0 2 10MHz 20MHz 0 1 4 5MHz 10MHz 1 0 8 2.5MHz 5MHz 1 1 16 1.25MHz 2.5MHz SPWM clock = 1/T = Fosc/Divider Specifications subject to change without notice, contact your sales representatives for the most recent information. SPWM APN_VerA_20090119 IRFWX-A113 1 SyncMOS Technologies Inc. SyncMOS SPWM Application Note Jan 2009 For SM5964、SM8954A、SM8958A、SM89516A、SM59264、SM59128、SM79108 SPWM 的輸出頻率 = SPWM clock/32 = (Fosc/ Divider)/32. 3、SPWMD[4:0]( 0xAC、0xA7、0xA6、0xA5、0xA4): SPWMD SPWMD SPWMD SPWMD SPWMD BRM BRM BRM [4:0]4 [4:0]3 [4:0]2 [4:0]1 [4:0]0 [2:0]2 [2:0]1 [2:0]0 Read /Write R/W R/W R/W R/W R/W R/W R/W R/W Reset Value 0 0 0 0 0 0 0 0 SPWMD[4:0]: 為 SPWM 資料暫存器,決定 SPWM 輸出波形,2 的 5 次方 = 32 =0~ 1FH BRM[2:0]: 將要插入 1~7 個時脈在 8 個 SPWM 週期架構之間 N = BRM[2:0] 000 001 010 011 100 101 110 111 Number of SPWM cycles inserted in an 8-cycle frame 0 1 2 3 4 5 6 7 Example of SPWM timing diagram: MOV SPWMD0 , #83 ; SPWMD0[4:0]=10h=16 (16T high, 16T low), BRM[2:0] = 3 H MOV P1CON , #08H ; Enable P1.3 as SPWM output pin 範例:一組 SPWM 輸出週期頻率的計算方式 : 設 Fosc = 20MHz , SPWMC 的 SPFS [1:0] =0x03H (Divider=16) SPWM clock =20MHz / 16 = 1.25MHz SPWM output cycle frame frequency = 1.25MHz / 32 = 39.1KHz SPWM 程式範例: 組合語言: X’tal = 20MHz Specifications subject to change without notice, contact your sales representatives for the most recent information. SPWM APN_VerA_20090119 IRFWX-A113 2 SyncMOS Technologies Inc. SyncMOS SPWM Application Note Jan 2009 For SM5964、SM8954A、SM8958A、SM89516A、SM59264、SM59128、SM79108 ;******* SET DATA **************************************** P1CON EQU 09BH ;設定 SFR 內 P1CON 的位址 SPWMC EQU 0A3H ;設定 SFR 內 SPWMC 的位址 SPWMD0 EQU 0A4H ;設定 SFR 內 SPWMD0 的位址 ;******************* 定義程式的起始位址 ******************** ORG 0000H ;設定目前程式的起始位址 JMP Start ;跳至 reset ORG 100H Start: MOV P1CON,#08H ;設定 P1.3 為 SPWM 輸出 MOV SPWMC,#03H ;設定 SPWM 的頻率 (Divider=16) MOV SPWMD0,#083H ;設定輸出波形(SPWMD0=10h=16,BRM=3h) ;輸出波形週期為 16/32=1/2,在 8 個週期中插入 3 個脈波 ;************* 設定 LED 在 SPWMD0(即 P1.3 輸出)的閃爍方式 *************** ;此段程式的 LED 顯示是由暗至亮的表示方法 MOV A,#0ffH ;此段為由 FF 至 00 的波形變化 LOOP1: MOV SPWMD0,A MOV R0,A CALL Delay DJNZ R0,LOOP1 ;********************* 呼叫 Delay ************************************** Delay: MOV 20H,#02H b3: MOV 21H,#0FFH b2: MOV 22H,#0FFH b1: DJNZ 22H,b1 DJNZ 21H,b2 DJNZ 20H,b3 RET END C 語言: sfr P1CON = 0x9B; sfr SPWMC = 0x0A3; sfr SPWMD0 = 0x0A4; sfr SPWMD1 = 0x0A5; sfr SPWMD2 = 0x0A6; sfr SPWMD3 = 0x0A7; sfr SPWMD4 = 0x0AC; void DelayX10ms(int); unsigned char times; //設定 SFR 內 P1CON 的位址 //設定 SFR 內 SPWMC 的位址 //設定 SFR 內 SPWMD0 的位址 //設定 SFR 內 SPWMD1 的位址 //設定 SFR 內 SPWMD2 的位址 //設定 SFR 內 SPWMD3 的位址 //設定 SFR 內 SPWMD4 的位址 void main(void) { Specifications subject to change without notice, contact your sales representatives for the most recent information. SPWM APN_VerA_20090119 IRFWX-A113 3 SyncMOS Technologies Inc. SyncMOS SPWM Application Note Jan 2009 For SM5964、SM8954A、SM8958A、SM89516A、SM59264、SM59128、SM79108 //設定 SPWM 輸出腳位// //P1CON=0x04; //set p1.2 out for 59264,59128 P1CON=0x08; //set p1.3 out for 5964,8954A,8958A,89516A,59264,59128,79108 //P1CON=0x10; //set p1.4 out for 5964,8954A,8958A,89516A,59264,59128 //P1CON=0x20; //set p1.5 out for 5964,8954A,8958A,89516A,59264,59128 //P1CON=0x40; //set p1.6 out for 5964,8954A,8958A,89516A //P1CON=0x80; //set p1.7 out for 5964,8954A,8958A,89516A //設定外部頻率的被除數以決定 SPWM 時脈// //外部頻率:20MHz 設 Divider=16 其 SPWM 時脈為 1.25MHz //SPWMC=0x00; //set SPWM frequency (Divider=2) //SPWMC=0x01; //set SPWM frequency (Divider=4) //SPWMC=0x02; //set SPWM frequency (Divider=8) SPWMC=0x03; //set SPWM frequency (Divider=16) //設定輸出波形的比例(SPWMD0=10h=16,BRM=3h)// SPWMD0=0x83; //輸出波形週期為 16/32=1/2 ; 在 8 個週期中插入 3 個脈波 //設定輸出波形的比例(SPWMD0=18h=24,BRM=1h)// SPWMD0=0xC3; //輸出波形週期為 24/32=3/4 ; 在 8 個週期中插入 1 個脈波 for(times=0xff;times<=0xff;times--) { SPWMD0 = times; DelayX10ms(50); } } void DelayX10ms(int count) { int i,j; for(i=0;i<count;i++) for(j=0;j<1500;j++); } Specifications subject to change without notice, contact your sales representatives for the most recent information. SPWM APN_VerA_20090119 IRFWX-A113 4