首页天道酬勤stm32做函数信号发生器,stm32实现DDS

stm32做函数信号发生器,stm32实现DDS

张世龙 05-13 03:27 107次浏览

DDS信号发生器采用直接数字频率合成器(DDS )技术,可以将信号发生器的稳频、准确度提高到与基准频率相同的水平,并在较宽的频率范围内进行精细的频率调节。 该方法设计的信号源在调制状态下工作,可以调节输出电平,输出各种波形。

上述内存查找表中保存了完整周期的函数波形。 相位累加器跟踪输出函数的电流相位。 为了输出非常低的频率,样本之间的相位差()非常小。 例如,缓慢的正弦波可能具有一次相位。 波形的第0个样本取0度时刻的正弦波的宽度,波形的第1个样本取1度时刻的正弦波的宽度,依次类推。 经过360次采样,输出正弦曲线的全部360度,准确地说是1个周期。 快速正弦波可能有10度的相位。 于是,在36次采样中输出正弦波的1个周期。 如果保持采样率恒定,上述慢正弦波的频率将比较快的正弦波慢10倍。 另外,一定的相位会导致一定的正弦波频率的输出。 但是,DDS技术可以用频率计迅速改变信号的相位。 函数发生器可以指定包括由波形的频率和持续时间信息构成的段的频率表。 函数发生器按顺序生成每个定义的频率段。 通过生成频率表,可以构建复杂的频率扫描信号和频率跳跃信号。 ds允许函数生成器的相位从一级连续变化到二级。 矢量信号发生器提供了高灵活性和强大的解决方案,可用于科研、通信、家电、航天/国防、半导体测试和软件无线电、射频识别(RFID )、无线传感器网络等新兴领域。 一些公司还提供许多其他模拟输出产品,利用DAC生成模拟信号。 模拟输出板的基本体系结构是将小型FIFO内存连接到DAC。 大多数模拟输出板用于生成静态电压,大多用于生成低频波形。

STM32内部内置有12位ADC,通过查找表的方式输出各电压

# include ' sign.h ' u 16 sine wave _ value [ 256 ]; /*****正弦波输出表********/cycle:波形表的位数(0~256 )//Um:输出电压的峰值(0~1.5 ) ) ) /***** () ) ) ) ) 周期; I ) d[I]=(U16 ) (Um*sin ) ) 1.0*I/(周期-1) ) *2* pi (um ) ) *4095/3.3 ); }/* * * * * * * * * * * * * * * * * * * * * * * * */voidsinewave _ gpio _ config (void ) ) gpio RCC _ AP //gpio _ init structure.gpio _ mode=gpio _ mode _ out _ PP; //推挽输出模式gpio _ init structure.gpio _ speed=gpio _ speed _ 50m Hz; //输出速率gpio _ init structure.gpio _ pin=gpio _ pin _ 4; //选择管脚gpio_setbits(gpioa,GPIO_Pin_4); //提升输出gpio_init(gpioa,GPIO_InitStructure ); //gpio _ init structure.gpio _ mode=初始化gpio _ mode _ IPU//推挽输出模式gpio _ init structure.gpio _ pin=gpio \ //选择管脚gpio_init(gpiod,GPIO_InitStructure ); /初始化(()、)、、、以及、、、、、、、、//打开DAC时钟/* * * * * * * * *初始化DAC结构* * * * * * * * * * * * * * * */DAC _ struct init (DAC _ init structure DAC _ ) //波形DAC _ init structure.DAC _ output buffer=DAC _ output buffer _ enable; 无法输出//缓存DAC_Ini

tStructure.DAC_Trigger = DAC_Trigger_None;//DAC触发为定时器2触发 DAC_Init(DAC_Channel_1, &DAC_InitStructure);//初始化 DAC_Cmd(DAC_Channel_1, ENABLE); //使能DAC的通道1 //DAC_DMACmd(DAC_Channel_1, ENABLE); //使能DAC通道1的DMA }/*********定时器初始化************/void SineWave_hcdjj_Config(u32 Wave1_Fre){ hcdjj_TimeBaseInitTypeDef hcdjj_TimeBaseStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_hcdjj2, ENABLE);//开时钟 hcdjj_TimeBaseStructInit(&hcdjj_TimeBaseStructure); hcdjj_TimeBaseStructure.hcdjj_Prescaler = 0x0; //不预分频 hcdjj_TimeBaseStructure.hcdjj_ClockDivision = 0x0; //不分频<br>  hcdjj_TimeBaseStructure.hcdjj_CounterMode = hcdjj_CounterMode_Up;//向上计数 hcdjj_TimeBaseStructure.hcdjj_Period = Wave1_Fre;//设置输出频率 hcdjj_TimeBaseInit(hcdjj2, &hcdjj_TimeBaseStructure); hcdjj_SelectOutputTrigger(hcdjj2, hcdjj_TRGOSource_Update);//设置hcdjjE输出触发为更新模式}/*********DMA配置***********/void SineWave_DMA_Config(void){ DMA_InitTypeDef DMA_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);//开启DMA2时钟 DMA_StructInit( &DMA_InitStructure); //DMA结构体初始化 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;//从寄存器读数据 DMA_InitStructure.DMA_BufferSize = 256;//寄存器大小 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//外设地址不递增 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //内存地址递增 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;//宽度为半字 DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;//宽度为半字 DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;//优先级非常高 DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;//关闭内存到内存模式 DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;//循环发送模式DMA_InitStructure.DMA_PeripheralBaseAddr = DAC_DHR12R1;//外设地址为DAC通道1的地址DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)SineWave_Value;//波形数据表内存地址DMA_Init(DMA2_Channel3, &DMA_InitStructure);//初始化DMA_Cmd(DMA2_Channel3, ENABLE); //使能DMA通道3    }/**********正弦波初始化**********************///Wave1_Fre:频率值(0~60 000)Hz//Um :电压峰值(0.0~1.5)V/*******************************************/void SineWave_Init(u16 Wave1_Fre,float Um){u32 f1;f1=(u32)(8000000/sizeof(SineWave_Value)*2/Wave1_Fre);//计算频率SineWave_Data(256,SineWave_Value,Um); //生成输出正弦波的波形表SineWave_GPIO_Config(); //初始化io//SineWave_hcdjj_Config(f1); //初始化定时器SineWave_DAC_Config(); //配置DAC//SineWave_DMA_Config(); //配置DMA//hcdjj_Cmd(hcdjj2, ENABLE); //开启定时器}

 

 

mpeg-2是什么格式,编码器mpeg4和h264 fpga信号发生器难度如何,fpga的信号发生器设计好写吗