資料手冊齊全
51hei.png (9.25 KB, 下載次數: 32)
下載附件
2020-1-21 16:06 上傳
單片機源程序如下:
- #include "ad9833.h"
- #include "common.h"
- //***************************
- // Pin assign
- // STM32 AD9833
- // GPIOB_Pin_15 ---> FSYNC
- // GPIOB_Pin_14 ---> SCK
- // GPIOB_Pin_13 ---> DAT
- // GPIOB_Pin_12 ---> CS
- //***************************
- /*端口定義 */
- #define PORT_FSYNC GPIOB
- #define PIN_FSYNC GPIO_Pin_15
- #define PORT_SCK GPIOB
- #define PIN_SCK GPIO_Pin_14
- #define PORT_DAT GPIOB
- #define PIN_DAT GPIO_Pin_13
- #define PORT_CS GPIOB
- #define PIN_CS GPIO_Pin_12 //數字電位器片選
- //****************************************************************
- #define FSYNC_0() GPIO_ResetBits(PORT_FSYNC, PIN_FSYNC)
- #define FSYNC_1() GPIO_SetBits(PORT_FSYNC, PIN_FSYNC)
- #define SCK_0() GPIO_ResetBits(PORT_SCK, PIN_SCK)
- #define SCK_1() GPIO_SetBits(PORT_SCK, PIN_SCK)
- #define DAT_0() GPIO_ResetBits(PORT_DAT, PIN_DAT)
- #define DAT_1() GPIO_SetBits(PORT_DAT, PIN_DAT)
- #define CS_0() GPIO_ResetBits(PORT_DAT, PIN_CS)
- #define CS_1() GPIO_SetBits(PORT_DAT, PIN_CS)
- //初始化AD9833 GPIO
- void AD9833_Init_GPIO()
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
- GPIO_InitStructure.GPIO_Pin = PIN_FSYNC|PIN_SCK|PIN_DAT|PIN_CS;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_Init(PORT_SCK, &GPIO_InitStructure);
- }
- /*
- *********************************************************************************************************
- * 函 數 名: AD9833_Delay
- * 功能說明: 時鐘延時
- * 形 參: 無
- * 返 回 值: 無
- *********************************************************************************************************
- */
- static void AD9833_Delay(void)
- {
- uint16_t i;
- for (i = 0; i < 1; i++);
- }
- /*
- *********************************************************************************************************
- * 函 數 名: AD9833_Write
- * 功能說明: 向SPI總線發送16個bit數據
- * 形 參: TxData : 數據
- * 返 回 值: 無
- *********************************************************************************************************
- */
- void AD9833_Write(unsigned int TxData)
- {
- unsigned char i;
- SCK_1();
- //AD9833_Delay();
- FSYNC_1();
- //AD9833_Delay();
- FSYNC_0();
- //AD9833_Delay();
- for(i = 0; i < 16; i++)
- {
- if (TxData & 0x8000)
- DAT_1();
- else
- DAT_0();
-
- AD9833_Delay();
- SCK_0();
- AD9833_Delay();
- SCK_1();
-
- TxData <<= 1;
- }
- FSYNC_1();
-
- }
- /*
- *********************************************************************************************************
- * 函 數 名: AD9833_AmpSet
- * 功能說明: 改變輸出信號幅度值
- * 形 參: 1.amp :幅度值 0- 255
- * 返 回 值: 無
- *********************************************************************************************************
- */
- void AD9833_AmpSet(unsigned char amp)
- {
- unsigned char i;
- unsigned int temp;
-
- CS_0();
- temp =0x1100|amp;
- for(i=0;i<16;i++)
- {
- SCK_0();
- if(temp&0x8000)
- DAT_1();
- else
- DAT_0();
- temp<<=1;
- SCK_1();
- AD9833_Delay();
- }
-
- CS_1();
- }
- /*
- *********************************************************************************************************
- * 函 數 名: AD9833_WaveSeting
- * 功能說明: 向SPI總線發送16個bit數據
- * 形 參: 1.Freq: 頻率值, 0.1 hz - 12Mhz
- 2.Freq_SFR: 0 或 1
- 3.WaveMode: TRI_WAVE(三角波),SIN_WAVE(正弦波),SQU_WAVE(方波)
- 4.Phase : 波形的初相位
- * 返 回 值: 無
- *********************************************************************************************************
- */
- void AD9833_WaveSeting(double Freq,unsigned int Freq_SFR,unsigned int WaveMode,unsigned int Phase )
- {
- int frequence_LSB,frequence_MSB,Phs_data;
- double frequence_mid,frequence_DATA;
- long int frequence_hex;
- /*********************************計算頻率的16進制值***********************************/
- frequence_mid=268435456/25;//適合25M晶振
- //如果時鐘頻率不為25MHZ,修改該處的頻率值,單位MHz ,AD9833最大支持25MHz
- frequence_DATA=Freq;
- frequence_DATA=frequence_DATA/1000000;
- frequence_DATA=frequence_DATA*frequence_mid;
- frequence_hex=frequence_DATA; //這個frequence_hex的值是32位的一個很大的數字,需要拆分成兩個14位進行處理;
- frequence_LSB=frequence_hex; //frequence_hex低16位送給frequence_LSB
- frequence_LSB=frequence_LSB&0x3fff;//去除最高兩位,16位數換去掉高位后變成了14位
- frequence_MSB=frequence_hex>>14; //frequence_hex高16位送給frequence_HSB
- frequence_MSB=frequence_MSB&0x3fff;//去除最高兩位,16位數換去掉高位后變成了14位
- Phs_data=Phase|0xC000; //相位值
- AD9833_Write(0x0100); //復位AD9833,即RESET位為1
- AD9833_Write(0x2100); //選擇數據一次寫入,B28位和RESET位為1
- if(Freq_SFR==0) //把數據設置到設置頻率寄存器0
- {
- frequence_LSB=frequence_LSB|0x4000;
- frequence_MSB=frequence_MSB|0x4000;
- //使用頻率寄存器0輸出波形
- AD9833_Write(frequence_LSB); //L14,選擇頻率寄存器0的低14位數據輸入
- AD9833_Write(frequence_MSB); //H14 頻率寄存器的高14位數據輸入
- AD9833_Write(Phs_data); //設置相位
- //AD9833_Write(0x2000); /**設置FSELECT位為0,芯片進入工作狀態,頻率寄存器0輸出波形**/
- }
- if(Freq_SFR==1) //把數據設置到設置頻率寄存器1
- {
- frequence_LSB=frequence_LSB|0x8000;
- frequence_MSB=frequence_MSB|0x8000;
- //使用頻率寄存器1輸出波形
- AD9833_Write(frequence_LSB); //L14,選擇頻率寄存器1的低14位輸入
- AD9833_Write(frequence_MSB); //H14 頻率寄存器1為
- AD9833_Write(Phs_data); //設置相位
- //AD9833_Write(0x2800); /**設置FSELECT位為0,設置FSELECT位為1,即使用頻率寄存器1的值,芯片進入工作狀態,頻率寄存器1輸出波形**/
- }
- if(WaveMode==TRI_WAVE) //輸出三角波波形
- AD9833_Write(0x2002);
- if(WaveMode==SQU_WAVE) //輸出方波波形
- AD9833_Write(0x2028);
- if(WaveMode==SIN_WAVE) //輸出正弦波形
- AD9833_Write(0x2000);
- }
復制代碼
- #include "ad9833.h"
- #include "STC15F2K60S2.H"
- /*端口定義 */
- sbit FSYNC = P1^2;
- sbit CLK = P1^3;
- sbit DAT = P1^4;
- sbit CS = P1^5;
- //****************************************************************
- #define FSYNC_0() FSYNC =0
- #define FSYNC_1() FSYNC =1
- #define SCK_0() CLK = 0
- #define SCK_1() CLK = 1
- #define DAT_0() DAT = 0
- #define DAT_1() DAT = 1
- #define CS_0() CS = 0
- #define CS_1() CS = 1
- /*
- *********************************************************************************************************
- * 函 數 名: AD9833_Delay
- * 功能說明: 時鐘延時
- * 形 參: 無
- * 返 回 值: 無
- *********************************************************************************************************
- */
- static void AD9833_Delay(void)
- {
- unsigned int i;
- for (i = 0; i < 1; i++);
- }
- /*
- *********************************************************************************************************
- * 函 數 名: AD9833_Write
- * 功能說明: 向SPI總線發送16個bit數據
- * 形 參: TxData : 數據
- * 返 回 值: 無
- *********************************************************************************************************
- */
- void AD9833_Write(unsigned int TxData)
- {
- unsigned char i;
- SCK_1();
- //AD9833_Delay();
- FSYNC_1();
- //AD9833_Delay();
- FSYNC_0();
- //AD9833_Delay();
- for(i = 0; i < 16; i++)
- {
- if(TxData&0x8000)
- DAT_1();
- else
- DAT_0();
-
- AD9833_Delay();
- SCK_0();
- AD9833_Delay();
- SCK_1();
-
- TxData <<= 1;
- }
- FSYNC_1();
-
- }
- /*
- *********************************************************************************************************
- * 函 數 名: AD9833_AmpSet
- * 功能說明: 改變輸出信號幅度值
- * 形 參: 1.amp :幅度值 0- 255
- * 返 回 值: 無
- *********************************************************************************************************
- */
- void AD9833_AmpSet(unsigned char amp)
- {
- unsigned char i;
- unsigned int temp;
-
- CS_0();
- temp =0x1100|amp;
- for(i=0;i<16;i++)
- {
- SCK_0();
- if(temp&0x8000)
- DAT_1();
- else
- DAT_0();
- temp<<=1;
- SCK_1();
- AD9833_Delay();
- }
-
- CS_1();
- }
- /*
- *********************************************************************************************************
- * 函 數 名: AD9833_WaveSeting
- * 功能說明: 向SPI總線發送16個bit數據
- * 形 參: 1.Freq: 頻率值, 0.1 hz - 12Mhz
- 2.Freq_SFR: 0 或 1
- 3.WaveMode: TRI_WAVE(三角波),SIN_WAVE(正弦波),SQU_WAVE(方波)
- 4.Phase : 波形的初相位
- * 返 回 值: 無
- *********************************************************************************************************
- */
- void AD9833_WaveSeting(double Freq,unsigned int Freq_SFR,unsigned int WaveMode,unsigned int Phase )
- {
- int frequence_LSB,frequence_MSB,Phs_data;
- double frequence_mid,frequence_DATA;
- long int frequence_hex;
- /*********************************計算頻率的16進制值***********************************/
- frequence_mid=268435456/25;//適合25M晶振
- //如果時鐘頻率不為25MHZ,修改該處的頻率值,單位MHz ,AD9833最大支持25MHz
- frequence_DATA=Freq;
- frequence_DATA=frequence_DATA/1000000;
- frequence_DATA=frequence_DATA*frequence_mid;
- frequence_hex=frequence_DATA; //這個frequence_hex的值是32位的一個很大的數字,需要拆分成兩個14位進行處理;
- frequence_LSB=frequence_hex; //frequence_hex低16位送給frequence_LSB
- frequence_LSB=frequence_LSB&0x3fff;//去除最高兩位,16位數換去掉高位后變成了14位
- frequence_MSB=frequence_hex>>14; //frequence_hex高16位送給frequence_HSB
- frequence_MSB=frequence_MSB&0x3fff;//去除最高兩位,16位數換去掉高位后變成了14位
- Phs_data=Phase|0xC000; //相位值
- AD9833_Write(0x0100); //復位AD9833,即RESET位為1
- AD9833_Write(0x2100); //選擇數據一次寫入,B28位和RESET位為1
- if(Freq_SFR==0) //把數據設置到設置頻率寄存器0
- {
- frequence_LSB=frequence_LSB|0x4000;
- frequence_MSB=frequence_MSB|0x4000;
- //使用頻率寄存器0輸出波形
- AD9833_Write(frequence_LSB); //L14,選擇頻率寄存器0的低14位數據輸入
- AD9833_Write(frequence_MSB); //H14 頻率寄存器的高14位數據輸入
- AD9833_Write(Phs_data); //設置相位
- //AD9833_Write(0x2000); /**設置FSELECT位為0,芯片進入工作狀態,頻率寄存器0輸出波形**/
- }
- if(Freq_SFR==1) //把數據設置到設置頻率寄存器1
- {
- frequence_LSB=frequence_LSB|0x8000;
- frequence_MSB=frequence_MSB|0x8000;
- //使用頻率寄存器1輸出波形
- AD9833_Write(frequence_LSB); //L14,選擇頻率寄存器1的低14位輸入
- AD9833_Write(frequence_MSB); //H14 頻率寄存器1為
- AD9833_Write(Phs_data); //設置相位
- //AD9833_Write(0x2800); /**設置FSELECT位為0,設置FSELECT位為1,即使用頻率寄存器1的值,芯片進入工作狀態,頻率寄存器1輸出波形**/
- }
- if(WaveMode==TRI_WAVE) //輸出三角波波形
- AD9833_Write(0x2002);
- if(WaveMode==SQU_WAVE) //輸出方波波形
- AD9833_Write(0x2028);
- if(WaveMode==SIN_WAVE) //輸出正弦波形
- AD9833_Write(0x2000);
- }
復制代碼
所有資料51hei提供下載:
AD9833資料&文檔.zip
(4.93 MB, 下載次數: 69)
2020-1-21 15:14 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|