欢迎来到SFWR的博客

AD9834配置

SPI设置

注意,虽然手册上CPOL(CLK空闲时电平)为低,但实测是是高电平

 

 

 

 连接

SYNC 为片选引脚,使用时拉低

FSE/PSE为频率与相位寄存器选择,均拉低即可

void SPI_Write_16Bits(uint16_t transdata)
{
    csset();
    uint16_t arrofdata[1];
    arrofdata[0]=transdata;
    HAL_SPI_Transmit(&hspi1, (uint8_t* )arrofdata, 1, HAL_MAX_DELAY);
    csreset();
}

 

频率设置

由于输入为十六位数据,而频率设置为28位,故传输两次数据 

xx +后14位

xx +前14位

xx为频率寄存器的标志,10为寄存器1,01为寄存器0

例:传输数据100100100100100100

传入寄存器1

则传输

10+00100100100100

10+00000000001001

频率与传入的值通过拟合后为x*179/50

    int t=123456;//频率值
    uint16_t a=0x8000,b=0x8000;
    t=t*179/50;
    if(t>16383){
   b|=(((t>>14)<<14)^t); a|=(t>>14);} else b|=t; //处理输入的两次值 HAL_Delay(1000); SPI_Write_16Bits(0x2100); SPI_Write_16Bits(0XC000); SPI_Write_16Bits(0x2100);//init
SPI_Write_16Bits(0x2800);//选择寄存器1 SPI_Write_16Bits(b); SPI_Write_16Bits(a); SPI_Write_16Bits(0x2808);//选择寄存器1输出

由于int范围,t最高10M,在低于10hz时误差较大

posted @ 2021-11-21 17:48  SFWR  Views(526)  Comments(0Edit  收藏  举报