24年电赛C题-无线传输信号模拟系统
1、赛题回顾
2、系统软件介绍
- 按键通过中断触发,STM32F103 使用 SPI 协议向 AD9959 DDS 信号发生器发送 4 路可变幅值、频率和相位的正弦信号。按键还能用来实时修改这些幅值、频率和相位参数,并通过 SPI 将设置值传给 AD9959。除此之外,STM32F103 还控制继电器闭合状态,以选择输出的是 AM 信号还是 CW 信号。
系统流程图:
3、硬件部分说明
- 核心控制电路:STM32F103,Cortex-M3内核,最高频率72MHz,Flash存储器64KB或128KB,SRAM存储器20KB,支持模拟转换,包括12位ADC和12位DAC。
- DDS信号发生器电路:AD9959,4个同步DDS通道,正好可以发送两个载波和调制波,通道间独立的频率/相位/幅度控制,可以同时设置两个不同的频率/相位/幅度,频率/相位/幅度变化的延迟匹配。
- OPA847,是一款宽带、超低失真、超低噪声的电 压反馈型运算放大器。模块支持最高正负6.5V供电、高达3.9G的增益带宽积、 950V/us 的压摆率、高达75mA的输出驱动电流,可广泛的应用于ADC前端放 大、宽带高增益放大器以及低噪声差动放大器等场合。同时模块预留了接线端子 的信号输入输出接口,方便客户在低频应用时,可选择端子连接。
3.1、放大模块电路
电路:
3.2、乘法器
- 采用PDIP-8或者SOIC-8封装,能够完成W-XY十2功能,X和Y输入信号范围为-1~+1V,带宽为250MHz,在20ns内可稳定到满刻度的±0.1%,乘法器噪声为50nV/根号Hz,差分乘法器输入X和y、求和输入Z具有高的输入匪抗,输出引脚端W具有低的输出阻抗,输出电压范围为-2.5~+2.5V,可驱动负载电阻为25Q。其电源电压为±5V,电流消耗为25mA;工作温度范围为-40~+85℃。
电路:
4、系统程序设计
4.1、系统初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
MYDMA1_Config(DMA1_Channel1,(u32)&ADC1->DR,(u32)¤tadc,1);
Usart1_Init();
delay_init();
LED_Init();
EXTIX_Init();
LCD_Init();
Adc_Init();
BEEP_Init();
KEY_Init();
TIM2_PWM_Init(T-1,pre-1);
TIM4_Int_Init(72,10000);
LCD_Clear(BLACK);
LCD_Display_Dir(0);
window();
MySPI_Init();
Digres_Set1(26);
Digres_Set2(170);
LCD_ShowNum(1,1,0,8,16);
ad9959_gpio_init();
ad9959_set_signal_out(1,30000000,0,491*0.9);
ad9959_set_signal_out(0,2000000,0,1023);
ad9959_set_signal_out(3,2000000,0,1000);
ad9959_set_signal_out(2,39000000,0,700);
jidianqi_Init();
Key_Init();
4.2、AD9834驱动程序
/****************************************************************
函数名称: AD9834_Write_16Bits
功 能: 向AD9834写入16为数据
参 数: data -- 要写入的16位数据
返回值 : 无
*****************************************************************/
void AD9834_Write_16Bits(unsigned int data)
{
unsigned char i = 0 ;
AD9834_SCLK_SET ;
AD9834_FSYNC_CLR ;
for(i=0 ;i<16 ;i++)
{
if(data & 0x8000)
AD9834_SDATA_SET ;
else
AD9834_SDATA_CLR ;
AD9834_SCLK_CLR ;
data <<= 1 ;
AD9834_SCLK_SET ;
}
AD9834_SDATA_SET ;
AD9834_FSYNC_SET ;
}
/***********************************************************************************
函数名称:AD9834_Select_Wave
功 能:软件为控制,
--------------------------------------------------
IOUT正弦波 ,SIGNBITOUT方波 ,写FREQREG0 ,写PHASE0
ad9834_write_16bit(0x2028) 一次性写FREQREG0
ad9834_write_16bit(0x0038) 单独改写FREQREG0的LSB
ad9834_write_16bit(0x1038) 单独改写FREQREG0的MSB
--------------------------------------------------
IOUT三角波 ,写PHASE0
ad9834_write_16bit(0x2002) 一次性写FREQREG0
ad9834_write_16bit(0x0002) 单独改写FREQREG0的LSB
ad9834_write_16bit(0x1008) 单独改写FREQREG0的MSB
参 数:initdata -- 要输入的命令
返回值 :无
************************************************************************************/
void AD9834_Select_Wave(unsigned int initdata)
{
AD9834_FSYNC_SET;
AD9834_SCLK_SET;
AD9834_RESET_SET;
AD9834_RESET_SET;
AD9834_RESET_CLR;
AD9834_Write_16Bits(initdata);
}
/****************************************************************
函数名称: Init_AD9834
功 能: 初始化AD9834控制引脚 参 数: 无
返回值 : 无
*****************************************************************/
// B6 FS B5 PS B7 FSY B8 SCK B9 SDA B10 RST
void AD9834_Init()
{
GPIO_InitTypeDef GPIO_InitStructure ;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE); //使能PB,PE端口时钟
GPIO_InitStructure.GPIO_Pin = AD9834_FSYNC | AD9834_SCLK | AD9834_SDATA | AD9834_RESET|AD9834_FS|AD9834_PS ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;
GPIO_Init(AD9834_Control_Port ,&GPIO_InitStructure) ;
GPIO_ResetBits(GPIOB, AD9834_FS);
GPIO_ResetBits(GPIOB, AD9834_PS);
AD9834_Write_16Bits(0x2100);
AD9834_Write_16Bits(0x2038);
AD9834_Write_16Bits(0XC000);
AD9834_Write_16Bits(0x2100);
}
/****************************************************************
函数名称: AD9834_Set_Freq
功 能: 设置频率值
参 数: freq_number -- 要写入的平率寄存器(FREQ_0或FREQ_1)
freq -- 频率值 (Freq_value(value)=Freq_data(data)*FCLK/2^28)
返回值 : 无
*****************************************************************/
void AD9834_Set_Freq(unsigned char freq_number, unsigned long freq)
{
unsigned long FREQREG = (unsigned long)(268435456.0/AD9834_SYSTEM_COLCK*freq);
unsigned int FREQREG_LSB_14BIT = (unsigned int)FREQREG;
unsigned int FREQREG_MSB_14BIT = (unsigned int)(FREQREG>>14);
if(freq_number == FREQ_0)
{
FREQREG_LSB_14BIT &= ~(1U<<15);
FREQREG_LSB_14BIT |= 1<<14;
FREQREG_MSB_14BIT &= ~(1U<<15);
FREQREG_MSB_14BIT |= 1<<14;
}
else
{
FREQREG_LSB_14BIT &= ~(1<<14);
FREQREG_LSB_14BIT |= 1U<<15;
FREQREG_MSB_14BIT &= ~(1<<14);
FREQREG_MSB_14BIT |= 1U<<15;
}
AD9834_Write_16Bits(FREQREG_LSB_14BIT);
AD9834_Write_16Bits(FREQREG_MSB_14BIT);
}
5、资料下载
- https://download.csdn.net/download/m0_51061483/91396022
6、历年电赛试题解析专栏
- 点击查看:电赛试题解析汇总:https://blog.csdn.net/m0_51061483/category_10443456.html
阅读全文
33