久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1816|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

基于ADF4351的信號(hào)發(fā)生器

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:575254 發(fā)表于 2020-4-13 12:03 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#include "ADF4351.h"
#include "delay.h"

//#define
#define ADF4351_R0                        ((u32)0X2C8018)
#define ADF4351_R1                        ((u32)0X8029)
#define ADF4351_R2                        ((u32)0X10E42)
#define ADF4351_R3                        ((u32)0X4B3)
#define ADF4351_R4                        ((u32)0XEC803C)
#define ADF4351_R5                        ((u32)0X580005)

#define ADF4351_R1_Base        ((u32)0X8001)
#define ADF4351_R4_Base        ((u32)0X8C803C)
#define ADF4351_R4_ON          ((u32)0X8C803C)
#define ADF4351_R4_OFF        ((u32)0X8C883C)

#define ADF4351_RF_OFF        ((u32)0XEC801C)

#define ADF4351_PD_ON                ((u32)0X10E42)
#define ADF4351_PD_OFF        ((u32)0X10E02)


void ADF_Output_GPIOInit(void)
{
        GPIO_InitTypeDef GPIO_InitStruct;
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

        GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
        GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(GPIOA, &GPIO_InitStruct);
       
}

void ADF_Input_GPIOInit(void)
{
        GPIO_InitTypeDef GPIO_InitStruct;
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

        GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6;
        GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(GPIOA, &GPIO_InitStruct);
       
        GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1;
        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING ;
        GPIO_Init(GPIOA, &GPIO_InitStruct);       
}

void delay (int length)
{
        while (length >0)
            length--;
}

void WriteToADF4351(u8 count, u8 *buf)
{
        u8 ValueToWrite = 0;
        u8 i = 0;
        u8 j = 0;
       
//        ADF_Output_GPIOInit();
       
        ADF4351_CE = 1;
        delay_us(1);
        ADF4351_CLK = 0;
        ADF4351_LE = 0;
        delay_us(1);
       
        for(i = count; i>0; i--)
        {
                ValueToWrite = *(buf+i-1);
                for(j=0; j<8; j++)
                {
                        if(0x80 == (ValueToWrite & 0x80))
                        {
                                ADF4351_OUTPUT_DATA = 1;
                        }
                        else
                        {
                                ADF4351_OUTPUT_DATA = 0;
                        }
                        delay_us(1);
                        ADF4351_CLK = 1;
                        delay_us(1);
                        ValueToWrite <<= 1;
                        ADF4351_CLK = 0;       
                }
        }
        ADF4351_OUTPUT_DATA = 0;
        delay_us(1);
        ADF4351_LE = 1;
        delay_us(1);
        ADF4351_LE = 0;
}


void ReadToADF4351(u8 count, u8 *buf)
{
        u8 i = 0;
        u8 j = 0;
        u8 iTemp = 0;
        u8 RotateData = 0;
       
        ADF_Input_GPIOInit();
        ADF4351_CE = 1;
        delay_us(1);
        ADF4351_CLK = 0;
        ADF4351_LE = 0;
        delay_us(1);
       
        for(i = count; i>0; i--)
        {
                for(j = 0; j<8; j++)
                {
                        RotateData <<=1;
                        delay_us(1);
                        iTemp = ADF4351_INPUT_DATA;
                        ADF4351_CLK = 1;
                        if(0x01 == (iTemp&0x01))
                        {
                                RotateData |= 1;
                        }
                        delay_us(1);
                        ADF4351_CLK = 0;
                }
                *(buf+i-1) = RotateData;
        }
        delay_us(1);
        ADF4351_LE = 1;
        delay_us(1);
        ADF4351_LE = 0;
}


void ADF4351Init(void)
{
        u8 buf[4] = {0,0,0,0};
       
        ADF_Output_GPIOInit();
       
        buf[3] = 0x00;
        buf[2] = 0x58;                                //R5
        buf[1] = 0x00;                                //write communication register 0x00580005 to control the progress
        buf[0] = 0x05;                                //to write Register 5 to set digital lock detector
        WriteToADF4351(4,buf);               

        buf[3] = 0x00;                                //R4
        buf[2] = 0xec;                                //(DB23=1)The signal is taken from the VCO directly;(DB22-20:4H)the RF divider is 16;(DB19-12:C8H)R is 200
        buf[1] = 0x80;                                //(DB11=0)VCO powerd up;
        buf[0] = 0x3C;                                //(DB5=1)RF output is enabled;(DB4-3=3H)Output power level is 5
        WriteToADF4351(4,buf);               

        buf[3] = 0x00;
        buf[2] = 0x00;                                //R3
        buf[1] = 0x04;                                //(DB14-3:96H)clock divider value is 150.
        buf[0] = 0xB3;
        WriteToADF4351(4,buf);       
       
        buf[3] = 0x00;                                //R2
//        buf[2] = 0x01;                                //(DB6=1)set PD polarity is positive;(DB7=1)LDP is 6nS;
//        buf[1] = 0x0E;                                //(DB8=0)enable fractional-N digital lock detect;
        buf[2] = 0x00;
        buf[1] = 0x4E;
        buf[0] = 0x42;                                //(DB12-9:7H)set Icp 2.50 mA;
        WriteToADF4351(4,buf);                //(DB23-14:1H)R counter is 1

        buf[3] = 0x00;
        buf[2] = 0x00;                                //R1
        buf[1] = 0x80;                           //(DB14-3:6H)MOD counter is 6;
        buf[0] = 0x29;                           //(DB26-15:6H)PHASE word is 1,neither the phase resync
        WriteToADF4351(4,buf);           //nor the spurious optimization functions are being used
                                                           //(DB27=1)prescaler value is 8/9

        buf[3] = 0x00;
        buf[2] = 0x2c;
        buf[1] = 0x80;                                //R0
        buf[0] = 0x18;                                //(DB14-3:0H)FRAC value is 0;
        WriteToADF4351(4,buf);                //(DB30-15:140H)INT value is 320;
       
       
//        WriteOneRegToADF4351(ADF4351_R0);
//        WriteOneRegToADF4351(ADF4351_R1);
//        WriteOneRegToADF4351(ADF4351_R2);
//        WriteOneRegToADF4351(ADF4351_R3);
//        WriteOneRegToADF4351(ADF4351_R4);
//        WriteOneRegToADF4351(ADF4351_R5);
       
}
void WriteOneRegToADF4351(u32 Regster)
{
        u8 buf[4] = {0,0,0,0};
        buf[3] = (u8)((Regster>>24)&(0X000000FF));
        buf[2] = (u8)((Regster>>16)&(0X000000FF));
        buf[1] = (u8)((Regster>>8) &(0X000000FF));
        buf[0] = (u8)((Regster)&(0X000000FF));
        WriteToADF4351(4,buf);       
}
void ADF4351_Init_some(void)
{
        WriteOneRegToADF4351(ADF4351_R2);
        WriteOneRegToADF4351(ADF4351_R3);
        WriteOneRegToADF4351(ADF4351_R5);
}

void ADF4351WriteFreq(float Fre)                //        (xx.x) M Hz
{
        u16 Fre_temp, N_Mul = 1, Mul_Core = 0;
        u16 INT_Fre, Frac_temp, Mod_temp, i;
        u32 W_ADF4351_R0 = 0, W_ADF4351_R1 = 0, W_ADF4351_R4 = 0;
        float multiple;
       
        if(Fre < 35.0)
                Fre = 35.0;
        if(Fre > 4400.0)
                Fre = 4400.0;
        Mod_temp = 250;
        Fre = ((float)((u32)(Fre*10)))/10;
       
        Fre_temp = Fre;
        for(i = 0; i < 10; i++)
        {
                if(((Fre_temp*N_Mul) >= 2199.9) && ((Fre_temp*N_Mul) <= 4400.1))
                        break;
                Mul_Core++;
                N_Mul = N_Mul*2;
        }
       
        multiple = (Fre*N_Mul)/25;                //帶寬出已固定為參考25M,若改參考頻率,則應(yīng)修改R4低字節(jié)
        INT_Fre = (u16)multiple;
//        if(((u32)(multiple*10000)%10)> 5)
//                multiple += 0.001;
        Frac_temp = ((u32)(multiple*250))%250;
        while(((Frac_temp%5) == 0) && ((Mod_temp%5) == 0))
        {
                Frac_temp = Frac_temp/5;
                Mod_temp = Mod_temp/5;
        }
        while(((Frac_temp%2) == 0)&&((Mod_temp%2) == 0))
        {
                Frac_temp = Frac_temp/2;
                Mod_temp = Mod_temp/2;
        }
       
        Mul_Core %= 7;
        W_ADF4351_R0 = (INT_Fre<<15)+(Frac_temp<<3);
        W_ADF4351_R1 = ADF4351_R1_Base + (Mod_temp<<3);
        W_ADF4351_R4 = ADF4351_R4_ON + (Mul_Core<<20);
       
       
//        WriteOneRegToADF4351(ADF4351_PD_OFF); //ADF4351_RF_OFF
//        WriteOneRegToADF4351((u32)(ADF4351_R4_OFF + (6<<20)));
        WriteOneRegToADF4351(ADF4351_RF_OFF);
        WriteOneRegToADF4351(W_ADF4351_R1);
        WriteOneRegToADF4351(W_ADF4351_R0);
        WriteOneRegToADF4351(W_ADF4351_R4);
//        WriteOneRegToADF4351(ADF4351_PD_ON);
       
//        WriteOneRegToADF4351((u32)(ADF4351_R4_ON + (Mul_Core<<20)));
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1 發(fā)表于 2020-4-14 01:20 | 只看該作者
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 黄色大片网站 | 波霸ol一区二区 | 性生生活大片免费看视频 | 精品粉嫩aⅴ一区二区三区四区 | 在线观看av网站永久 | 亚洲欧美一区二区在线观看 | 欧美 日韩 视频 | 久久久久久久久久久久久九 | 国产成人综合一区二区三区 | 日韩视频专区 | 欧美三级在线 | 国产成人短视频在线观看 | 国产精品久久精品 | 日韩成人在线观看 | 在线观看第一区 | 在线视频成人 | 在线一区二区观看 | 天堂精品 | 久久青草av| 伊人网综合在线观看 | 97精品超碰一区二区三区 | 成人免费视频一区 | 日韩国产免费观看 | 在线欧美日韩 | 国产视频精品在线观看 | 91九色在线观看 | 国产一区二区久久 | 一级片免费视频 | 国产线视频精品免费观看视频 | 日本精品一区二区 | 欧美精品一区二区三区在线播放 | 日本爱爱视频 | 一区2区 | 在线国产中文字幕 | 日韩欧美国产精品一区二区三区 | 男女午夜免费视频 | jav成人av免费播放 | 91在线视频网址 | 欧美日韩亚洲三区 | 一区二区成人 | 资源首页二三区 |