原创 【TI博客大赛】MSP430单片机与TI DAC7625产生三路正弦波

2012-10-18 18:36 2339 11 14 分类: MCU/ 嵌入式

 

MSP430单片机 与 TI DAC7625产生三路正弦波 .并行DAC7625输出三相sin波,波形在示波器上观察效果不错,相位基本稳定,可能是由于我电路设计的原因,导致在某些情况下各路的输出波形会有一定的干扰,当初主要是为了调试程序,所以没有考虑太多,有兴趣的朋友可以试试,为方便大家学习我把资料都放在了附件里(源程序和DAC7625PDF)。欢迎大家指正同时也欢迎大家讨论。

/*函数声明:并行DAC7625输出三相sin波。最高只能达到2.48V,不能达到2.5,(参考电压只有2.48)用A、B、C三个通道时D通道要受影响,没有开启也有波形输出,与B通道的重合。如果把D通道放前面使用会对紧挨着的通道产生干扰,使其与它波形一样,其他通道如果没有开启就没有波形输出*/

 

#include "msp430x16x.h"

 

#define DA_DATA_H    P2OUT //高4位//P2的低四位管脚

#define DA_DATA_L    P1OUT //低8位//P1的8个管脚

 

#define DA_RESET_1   P3OUT |= BIT2   

#define DA_RESET_0   P3OUT &=~ BIT2

 

#define DA_CS_1   P3OUT |= BIT3

#define DA_CS_0   P3OUT &=~ BIT3

 

#define DA_RW_1   P3OUT |= BIT4

#define DA_RW_0   P3OUT &=~ BIT4

 

#define DA_LDAC_1   P3OUT |= BIT5

#define DA_LDAC_0   P3OUT &=~ BIT5

 

#define DA_A0_1   P3OUT |= BIT0

#define DA_A0_0   P3OUT &=~ BIT0

 

#define DA_A1_1   P3OUT |= BIT1

#define DA_A1_0   P3OUT &=~ BIT1

 

unsigned int sin[120]={0x800,0x86b,0x8d5,0x940,0x9a9,0xa11,0xa78,0xadd,0xb40,

0xba1,0xbff,0xc5a,0xcb3,0xd08,0xd59,0xda7,0xdf1,0xe37,0xe78,0xeb5,0xeed,0xf20,

0xf4e,0xf77,0xf9b,0xfb9,0xfd2,0xfe6,0xff4,0xffd,0xfff,0xffd,0xff4,0xfe7,0xfd3,

0xfba,0xf9c,0xf78,0xf4f,0xf21,0xeee,0xeb6,0xe7a,0xe39,0xdf3,0xda9,0xd5c,0xd0a,

0xcb5,0xc5d,0xc02,0xba4,0xb43,0xae0,0xa7b,0xa14,0x9ac,0x943,0x8d9,0x86e,0x803,

0x798,0x72d,0x6c3,0x659,0x5f1,0x58a,0x525,0x4c2,0x461,0x403,0x3a7,0x34f,0x2fa,

0x2a8,0x25a,0x210,0x1cb,0x189,0x14c,0x114,0xe1,0xb2,0x89,0x65,0x46,0x2d,0x19,

0xb,0x3,0x0,0x2,0xa,0x18,0x2b,0x44,0x62,0x86,0xae,0xdc,0x10f,0x147,0x183,0x1c4,

0x20a,0x253,0x2a1,0x2f2,0x347,0x39f,0x3fa,0x458,0x4b9,0x51c,0x581,0x5e7,0x650,

0x6b9,0x723,0x78e};

 

unsigned int index1,index2,index3;

 

void port_init();

void clock_init();

void DAC7625_init();

void TimerB_init();

void DAC7625_data();

void main()

{

  WDTCTL = WDTPW + WDTHOLD;

 

  clock_init();

  port_init();

  DAC7625_init();

  TimerB_init();

 

  _EINT();

  while(1);

}

 

void clock_init()

{

  unsigned int i;

  BCSCTL1 &=~ XT2OFF;

 

  do

  {

    IFG1&=~OFIFG;

    for(i=0xff;i>0;i--);

  }

  while((IFG1&OFIFG)!=0);

  BCSCTL2 |= SELM_2;//MCLK

  BCSCTL2 |=SELS;//SMCLK=XT2 8M

}

 

void port_init()

{

  index1=0;

  index2=40;

  index3=80;

  P1DIR=0XFF;

  P2DIR=0X0F;

  P3DIR=0X3F; 

}

 

void TimerB_init()

{

  TBCCR0=1;

  TBCTL |= TBSSEL_2 + TBCLR + MC_1;

  TBCCTL0 = CCIE;

 

}

/*============================================================================

DAC7625初始化

      (不变的指数)

=============================================================================*/

void DAC7625_init()

{

   DA_RESET_1;  

   DA_CS_0;//CS低电平有效

   DA_RW_0;//写 

}

/*============================================================================

DAC7625数据输出设置

 

=============================================================================*/

void DAC7625_data()

{

     

   DA_LDAC_1;//锁住各通道输出

  

   DA_A0_0;//通道A

   DA_A1_0; 

   DA_DATA_L=sin[index1];//低八位   //各通道输出数据相同

   DA_DATA_H=sin[index1]>>8;//高四位

 

   DA_A0_0;//通道B

   DA_A1_1;  

   DA_DATA_L=sin[index2];//低八位   //各通道输出数据相同

   DA_DATA_H=sin[index2]>>8;//高四位

 

   DA_A0_1;//通道C

   DA_A1_0;

   DA_DATA_L=sin[index3];//低八位   //各通道输出数据相同

   DA_DATA_H=sin[index3]>>8;//高四位

  

//    DA_A0_1;//通道D

//   DA_A1_1; 

// 

   DA_LDAC_0;//实现四通道同时输出

}

/*============================================================================

定时器TB定时中断输出正弦波

 

=============================================================================*/

#pragma vector=TIMERB0_VECTOR

__interrupt void Timer_B (void)

{

  DAC7625_data();

  index1++;

  index2++;

  index3++;

  if(index1==120)

  {

    index1=0;

  }

 

  if(index2==120)

  {

    index2=0;

  }

 

  if(index3==120)

  {

    index3=0;

  }

}

文章评论3条评论)

登录后参与讨论

用户380727 2012-10-24 18:11

我也纠结这个问题,我刚开始以为是我画的PCB板太仓促考虑的不够周全,但是其他三路都有输出,这个就可能是程序的问题了,看来得仔细看看Datasheet

用户1362132 2012-10-24 14:45

兄弟,还找出为什么DAC7625 只能输出3路DA的原因了么,我今天也同样遇到这个问题了,希望有机会共同探讨,QQ:859482555

用户377235 2012-10-18 13:48

挺高深的样子

用户1696769 2012-9-21 09:11

很具有实用价值啊!
相关推荐阅读
用户380727 2013-03-07 12:08
闭关学习
又是一个转折点,压力很大,需要很多准备,多学习。...
用户380727 2012-12-30 23:57
值得一读的高精度 TI 正峰值检测英文原版文档
  这个是英文原版的正峰值检测文档,非常值得大家细细的品味,我按照文档中的电路验证过精度非常高,误差只有20mv.虽然是英文的但是还是能读懂的,还是可以好好阅读一下,对电路的原理的理解有一定帮...
用户380727 2012-12-29 12:42
DIY style- U盘MP3制作
《好声音》--STM32 U盘MP3 有想法就大胆的去实现吧! 大三的时候做的一个小制作,实验室手工打造,主控芯片采用 STM32,在一块开发板上做了转接板 引出来外扩的,解码芯片是采用V...
用户380727 2012-12-28 12:32
即将过去的2012
玛雅人没有预言到2012世界末日,生活依旧,即将过去的2012,几多欢喜,回顾过往的日子,几许唏嘘,向前看,还有几天时间,合理安排,希望2013的第一件大事是过去的这半年应该得到的结果!加油!...
用户380727 2012-12-01 19:09
加油!
12月新的征程!新的开始!不要迟疑!不要等待! 坚持你的梦想走下去!加油!...
用户380727 2012-11-27 09:51
【TI博客大赛】430也疯狂--MSP430单片机产生SPWM波
MSP430在功率电子方面的一个应用,由MSP430产生SPWM波的主程序,由于程序较多所以完整的程序在附件里。这个程序是原来做比赛的时候用的,单片机出来的波形经过整形再经过光耦以及其他变换后用来...
我要评论
3
11
关闭 站长推荐上一条 /2 下一条