Microchip
直播中

崔璨

8年用户 214经验值
私信 关注
[问答]

只使用一个通道的DAC有可能以预期采样频率的两倍工作吗?

嗨,同事们,我用一个DSPIC33 FJ128GP804工作在38,5 MIPS上,用DAC和DMA用查找表产生信号。我有一个LUT,一个正弦波周期有100个采样,如果采样设置在100kSPS,就必须产生1KHz的信号,但是我测量2KHz。怎么可能呢?CPU的频率是正确的,用定时器和通信外围设备来验证。DAC采样频率也是正确的。生成方波,我可以看到吉布斯现象正好在100kHz的正弦振荡。除法器和预分频器被正确地设置。有可能使用一个信道(而不是两者)的DAC可以工作在预期采样频率的两倍。谢谢您!罗杰斯

以上来自于百度翻译


      以下为原文

    Hi colleagues, I am working with a dsPIC33FJ128GP804 at 38,5 MIPS for generating signals with DAC and DMA with Look-up-tables.

I have a LUT with 100 samples of a single sine wave period, that must generating a signal of 1kHz if sampling is set at 100ksps, but I measuring 2kHz. How it is possible ?

CPU frequency is right, verified with timers and communication peripherals. DAC  sampling frequency is right too. generating a square wave I can see the Gibbs phenomena at exactly 100kHz sinc ringing. Dividers and prescalers are correctly set.

There is possible that DAC using just a channel (not both) may work at twice of expected sampling frequency ?

Thank you!

Rogers

回帖(15)

李兆峰

2019-3-6 08:39:07
显示你的代码,也许

以上来自于百度翻译


      以下为原文

    Show your code, maybe
举报

冯待策

2019-3-6 08:52:39
也许你更新了2次,左边和右边?猜猜看,你不用水晶做奥克斯吗?

以上来自于百度翻译


      以下为原文

    Maybe you update 2 times, left & right ?, just a guess.
Dont u use crystal for aux ?
举报

石玉兰

2019-3-6 09:06:15
//////////////////////////////////////////////////////////////////////////////////////////////1/2,ClDIV= 1:128;/DOS= 1:1,FRC= 1:1,N2=2,N1=4 PLLFBD=75;/除数m=77;m=PLLFBD +2 ACLKCON= 0x0700;//OSC Del DAC:SELACLK=0,AUX OSC禁用,APSTLSCR & Gn;n除以1,AS您好,这里是:///////////////////////////////////////////////////(?)RCSEL=0μSuxTiNTIN WORKESEOSCCONH(0x03);DC1Lee=0;//关闭DAC INT。当与DMA一起使用时,DAC不能生成INTs DAC1CONC= 0x2102;//OFF,2补,除数CKDIVI=3(DACFDIV=2)100KSPs DAC1STAT=0x8505;/ /左通道,右。= 1)AC1DFLT=DAcDebug;/DAC1LIF=0;DAC1CONTITE;DAC1CONTITE;DAC1CONTITE;////////////////////////////////////////////////DMA段外,int LutB [LutbjLe++] 1,Apple(1);(或(主)C DMA0CONTITY;Chen=0;IEC0BIT。DMA0IE=0;IPC1通道关闭,中点关闭,如果FIFO空,位。DMA0COIP=7;DMA0CONC=0x2000;//字大小,写入外围设备,INT在完整传输块,正常操作,具有后增量,连续模式和乒乓关闭DMA0Req=0x00 4F;/INT由DAC1L DMA0STATA=Y-BuuthTiNoDMACOBUP(&LUTB〔1〕);/ /连接LUTB阵列DMA0PAD =(无符号未登录)LDAT-DMA0CNT=LutbxLe-1;//LutbjLe是100个样本,正弦周期IFS0BIT.DMA0IF=0;DMA0IE=1;;/激活INT///////////////////////////////////////////////其他:γ定义GeNa启动DMA0CONTITE,Chen=1;DMA0ReqBist.For=1;//Ge宏开始生成。DAC1LDAT;// DAC1AC1L ISR和中断不存在,因为不是NeDeD.DMA0ISR只停止生成(DMA0BITE,Chen=0),并事先用用户标记谢谢。

以上来自于百度翻译


      以下为原文

    Hi, here is:
 
////////////////////////////////////////////////// OSCILLATOR SECTION
    // PLL (Using 8MHz XTAL)

    CLKDIV=0x7002;                      // DOZE=1:128, DOZE OFF, FRC=1:1, N2=2, N1=4  
    PLLFBD=75;                             // Divisor M=77, M=PLLFBD+2
    ACLKCON=0x0700;                   // OSC del DAC: SELACLK=0, Aux Osc disabled, APSTSCLR-> N divide by 1, ASRCSEL=0

    __builtin_write_OSCCONH(0x03);
    __builtin_write_OSCCONL(OSCCON | 0x01);

    while((OSCCONbits.OSWEN==1) | (OSCCONbits.LOCK != 1));
    OSCCONbits.CLKLOCK=1;
 
//////////////////////////////////////////////// DAC SECTION
    IEC4bits.DAC1LIE=0;           // Shut off dac INT. When used with DMA, DAC must not generate ints  
    DAC1CON=0x2102;             // OFF, TWO's complement, Divisor CLKDIV=3 (DACFDIV=2) 100ksps
    DAC1STAT=0x8505;            // Left Channel ON, Right Channel OFF, Midpoint OFF, INT if FIFO empty,
    DAC1DFLT=DACDEFAULT;    // default value
    IFS4bits.DAC1LIF=0;        
    DAC1CONbits.DACEN=1;
 
////////////////////////////////////////////// DMA SECTION
 
    extern int lutb[LUTB_LEN+1]__attribute__((space(dma)));   // in main.c
    DMA0CONbits.CHEN=0;
    IEC0bits.DMA0IE=0;
    IPC1bits.DMA0IP=7;
    DMA0CON=0x2000;                                        // Word size, Write to peripheral, INT when complete transfer block, Normal operation, with Post-increment, Continuous mode and ping-pong off
    DMA0REQ=0x004F;                                        // INT by DAC1L
    DMA0STA=__builtin_dmaoffset(&lutb[1]);         // Connect lutb array
    DMA0PAD=(volatile unsigned int)&DAC1LDAT;   // with DAC1LDAT
    DMA0CNT=LUTB_LEN-1;                                 // LUTB_LEN is 100 samples, a sine period
    IFS0bits.DMA0IF=0;          
    IEC0bits.DMA0IE=1;                                       // Activate INT
 
////////////////////////////////////////////////////// others:
#define GEN_START   DMA0CONbits.CHEN=1;DMA0REQbits.FORCE=1; // Macro to start generation
 
DAC1L ISR and interrupt does not exists because isn't needed.
DMA0 ISR only stops generating (DMA0bits.CHEN=0) with a user flag
 
Thank you in advance.
 
R.
举报

石玉兰

2019-3-6 09:19:12
我使用的是初级XTAL。配置PLL为38,5 MIPS(接近40 MIPS的最大DSPIC),并设置正确的分频器,我可以得到100kSPS(正好100,28 kSPS)。

以上来自于百度翻译


      以下为原文

   
I am using primary XTAL. Configuring PLL for 38,5 MIPS (near 40 MIPS maximun of this dsPIC) and set dividers correctly, can I get 100ksps (exactly 100,28 ksps).
举报

更多回帖

发帖
×
20
完善资料,
赚取积分