AD9833模塊電路原理圖如下:
51hei.png (56.33 KB, 下載次數: 31)
下載附件
2023-8-2 14:41 上傳
AD9833引腳圖及pdf資料:
51hei.png (135.85 KB, 下載次數: 33)
下載附件
2023-8-2 14:41 上傳
實驗操作:
1、使用排線連接驅動板與AD9833模塊,驅動板上排線方向唯一,驅動板以及DDS模塊上,板子背面雙排針,方形焊盤為雙排針1腳,對應連接即可
2、使用5V電源連接AD9833模塊,使用5V電源連接DDS驅動板,
3、AD9833模塊側面輸出高頻頭,使用SMA屏蔽線,連接示波器
3、編譯該代碼,使用jlink下載器下載代碼到驅動板
4、確保AD9833模塊已上電。按下驅動板復位鍵(或驅動板重新上電),調整示波器時間檔位到合適位置,即可觀察到輸出波形
5、如使用自己的STM32開發板,請按下方描述接線,如使用其他引腳請自行移植更改程序。
/*********************************************************************************************/
【*】 引腳分配
STM32控制板 模塊絲印 芯片引腳名 功能
PA3 -----> SYKC FSYNC 低電平有效控制輸入
PA4 <-----> CLK SCLK 串行時鐘輸入
PA5 -----> DATA SDATA 串行數據輸入
(3.3V,5V均可) -----> V+ 控制板3.3V或5V與AD9833模塊V+連接。
GND <----> GND 控制板與AD9833模塊需共地。
浮空 ------ 其他 所有未說明但模塊有留出管腳,未使用可直接浮空,功能請參考數據手冊
單片機源程序如下:- 作者:康威電子,大家可以找他獲得模塊
- /**********************************************************
- 功能:參考時鐘25MHz,stm32f103rct6控制AD9833點頻調相位輸出,正弦波范圍0-10M,
- 方波:0-500K,三角波:0-1M 。
- 接口:控制引腳接口請參照AD9833.h
- 時間:2023/06/08
- 版本:2.1
- 作者:康威電子
- 其他:本程序只供學習使用
- AD9833 單片機
- 硬件連接: SYKC——PA3;
- CLK ——PA4;
- DATA——PA5;
- V+——(3.3V,5V均可)
- GND--GND(0V)
- **********************************************************/
- #include "stm32_config.h"
- #include "stdio.h"
- #include "AD9833.h"
- int main(void)
- {
- MY_NVIC_PriorityGroup_Config(NVIC_PriorityGroup_2); //設置中斷分組
- delay_init(72); //初始化延時函數
- delay_ms(500);//延時一會兒,等待上電穩定,確保AD9833比控制板先上電。
-
- //代碼移植建議
- //1.修改頭文件AD9833.h中,自己控制板實際需要使用哪些控制引腳。如AD9833_FSYNC腳改成PA1控制,則定義"#define AD9833_FSYNC PAout(1)"
- //2.修改C文件AD9833.c中,AD983_GPIO_Init函數,所有用到管腳的GPIO輸出功能初始化
- //3.完成
-
- AD9833_Init();//IO口及AD9833寄存器初始化
-
- //頻率入口參數為float,可使信號的頻率更精確
- AD9833_SetFrequencyQuick(1000.0,AD9833_OUT_SINUS);//寫輸出頻率1000.0Hz,輸出正弦波
- // AD9833_SetFrequencyQuick(1000.0,AD9833_OUT_TRIANGLE);//寫輸出頻率1000.0Hz,輸出三角波
- // AD9833_SetFrequencyQuick(1000.0,AD9833_OUT_MSB);//寫輸出頻率1000.0Hz,輸出方波
- while(1)
- {
- AD9833_SetPhase(AD9833_REG_PHASE0,0); //設置0°相位,范圍:0-4095(0-360°)
- delay_ms(2);
- AD9833_SetPhase(AD9833_REG_PHASE0,2048);//設置180°相位,范圍:0-4095(0-360°)
- delay_ms(2);
-
- }
- }
復制代碼- #include "AD9833.h"
- #include "delay.h"
- //時鐘速率為25 MHz時, 可以實現0.1 Hz的分辨率;而時鐘速率為1 MHz時,則可以實現0.004 Hz的分辨率。
- //調整參考時鐘修改此處即可。
- #define FCLK 25000000 //設置參考時鐘25MHz,板默認板載晶振頻率25Mhz。
- #define RealFreDat 268435456.0/FCLK//總的公式為 Fout=(Fclk/2的28次方)*28位寄存器的值
- /************************************************************
- ** 函數名稱 :void AD983_GPIO_Init(void)
- ** 函數功能 :初始化控制AD9833需要用到的IO口
- ** 入口參數 :無
- ** 出口參數 :無
- ** 函數說明 :無
- **************************************************************/
- void AD983_GPIO_Init(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure ;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能PA端口時鐘
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3| GPIO_Pin_4| GPIO_Pin_5;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;
- GPIO_Init(GPIOA ,&GPIO_InitStructure) ;
- }
- /**********************************************************************************************
- ** 函數名稱 :unsigned char AD9833_SPI_Write(unsigned char* data,unsigned char bytesNumber)
- ** 函數功能 :使用模擬SPI向AD9833寫數據
- ** 入口參數 :* data:寫入數據緩沖區,第一個字節是寄存器地址;第二個字節開始要寫入的數據。
- bytesNumber: 要寫入的字節數
- ** 出口參數 :無
- ** 函數說明 :無
- ************************************************************************************************/
- unsigned char AD9833_SPI_Write(unsigned char* data,unsigned char bytesNumber)
- {
- unsigned char i,j;
- unsigned char writeData[5] = {0,0, 0, 0, 0};
-
- AD9833_SCLK=1;
- AD9833_FSYNC=0 ;
- for(i = 0;i < bytesNumber;i ++)
- {
- writeData[i] = data[i + 1];
- }
-
- for(i=0 ;i<bytesNumber ;i++)
- {
- for(j=0 ;j<8 ;j++)
- {
- if(writeData[i] & 0x80)
- AD9833_SDATA=1;
- else
- AD9833_SDATA=0;
- AD9833_SCLK=0;
- writeData[i] <<= 1;
- AD9833_SCLK=1;
- }
- }
- AD9833_SDATA=1;
- AD9833_FSYNC=1;
-
- return i;
- }
- /************************************************************
- ** 函數名稱 :void AD9833_Init(void)
- ** 函數功能 :初始化控制AD9833需要用到的IO口及寄存器
- ** 入口參數 :無
- ** 出口參數 :無
- ** 函數說明 :無
- **************************************************************/
- void AD9833_Init(void)
- {
- AD983_GPIO_Init();
- AD9833_SetRegisterValue(AD9833_REG_CMD | AD9833_RESET);
- }
- /*****************************************************************************************
- ** 函數名稱 :void AD9833_Reset(void)
- ** 函數功能 :設置AD9833的復位位
- ** 入口參數 :無
- ** 出口參數 :無
- ** 函數說明 :無
- *******************************************************************************************/
- void AD9833_Reset(void)
- {
- AD9833_SetRegisterValue(AD9833_REG_CMD | AD9833_RESET);
- delay_ms(10);
- }
- /*****************************************************************************************
- ** 函數名稱 :void AD9833_ClearReset(void)
- ** 函數功能 :清除AD9833的復位位。
- ** 入口參數 :無
- ** 出口參數 :無
- ** 函數說明 :無
- *******************************************************************************************/
- void AD9833_ClearReset(void)
- {
- AD9833_SetRegisterValue(AD9833_REG_CMD);
- }
- /*****************************************************************************************
- ** 函數名稱 :void AD9833_SetRegisterValue(unsigned short regValue)
- ** 函數功能 :將值寫入寄存器
- ** 入口參數 :regValue:要寫入寄存器的值。
- ** 出口參數 :無
- ** 函數說明 :無
- *******************************************************************************************/
- void AD9833_SetRegisterValue(unsigned short regValue)
- {
- unsigned char data[5] = {0x03, 0x00, 0x00};
-
- data[1] = (unsigned char)((regValue & 0xFF00) >> 8);
- data[2] = (unsigned char)((regValue & 0x00FF) >> 0);
- AD9833_SPI_Write(data,2);
- }
- /*****************************************************************************************
- ** 函數名稱 :void AD9833_SetFrequencyQuick(float fout,unsigned short type)
- ** 函數功能 :寫入頻率寄存器
- ** 入口參數 :val:要寫入的頻率值。
- ** type:波形類型;AD9833_OUT_SINUS正弦波、AD9833_OUT_TRIANGLE三角波、AD9833_OUT_MSB方波
- ** 出口參數 :無
- ** 函數說明 :時鐘速率為25 MHz時, 可以實現0.1 Hz的分辨率;而時鐘速率為1 MHz時,則可以實現0.004 Hz的分辨率。
- *******************************************************************************************/
- void AD9833_SetFrequencyQuick(float fout,unsigned short type)
- {
- AD9833_SetFrequency(AD9833_REG_FREQ0, fout,type);
- }
- /*****************************************************************************************
- ** 函數名稱 :void AD9833_SetFrequency(unsigned short reg, float fout,unsigned short type)
- ** 函數功能 :寫入頻率寄存器
- ** 入口參數 :reg:要寫入的頻率寄存器。
- ** val:要寫入的值。
- ** type:波形類型;AD9833_OUT_SINUS正弦波、AD9833_OUT_TRIANGLE三角波、AD9833_OUT_MSB方波
- ** 出口參數 :無
- ** 函數說明 :無
- *******************************************************************************************/
- void AD9833_SetFrequency(unsigned short reg, float fout,unsigned short type)
- {
- unsigned short freqHi = reg;
- unsigned short freqLo = reg;
- unsigned long val=RealFreDat*fout;
- freqHi |= (val & 0xFFFC000) >> 14 ;
- freqLo |= (val & 0x3FFF);
- AD9833_SetRegisterValue(AD9833_B28|type);
- AD9833_SetRegisterValue(freqLo);
- AD9833_SetRegisterValue(freqHi);
- }
- /*****************************************************************************************
- ** 函數名稱 :void AD9833_SetPhase(unsigned short reg, unsigned short val)
- ** 函數功能 :寫入相位寄存器。
- ** 入口參數 :reg:要寫入的相位寄存器。
- ** val:要寫入的值。
- ** 出口參數 :無
- ** 函數說明 :無
- *******************************************************************************************/
- void AD9833_SetPhase(unsigned short reg, unsigned short val)
- {
- unsigned short phase = reg;
- phase |= val;
- AD9833_SetRegisterValue(phase);
- }
- /*****************************************************************************************
- ** 函數名稱 :void AD9833_Setup(unsigned short freq, unsigned short phase,unsigned short type)
- ** 函數功能 :寫入相位寄存器。
- ** 入口參數 :freq:使用的頻率寄存器。
- phase:使用的相位寄存器。
- type:要輸出的波形類型。
- ** 出口參數 :無
- ** 函數說明 :無
- *******************************************************************************************/
- void AD9833_Setup(unsigned short freq, unsigned short phase,unsigned short type)
- {
- unsigned short val = 0;
-
- val = freq | phase | type;
- AD9833_SetRegisterValue(val);
- }
- /*****************************************************************************************
- ** 函數名稱 :void AD9833_SetWave(unsigned short type)
- ** 函數功能 :設置要輸出的波形類型。
- ** 入口參數 :type:要輸出的波形類型。
- ** 出口參數 :無
- ** 函數說明 :無
- *******************************************************************************************/
- void AD9833_SetWave(unsigned short type)
- {
- AD9833_SetRegisterValue(type);
- }
復制代碼
Keil代碼和pdf資料下載:
AD9833模塊驅動+PDF-V2.1.7z
(1.7 MB, 下載次數: 63)
2023-8-2 14:45 上傳
點擊文件名下載附件
驅動模塊 下載積分: 黑幣 -5
|