TI中文支持网
TI专业的中文技术问题搜集分享网站

dac8832产生正弦波,频率上不去

最近在调DAC8832,想试试用它产生1K正弦波。每个周期用32个点恢复,每隔T/32中断一次,在中断里单片机将数字量写进8832(软SPI)。结果发现频率只能到390多HZ,比它频率低的波形能正常产生,但是比这个频率高了就始终是390多HZ。难道是因为我在中断里运行时间太长了?可是代码也没几行啊,主系统时钟也用的是8M,对于这个状况表示很困惑,具体代码如下:

/*************init_clk.c**************************/

#include "msp430x14x.h"

void init_clk(void){
unsigned char i; BCSCTL1 &= ~(XT2OFF + XTS); //启动XT2高速时钟模块 BCSCTL2 |= SELM1+SELS; //MCLK主时钟选XT2为时钟源.XT2输入不分频. SMCLK选为XT2为时钟源.
do { IFG1 &=~OFIFG; //清OSCFault 标志 for(i=0xff;i>0;i–); //延时等待其开启稳定 } while(IFG1 & OFIFG); //检查OSCFault标志位是否为0,若为0则表示XT2开启稳定.}

/**************************************************/

/*************spi.c**********************************/

#include "msp430x14x.h"

//软SPI:P4.3作为SIMO P4.4作为SCLK P4.5作为片选端

#define simo_out P4DIR|=BIT3
#define simo_0 P4OUT&=~BIT3
#define simo_1 P4OUT|=BIT3

#define sclk_out P4DIR|=BIT4
#define sclk_0 P4OUT&=~BIT4
#define sclk_1 P4OUT|=BIT4

#define cs_out P4DIR|=BIT5
#define cs_0 P4OUT&=~BIT5
#define cs_1 P4OUT|=BIT5

float codesin[32]={0,0.1951,0.3827,0.5556,0.7071,0.8315,0.9239,0.9808,
1.0000,0.9808,0.9239,0.8315,0.7071,0.5556,0.3827,0.1951,0.0000,-0.1951,
-0.3827,-0.5556,-0.7071,-0.8315,-0.9239,-0.9808,-1.0000,-0.9808,-0.9239,
-0.8315,-0.7071,-0.5556,-0.3827,-0.1951};
int code[32];

void code_8832()
{
char i;
for(i=0;i<32;i++)
code[i]=(int)((codesin[i]+2.5)*32768/2.5);//Vout=-Vref+code*Vref/32768
}

void dac8832_spi(int data)
{
int i;
simo_out;
sclk_out;
cs_out;
cs_1;
cs_0;
for(i=0;i<16;i++)
{
sclk_0;
if(data&0x8000) simo_1; else
simo_0;
sclk_1;
data<<=1;
}
cs_1;
}

/*********************************************/

/**************main.c**********************/

#include "msp430x14x.h"

void init_clk(void);
void code_8832();
void dac8832_spi(int data);

int k;
extern int code[32];

void main( void )
{
WDTCTL = WDTPW + WDTHOLD;
init_clk();
code_8832();
CCTL0 = CCIE; CCR0 = 125;
TACTL = TASSEL_2 + MC_1+ID0; // MCLK,二分频, upmode
_EINT(); while(1);
}

#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
dac8832_spi(code[k++]);
k=k%32;
}

/************************************************/

Wanda WANG:

你用示波器看下两点之间的时间间隔是多少。

另外DAC输出是怎么接的呢?会不会是容性负载过大?

miaoran zhang1:

回复 Wanda WANG:

用示波器看到两点之间时间间隔是80us,但是我用定时器设定的应该是31us啊………..

Wanda WANG:

回复 miaoran zhang1:

定时器设的时间不一定准,准确的定时是需要通过示波器来观察的。

赞(0)
未经允许不得转载:TI中文支持网 » dac8832产生正弦波,频率上不去
分享到: 更多 (0)