乘法器设计报告.docx
《乘法器设计报告.docx》由会员分享,可在线阅读,更多相关《乘法器设计报告.docx(10页珍藏版)》请在冰点文库上搜索。
乘法器设计报告
乘法器电路设计实现
一、系统总体设计框图
二、核心电路原理图
2.1调理电路
100khz正弦波的调理电路采用带通滤波器实现
100hz到3khz可调正弦波的调理电路采用低通滤波器加一个截止频率很低的高通滤波器进行波形调理,采用反相放大器进行幅度调节,实现幅度从2mv到5v可调
2.2乘法器电路
2.3主要程序流程图
2.4完整程序代码
/*Includes------------------------------------------------------------------*/
#include"stm32f10x.h"
#include"math.h"
#defineDAC_DHR12RD_Address0x40007414//2ch
#defineDAC_DHR12R2_Address0x40007408//1ch
DAC_InitTypeDefDAC_InitStructure;
DMA_InitTypeDefDMA_InitStructure;
TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;
uint32_tIdx=0;
uint16_tDAC2_num=0;
uint16_tDAC2_data[1000];
uint16_tDAC2_updatetime=72*10-1;
uint32_tFreq=0;
uint8_ti,j,k,temp;
charnum,n;
uint16_tkeys[]={0x0007,0x000b,0x000d,0x000e};
/*Privatemacro-------------------------------------------------------------*/
/*Privatevariables---------------------------------------------------------*/
constuint16_tSin12bit[36]={2347,2684,3000,3286,3532,3732,3879,3970,4000,
3970,3879,3732,3532,3286,3000,2684,2347,2000,1653,
1316,1000,714,468,268,121,30,0,30,121,
268,468,714,1000,1316,1653,2000};
/*Privatefunctionprototypes-----------------------------------------------*/
voidRCC_Configuration(void);
voidGPIO_Configuration(void);
voidDelay(__IOuint32_tnCount);
charkeyscan(void);
intmain(void)
{
DAC2_num=36;
for(k=0;k<36;k++)
{
DAC2_data[k]=Sin12bit[k];
}
RCC_Configuration();
GPIO_Configuration();
/*TIM2Configuration*/
/*Timebaseconfiguration*/
TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.TIM_Period=19;
TIM_TimeBaseStructure.TIM_Prescaler=0x0;
TIM_TimeBaseStructure.TIM_ClockDivision=0x0;
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
/*TIM2TRGOselection*/
TIM_SelectOutputTrigger(TIM2,TIM_TRGOSource_Update);
/*DACchannel1Configuration*/
DAC_InitStructure.DAC_Trigger=DAC_Trigger_T2_TRGO;
DAC_InitStructure.DAC_WaveGeneration=DAC_WaveGeneration_None;
DAC_InitStructure.DAC_OutputBuffer=DAC_OutputBuffer_Disable;
DAC_Init(DAC_Channel_2,&DAC_InitStructure);
DMA_DeInit(DMA2_Channel4);
DMA_InitStructure.DMA_PeripheralBaseAddr=DAC_DHR12RD_Address;
DMA_InitStructure.DMA_MemoryBaseAddr=(uint32_t)&Sin12bit;
DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralDST;
DMA_InitStructure.DMA_BufferSize=36;
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_Mode=DMA_Mode_Circular;
DMA_InitStructure.DMA_Priority=DMA_Priority_High;
DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;
DMA_Init(DMA2_Channel4,&DMA_InitStructure);
/*EnableDMA2Channel4*/
DMA_Cmd(DMA2_Channel4,ENABLE);
DAC_Cmd(DAC_Channel_2,ENABLE);
DAC_DMACmd(DAC_Channel_2,ENABLE);
/*TIM2enablecounter*/
TIM_Cmd(TIM2,ENABLE);
TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.TIM_Period=DAC2_updatetime;
TIM_TimeBaseStructure.TIM_Prescaler=0x0;
TIM_TimeBaseStructure.TIM_ClockDivision=0x0;
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStructure);
/*TIM2TRGOselection*/
TIM_SelectOutputTrigger(TIM4,TIM_TRGOSource_Update);
/*DACchannel1Configuration*/
DAC_InitStructure.DAC_Trigger=DAC_Trigger_T4_TRGO;
DAC_InitStructure.DAC_WaveGeneration=DAC_WaveGeneration_None;
DAC_InitStructure.DAC_OutputBuffer=DAC_OutputBuffer_Disable;
DAC_Init(DAC_Channel_1,&DAC_InitStructure);
DMA_DeInit(DMA2_Channel3);
DMA_InitStructure.DMA_PeripheralBaseAddr=DAC_DHR12R2_Address;
DMA_InitStructure.DMA_MemoryBaseAddr=(uint32_t)&DAC2_data;
DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralDST;
DMA_InitStructure.DMA_BufferSize=DAC2_num;
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_Mode=DMA_Mode_Circular;
DMA_InitStructure.DMA_Priority=DMA_Priority_High;
DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;
DMA_Init(DMA2_Channel3,&DMA_InitStructure);
/*EnableDMA2Channel4*/
DMA_Cmd(DMA2_Channel3,ENABLE);
DAC_Cmd(DAC_Channel_1,ENABLE);
DAC_DMACmd(DAC_Channel_1,ENABLE);
TIM_Cmd(TIM4,ENABLE);
while
(1)
{
GPIOD->ODR=0x0;
while((GPIOF->IDR&0x0f)==0x0f);
n=keyscan();
if(n==10||n==11||n==12||n==13||n==14||n==15)
{
if(n==10)
Freq=Freq+1;
elseif(n==11&&Freq>80)
Freq=Freq-1;
elseif(n==14)
Freq=Freq+10;
elseif(n==15)
{
if(Freq>90)
Freq=Freq-10;
}
if(n==12)
{
Freq=0;
while(n!
=13)
{
GPIOD->ODR=0;
while((GPIOF->IDR&0x0f)==0x0f);
n=keyscan();
if(n<10)
Freq=10*Freq+n;
}
}
//update;
if((Freq>=80)&&(Freq<=4000))
{
if((Freq>=80)&&(Freq<400))
DAC2_updatetime=3600;
elseif((Freq>=400)&&(Freq<1600))
DAC2_updatetime=900;
elseif((Freq>=1600)&&(Freq<=4000))
DAC2_updatetime=200;
DAC2_num=72000000/DAC2_updatetime/Freq;
for(k=0;k{
DAC2_data[k]=(sin(2*3.14*k/DAC2_num)+1)*600;
DAC2_data[k]=(u16)DAC2_data[k];
}
DMA_Cmd(DMA2_Channel3,DISABLE);
TIM_Cmd(TIM4,DISABLE);
TIM_TimeBaseStructure.TIM_Period=DAC2_updatetime;
TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStructure);
TIM_Cmd(TIM4,ENABLE);
DMA_InitStructure.DMA_PeripheralBaseAddr=DAC_DHR12R2_Address;
DMA_InitStructure.DMA_MemoryBaseAddr=(uint32_t)&DAC2_data;
DMA_InitStructure.DMA_BufferSize=DAC2_num;
DMA_Init(DMA2_Channel3,&DMA_InitStructure);
DMA_Cmd(DMA2_Channel3,ENABLE);
}
}
}
}
voidRCC_Configuration(void)
{
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2,ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
/*GPIOAPeriphclockenable*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOF,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2|RCC_APB1Periph_TIM4,ENABLE);
}
charkeyscan(void)
{
Delay(100000);
for(i=0;i<4;i++)
{
GPIOD->ODR=keys[i];
temp=0x08;
for(j=0;j<4;j++)
{
if(!
(GPIOF->IDR&temp))
{
num=j+4*i;
}
temp>>=1;
}
}
Delay(2000000);
returnnum;
}
voidGPIO_Configuration(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(GPIOD,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOF,&GPIO_InitStructure);
}
voidDelay(__IOuint32_tnCount)
{
for(;nCount!
=0;nCount--);
}