[求助] 用18f2550 as PWM 正弦產生器

martymak 樓主
2021-9-1 10:06
本帖最后由 martymak 于 2021-9-1 11:33 編輯

有高人用過 18F2550 for PWM sine generator ,可否指教一下,或者給我一個例子?

回復評論 (5)

沙發 annysky2012

2021-9-1 17:01

PWM的工作原理基本都是一樣,主要你詳細看看芯片的數據手冊,自己先做一做

沒有什么不可以,我就是我,不一樣的煙火! 

板凳 okhxyyo

2021-9-2 09:30

玩板看這里:

http://bbs.eeworld.com.cn/elecplay.html

EEWorld測評頻道眾多好板等你來玩,還可以來頻道許愿樹許愿說說你想要玩的板子,我們都在努力為大家實現!

4樓 martymak

2021-9-3 11:26
引用: okhxyyo 發表于 2021-9-2 09:30 不知道你的具體需求,可以看看以下資料 pic18f2550/2455 pdf-IC設計及制造相關資料下載-EEWORLD下載中心 ...

I have pic18f2550 datasheet in hand , knowing how to use it . But now I was using it in

my LCR digital bridge design , the USB function was completely disabled .

The following was my assembly built to test the PWM sine generator :

 

;Loading value Sin (2*PI*t/20) in registers of porosity SHIM CCPR2L:CCPCON <5:4>
Load_Sine_Val
        movlw        HIGH Sine_Table
        movwf        PCLATH
         movf    Sine_step,W
        mullw    .2
        movf    PRODL,W    ; index should be (w*2)
        call        Sine_Table
        mullw    .1    ; wonderful => make sine generation stable
        movf    PRODL,W
         movwf        Sine_val
        movlw        b'11001111'
        andwf        CCP2CON,f
        rrcf        Sine_val, F
        btfsc        STATUS, C
        bsf            CCP2CON, 4        ;Duration is SHIM, low-order bit (0)
        rrcf        Sine_val, F
        btfsc        STATUS, C
        bsf            CCP2CON, 5        ;Duration is SHIM, bit N 1
        movf        Sine_val, W
        andlw        0x3F
        movwf        CCPR2L            ;Duration is SHIM - rest , don't use cppr2l,1
        decfsz        Sine_step,F        ;Following step
        goto        lsv_1            ;For alignment of duration in sequence
        movlw        .20                ;New period
        movwf        Sine_step
        return
lsv_1    nop                            ;for alignments of duration in sequence
        return

5樓 martymak

2021-9-3 11:29
引用: martymak 發表于 2021-9-3 11:26 I have pic18f2550 datasheet in hand , knowing how to use it . But now I was using it in my LCR ...

; Table for PWM Sine generator    
Sine_Table
        addwf    PCL,F
        dt    .36
        dt    .24
        dt    .14
        dt    .10;.7
        dt    .6 ;.5
        dt    .10;.7
        dt    .14
        dt    .24
        dt    .36
        dt    .50
        dt    .64
        dt    .76
        dt    .86
        dt    .93
        dt    .95
        dt    .93
        dt    .86
        dt    .76
        dt    .64
        dt    .50

; init settings

PWM_init
        bsf    uFlag_1,0 ; set 1 kHz flag first
        movlw    .19 ;period = (19+1)*.25us =5us or F = 1/5us = 200 kHz
        movwf    PR2    ;frequency Sin = 200k
        clrf    CCP2CON
        movlw    .20
        movwf    Sine_step
        call    Load_Sine_Val
        movlw    b'00000100'  
        movwf    T2CON    ;timer2 on=1, prescaler=1=00
        movlw    0x0F    ; set PWM mode including Lsb bit0&1
        iorwf    CCP2CON,F
        
CCP1_init
        movlw    b'00000001'    ;TMR1CS bit=0=Internal clock=>  
        movwf    T1CON        ;Fosc/4 =16/4 =4MHz=0.25us,& enable timer1  
        
;        clrf    CCPR1H    ; no control of freq. ???
;        movlw    .200    ;F = 1 kHz, T = 1ms, 20 steps => 1ms/20 = 50us, 50us/0.25 = 200
;        movwf    CCPR1L
 
        movlw    b'00001011' ;mode of comparison, trigger to AD conversion
        movwf    CCP1CON
        bsf    PIE1,2   ;enabled CCP1 interrupt
        bsf    INTCON,7 ;enable global interrupt bit

 

6樓 martymak

2021-9-3 11:34

it worked , but the PWM sine generated was not 1kHz , instead it was 200Hz 2Vpp .

Changing the PR2 value was no effect .... Hope somebody can see the problem from

my assembly .

電子工程世界版權所有 京B2-20211791 京ICP備10001474號-1 京公網安備 11010802033920號
    我也要說兩句
    發送
    評論
    萝卜大香蕉