乘法器设计报告.docx

上传人:b****3 文档编号:6602887 上传时间:2023-05-10 格式:DOCX 页数:10 大小:82.66KB
下载 相关 举报
乘法器设计报告.docx_第1页
第1页 / 共10页
乘法器设计报告.docx_第2页
第2页 / 共10页
乘法器设计报告.docx_第3页
第3页 / 共10页
乘法器设计报告.docx_第4页
第4页 / 共10页
乘法器设计报告.docx_第5页
第5页 / 共10页
乘法器设计报告.docx_第6页
第6页 / 共10页
乘法器设计报告.docx_第7页
第7页 / 共10页
乘法器设计报告.docx_第8页
第8页 / 共10页
乘法器设计报告.docx_第9页
第9页 / 共10页
乘法器设计报告.docx_第10页
第10页 / 共10页
亲,该文档总共10页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

乘法器设计报告.docx

《乘法器设计报告.docx》由会员分享,可在线阅读,更多相关《乘法器设计报告.docx(10页珍藏版)》请在冰点文库上搜索。

乘法器设计报告.docx

乘法器设计报告

 

乘法器电路设计实现

 

一、系统总体设计框图

二、核心电路原理图

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--);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2