已回答假定已回答

AD9954在FM调制下无法调整输出强度

KC_CEC 在 2015-3-20 詢問的問題
最後回覆由yiming.zhao@analog.com於2015-5-5提供

在AD9954中已经实现了FM调制,与我需要的调制频率及调制频偏完全一致,但是输出幅度却无法调整

 

理论上调整输出幅度只需要改变ASF寄存器就可以了,在单音输出模式下已验证这样是可以的,

在FM调制下无论如何改变ASF值输出强度都是一样的大。程序流程如下:

1.CFR1->使能RAM模式

2.CFR2->配置时钟

3.ASF->配置输出强度

4.RSCW0->配置切换频率及内存地址

5.产生IO_Update

6.将数据一次性写入RAM中

7.产生IO_Update

代码如下:

 uint32_t Cfr1Data=0;
  Cfr1Data=1ul<<31|0<<30|0<<27|0<<26|0<<25|0<<24|0<<23|0<<22|0<<21|0<<15|0<<14|\
  0<<13|0<<12|0<<11|0<<10|0<<9|0<<8|0<<7|1<<6|0<<5|0<<4|0<<3|0<<2|0<<1;
  WriteDdsData(CFR1,Cfr1Data,8*4);
  uint32_t Cfr2Data=0;
  Cfr2Data=(0<<11|0<<10|0<<9|MUX<<3|1<<2|1<<0);
  WriteDdsData(CFR2,Cfr2Data,8*3);
  uint16_t u16_ASF;
  u16_ASF=DdsConfig->Val.Amp;
  WriteDdsData(ASF,u16_ASF,8*2);
  uint32_t u32_FreqSys;
  uint32_t u32_FreqDec;
  uint32_t u32_FreqChange;
  uint64_t u64_RampTime;
  //系统时钟
  u32_FreqSys=XTAL*MUX;
  //数字时钟
  u32_FreqDec=u32_FreqSys/4;
  //频率切换时钟
  u32_FreqChange=DdsConfig->Val.f_ModuFreq*WAVE_TABLE_SIZE;
  //计算ramp time
  u64_RampTime=u32_FreqDec/u32_FreqChange;
  if(u64_RampTime>65535)
  {
  u64_RampTime=65535;
  }

  uint64_t RampHex=0;

  RampHex=((u64_RampTime&0xff)<<8)|(u64_RampTime>>8);
  //写入ram控制寄存器
  uint64_t u64_RSCW0=0;
  uint64_t u64_Point=WAVE_TABLE_SIZE-1;
  u64_RSCW0=(RampHex<<24|(u64_Point>>8)<<8|(u64_Point&0xff)<<16|(uint64_t)0x80);
  WriteDdsData(RSCW0,u64_RSCW0,8*5);

  //更新寄存器
  DDS_IOUPDATE_CLR;
  DDS_IOUPDATE_SET;
  //将频率写入RAM中
  RBDEV_CS_CLR;
  FpgaDeviceWriteData(8,RAM_REG);
  for(uint16_t i=0;i<WAVE_TABLE_SIZE;i++)
  {
  DdsConfig->Val.OutBuf[i]=DdsConfig->Val.f_InBuf[i]*10.73741824f;
  FpgaDeviceWriteData(32,DdsConfig->Val.OutBuf[i]);
  }
  RBDEV_CS_SET;

  //更新寄存器
  DDS_IOUPDATE_CLR;
  DDS_IOUPDATE_SET;

結果