ADC基于stm32的电压电流采集.docx

上传人:b****5 文档编号:5596301 上传时间:2022-12-28 格式:DOCX 页数:18 大小:53.18KB
下载 相关 举报
ADC基于stm32的电压电流采集.docx_第1页
第1页 / 共18页
ADC基于stm32的电压电流采集.docx_第2页
第2页 / 共18页
ADC基于stm32的电压电流采集.docx_第3页
第3页 / 共18页
ADC基于stm32的电压电流采集.docx_第4页
第4页 / 共18页
ADC基于stm32的电压电流采集.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

ADC基于stm32的电压电流采集.docx

《ADC基于stm32的电压电流采集.docx》由会员分享,可在线阅读,更多相关《ADC基于stm32的电压电流采集.docx(18页珍藏版)》请在冰豆网上搜索。

ADC基于stm32的电压电流采集.docx

ADC基于stm32的电压电流采集

ADC基于stm32的电压电流采集,用数码管显示

首先组装硬件,如下图所示:

如上图连接数码管与单片机,然后再按下图做两路电压采集电路,运用op07对电流进行30倍放大即可测得相对精准的电压,如下图所示:

以上步骤完成即可编写程序,程序如下:

*/

/*Includes------------------------------------------------------------------*/

#include"stm32f10x.h"

#include

#include"LED8.h"

#ifdef__GNUC__

/*WithGCC/RAISONANCE,smallprintf(optionLDLinker->Libraries->Smallprintf

setto'Yes')calls__io_putchar()*/

#definePUTCHAR_PROTOTYPEint__io_putchar(intch)

#else

#definePUTCHAR_PROTOTYPEintfputc(intch,FILE*f)

#endif/*__GNUC__*/

#defineADC1_DR_Address((u32)0x4001244C)

 

/*Privatefunctionprototypes-----------------------------------------------*/

voidGPIO_Configuration(void);

voidNVIC_Configuration(void);

voidTIM_Configuration(void);

voidADC_Configuration(void);

voidnumdisplay(uint16_tnum);

voidnumdisplay1(uint16_tnum);

voiddelay(void);

voiddelay()

{

inti,j;

for(i=0;i<0xfffff;i++)j++;

}

vu16ADC_ConvertedValue[3];

/*******************************************************************************

*FunctionName:

main

*Description:

Mainprogram

*Input:

None

*Output:

None

*Return:

None

*Attention:

None

*******************************************************************************/

intmain(void)

{

inti=0;

GPIO_Configuration();

NVIC_Configuration();

TIM_Configuration();

ADC_Configuration();

/*Infiniteloop*/

for(i=0;i<10;i++)

{

numb[i]=i;

}

numb[10]=1;

numb[11]=2;

numb[12]=3;

numb[13]=4;

numb[14]=5;

numb[15]=6;;

 

while

(1)

{delay();

numdisplay((ADC_ConvertedValue[1]/4.096)*10.79);//显示电流值

numdisplay1((ADC_ConvertedValue[2]/4.096)*11.755);//显示电压值

}

}

/*******************************************************************************

*FunctionName:

GPIO_Configuration

*Description:

ConfigureGPIOPin

*Input:

None

*Output:

None

*Return:

None

*Attention:

None

*******************************************************************************/

voidnumdisplay(uint16_tnum)//电流的

{

uint16_ttemp1=0;

uint16_ttemp2=0;

uint16_ttemp3=0;

uint16_ttemp4=0;

if((num<10000)&&(num>=1000))

{

temp1=num/1000;

temp2=(num-temp1*1000)/100;

temp3=(num-temp1*1000-temp2*100)/10;

temp4=num-temp1*1000-temp2*100-temp3*10;

}

elseif((num<1000)&&(num>=100))

{

temp2=num/100;

temp3=(num-temp2*100)/10;

temp4=num-temp2*100-temp3*10;

}

elseif((100>num)&&(num>=10))

{

temp3=num/10;

temp4=num-temp3*10;

}

elseif(num<10)

{

temp4=num;

}

else

{}

numb[12]=temp1;

numb[13]=temp2;

numb[14]=temp3;

numb[15]=temp4;

}

voidnumdisplay1(uint16_tnum)//电压的

{

uint16_ttemp5=0;

uint16_ttemp6=0;

uint16_ttemp7=0;

uint16_ttemp8=0;

if((num<10000)&&(num>=1000))

{

temp5=num/1000;

temp6=(num-temp5*1000)/100;

temp7=(num-temp5*1000-temp6*100)/10;

temp8=num-temp5*1000-temp6*100-temp7*10;

}

elseif((num<1000)&&(num>=100))

{

temp6=num/100;

temp7=(num-temp6*100)/10;

temp8=num-temp6*100-temp7*10;

}

elseif((100>num)&&(num>=10))

{

temp5=10;

temp7=num/10;

temp8=num-temp7*10;

}

elseif(num<10)

{

temp5=10;

temp8=num;

}

else

{}

numb[8]=temp5;

numb[9]=temp6;

numb[10]=temp7;

numb[11]=temp8;

}

 

voidGPIO_Configuration(void)

{

GPIO_InitTypeDefGPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD

|RCC_APB2Periph_GPIOE,ENABLE);

/**

*LED1->PD8,LED2->PD9,LED3->PD10,LED4->PD11

*/

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9

|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;;

GPIO_Init(GPIOD,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_8|GPIO_Pin_11|GPIO_Pin_7|GPIO_Pin_10|GPIO_Pin_12;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;;

GPIO_Init(GPIOC,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_11|GPIO_Pin_8|GPIO_Pin_10|GPIO_Pin_12;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;;

GPIO_Init(GPIOA,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11|GPIO_Pin_15;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;;

GPIO_Init(GPIOE,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_11|GPIO_Pin_13|GPIO_Pin_15;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;;

GPIO_Init(GPIOB,&GPIO_InitStructure);

/*ConfigurePA.05.06.07(ADCChannel5.6.7)asanaloginput-------------------------*/

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;

GPIO_Init(GPIOA,&GPIO_InitStructure);

}

 

voidADC_Configuration(void)

{

ADC_InitTypeDefADC_InitStructure;

DMA_InitTypeDefDMA_InitStructure;

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1|RCC_APB2Periph_AFIO,ENABLE);

/*DMAchannel1configuration----------------------------------------------*/

DMA_DeInit(DMA1_Channel1);

DMA_InitStructure.DMA_PeripheralBaseAddr=ADC1_DR_Address;

DMA_InitStructure.DMA_MemoryBaseAddr=(u32)&ADC_ConvertedValue;

DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;

DMA_InitStructure.DMA_BufferSize=3;

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(DMA1_Channel1,&DMA_InitStructure);

/*EnableDMA1channel1*/

DMA_Cmd(DMA1_Channel1,ENABLE);

/*ADC1configuration------------------------------------------------------*/

ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;

ADC_InitStructure.ADC_ScanConvMode=ENABLE;

ADC_InitStructure.ADC_ContinuousConvMode=ENABLE;

ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;

ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;

ADC_InitStructure.ADC_NbrOfChannel=3;

ADC_Init(ADC1,&ADC_InitStructure);

/*ADC1regularchannel15configuration*/

ADC_RegularChannelConfig(ADC1,ADC_Channel_5,1,ADC_SampleTime_239Cycles5);

ADC_RegularChannelConfig(ADC1,ADC_Channel_6,2,ADC_SampleTime_239Cycles5);

ADC_RegularChannelConfig(ADC1,ADC_Channel_7,3,ADC_SampleTime_239Cycles5);

/*EnableADC1DMA*/

ADC_DMACmd(ADC1,ENABLE);

/*EnableADC1*/

ADC_Cmd(ADC1,ENABLE);

/*EnableADC1resetcalibarationregister*/

ADC_ResetCalibration(ADC1);

/*ChecktheendofADC1resetcalibrationregister*/

while(ADC_GetResetCalibrationStatus(ADC1));

/*StartADC1calibaration*/

ADC_StartCalibration(ADC1);

/*ChecktheendofADC1calibration*/

while(ADC_GetCalibrationStatus(ADC1));

/*StartADC1SoftwareConversion*/

ADC_SoftwareStartConvCmd(ADC1,ENABLE);

}

 

/*******************************************************************************

*FunctionName:

TIM_Configuration

*Description:

TIM_Configurationprogram.

*Input:

None

*Output:

None

*Reswitch(count2)turn:

None

*Attention:

None

*******************************************************************************/

voidTIM_Configuration(void)

{

TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);

TIM_DeInit(TIM3);

TIM_TimeBaseStructure.TIM_Period=200;/*自动重装载寄存器周期的值(计数值)*/

/*累计TIM_Period个频率后产生一个更新或者中断*/

TIM_TimeBaseStructure.TIM_Prescaler=(100-1);/*时钟预分频数例如:

时钟频率=72MHZ/(时钟预分频+1)*/

TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;/*采样分频*/

TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;/*向上计数模式*/

TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);

TIM_ClearFlag(TIM3,TIM_FLAG_Update);/*清除溢出中断标志*/

TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);

TIM_Cmd(TIM3,ENABLE);/*开启时钟*/

}

 

/*******************************************************************************

*FunctionName:

NVIC_Configuration

*Description:

Configurationthenestedvectoredinterruptcontroller.

*Input:

None

*Output:

None

*Return:

None

*Attention:

None

*******************************************************************************/

voidNVIC_Configuration(void)

{

NVIC_InitTypeDefNVIC_InitStructure;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;

NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;

NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;

NVIC_Init(&NVIC_InitStructure);

}

#ifdefUSE_FULL_ASSERT

/**

*@briefReportsthenameofthesourcefileandthesourcelinenumber

*wheretheassert_paramerrorhasoccurred.

*@paramfile:

pointertothesourcefilename

*@paramline:

assert_paramerrorlinesourcenumber

*@retvalNone

*/

voidassert_failed(uint8_t*file,uint32_tline)

{

/*Usercanaddhisownimplementationtoreportthefilenameandlinenumber,

ex:

printf("Wrongparametersvalue:

file%sonline%d\r\n",file,line)*/

/*Infiniteloop*/

while

(1)

{

}

}

#endif

/*********************************************************************************************************

ENDFILE

********

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

当前位置:首页 > 经管营销 > 公共行政管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1