集成运放参数测试_第1页
集成运放参数测试_第2页
集成运放参数测试_第3页
集成运放参数测试_第4页
集成运放参数测试_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGEPAGE1集成运放参数测试仪设计报告学校:南京师范大学学校:南京师范大学组号:13组员姓名: 张银柱组员姓名: 杨锋组员姓名: 陈潇摘要本系统采用STM32系统为核心器件,主要实现对通用型集成运算放大器输入失调电压、输入失调电流、交流差模开环电压增益和交流共模抑制比四项基本参数的测量。由于水平有限,现只是利用已有信号源,输出给参数测试电路测量,主要完成硬件部分的搭建工作与输出的显示。关键词:STM32,运放,输入失调电压,输入失调电流,交流差模开环电压增益,交流共模抑制比,硬件电路,显示ABSTRACTThe

systemusesthe

STM32

systemasthecore

components,themainachievement

ofthe

general-purpose

integratedop-amp

inputoffset

voltage,

inputoffsetcurrent,AC

voltage

differential-mode

open-loop

gainand

AC

CMRR

fourbasicparameters

ofthe

measurement.

Asthe

level

islimited,

there

are

onlyusingthesignal

source,theoutput

parametersof

thetest

circuit

to

measure,

mainlytocomplete

thework

with

thehardware

partofthe

build

output

ofthe

show.KeyWord:STM32,amplifier,inputmaladjustedvoltage,inputmaladjustedcurrent,Exchangeopenloopgaindifferential-modevoltage,CMRAC,hardwarecircuit,display第1章设计任务及要求1.1设计任务设计并制作一台能测试通用型集成运算放大器参数的测试仪,示意图如图1所示。图1通用型集成运放参数测试仪框图1.2设计要求1.2.1基本要求(1)能测试VIO(输入失调电压)、IIO(输入失调电流)、AVD(交流差模开环电压增益)和KCMR(交流共模抑制比)四项基本参数,显示器最大显示数为3999;(2)各项被测参数的测量范围及精度如下(被测运放的工作电压为±15V):VIO:测量范围为0~40mV(量程为4mV和40mV),误差绝对值小于3%读数+1个字;IIO:测量范围为0~4μA(量程为0.4μA和4μA),误差绝对值小于3%读数+1个字;AVD:测量范围为60dB~120dB,测试误差绝对值小于3dB;KCMR:测量范围为60dB~120dB,测试误差绝对值小于3dB;(3)测试仪中的信号源(自制)用于AVD、KCMR参数的测量,要求信号源能输出频率为5Hz、输出电压有效值为4V的正弦波信号,频率与电压值误差绝对值均小于1%;(4)按照本题附录提供的符合GB3442-82的测试原理图(见图2~图4),再制作一组符合该标准的测试VIO、IIO、AVD和KCMR参数的测试电路,以此测试电路的测试结果作为测试标准,对制作的运放参数测试仪进行标定。1.2.2发挥部分(1)增加电压模运放BWG(单位增益带宽)参数测量功能,要求测量频率范围为100kHz~3.5MHz,测量时间≤10秒,频率分辨力为1kHz;为此设计并制作一个扫频信号源,要求输出频率范围为40kHz~4MHz,频率误差绝对值小于1%;输出电压的有效值为2V±0.2V;(2)增加自动测量(含自动量程转换)功能。该功能启动后,能自动按VIO、IIO、AVD、KCMR和BWG的顺序测量、显示并打印以上5个参数测量结果;第2章方案比较与论证2.1信号源制作方案及论证2.1.1信号源制作方案暂时使用现有的信号源2.2运放参数测试电路方案及论证2.方案一:将(输入失调电压),(输入失调电流),(交流差模开环电压增益)和(交流共模抑制比),四项基本参数的测试原理图,将各原理图分别搭建起来,再根据所提供的标准方法来测量,从而得到标准值,而自动测量部分再加上STM32系统来分别控制三个模块电路,该方法的优点是各功能模块电路分开了,并没有干扰的存在,而且操作简单测量方便,但是由于三个电路模块所用的元器件相同,存在资源的浪费,而且对各功能模块的分开操作,使得“自动测量”这一意义不存在了,对工业自动化并没有运用价值。也失去了我们发挥创新的部分,因而本设计我们未采用。aVIO、IIO电参数测试原理图bAVD电参数的测试原理与测试原理图cKCMR电参数的测试原理与测试原理图图2集成运放各参数测试原理图方案二:考虑到各功能的模块许多元器件相同,为了避免资源的浪费,同时为了使自动化的实现更方便,我们考虑将这三个功能模块电路组合起来,放在一块电路板上,通过用STM32系统控制继电器的状态来切换测量电路实现各功能模块。电路图如下图3.图3运放参数测试设计电路第3章系统硬件设计3.1总体设计思路对于一个系统的设计首先要对系统的任务及要求有一个明确的了解,再根据所提供的相关信息帮助,将整个系统功能分成各个功能模块,从而实现系统整体功能。该系统的设计任务如下图4:被测运放被测运放运放参数测试电路信号源显示控制电路图4通用型集成运放参数测试仪框图根据系统设计的模块划分模块来设计该系统,而该测试仪核心模块为运放参数测试电路及信号源的设计(暂且用现成的信号源)。再分析设计任务,及设计要求,我们考虑用STM32系统开发板来作为控制电路,用I/O口控制小型继电器的通断,从而实现各功能电路的切换。同时,利用STM32系统开发版内部自带的A/D转换器,进行A/D采样,将模拟量转换为数字量,再将其通过其自带显示器显示,则整个系统的硬件设计基本完成。系统硬件组成框图如图5:信号源信号源参数测试电路Stm32开发板控制显示电路图5系统硬件组成框图3.2各模块设计及参数运算3.2.1参数测量电路模块图6 参数测量电路模块测量输入失调电压控制S1-1、S1-2闭合,S4断开,S3接2,S5接2,用数字示波器测出辅助运放的输出电压VL0,则有: 输入失调电压 (3-1)测量输入失调电流控制S1-1、S1-2断开,S4断开,S3接2,S5接2,用数字示波器测出辅助运放的输出电压VL1,则有: 输入失调电流 (3-2)测量交流差模开环电压增益控制S1-1、S1-2闭合,S4闭合,S3接2,S5接1,设信号源输出电压为Vs,测得辅助运放输出电压为VL0,则有交流差模开环电压增益 (3-3)测量交流共模抑制比控制S1-1、S1-2闭合,S4闭合,S3接1,S5接1,设信号源输出电压为Vs,测得辅助运放输出电压为VL0,则有交流共模抑制比 (3-4)实现自动控制以及量程切换考虑到测量量程问题,因而我们将分成10K与90K电阻,并要求这两个电阻的阻值严格满足要求,因而我们考虑用可调电位器来实现,选用20K及100K的电位器来实现,从而较易达到阻值的要求,同时利用一个开关来切换量程,以使R3/(R3+Rf)的值存在10倍的关系,实现两个量程的变换(0~4mv及4mv~40mv的变换);同理在测输入失调电流时也同样存在开关的切合。根据提供的参数,我们将R3设为100欧姆,接成两电阻(10k与90k)的串联,R接成1兆欧,R1=R2=30千欧。考虑到辅助放大器测试方法的要求,要求辅助运放的开环增益大于60dB,输入失调电压和失调电流值小。OP07的精度高失调电压和失调电流较小,且不需要自校准电路,所以选择OP07作为辅助运放。为了实现自动控制,我们只是将各开关换成了继电器,由于继电器的可控性,通过stm32I/O口来控制继电器的通断来实现各功能电路的切换,在标准电路后面与stm32连上,实现电路参数测试的自动化。从而大大简化了电路的烦琐程度。3.2.2继电器驱动电路图7 继电器的驱动电路 如图7,STM32的I/O口无法直接驱动继电器,必须要接三极管来驱动,当GPIO输出低电平继电器吸合,当GPIO输出为高电平,继电器的衔铁放开。3.2.3测试结果的显示 测量VIO以及IIO时只需将OP07输出的信号接到开发板的AIN1上,经过A/D转换将模拟量转换为数字量,然后通过软件处理与运算将结果显示在开发板的屏幕上。测量AVD和KCMR时需同时将信号源输出信号接到AIN0以及将OP07输出信号接到AIN1上,然后软件处理后将结果显示在开发板的屏幕上。第4章软件设计 软件方面主要是要实现测量电路的切换控制,自动测量,量程的切换,采集数据的处理以及测量结果的显示。我们使用触摸屏来控制切换测量电路和切换量程以及显示测量结果。使用开发板自带的ADC来采集数据。4.1程序设计框图屏幕界面设计屏幕界面设计控制界面及结果显示界面采集数据,数据处理及显示结束开始系统初始化配置配置GPIO、ADC、TIM和触摸屏触摸屏中断控制电路的切换以及量程的切换图8 程序设计框图4.1.1系统的初始化配置 主要包含GPIO、ADC、TIM以及触摸屏的初始化配置,源程序如下:voidGPIO_Configuration(void){ GPIO_InitTypeDefGPIO_InitStructure; /*配置未使用的IO为模拟输入*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB| RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD| RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOF| RCC_APB2Periph_GPIOG,ENABLE); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN; GPIO_Init(GPIOA,&GPIO_InitStructure); GPIO_Init(GPIOB,&GPIO_InitStructure); GPIO_Init(GPIOC,&GPIO_InitStructure); GPIO_Init(GPIOD,&GPIO_InitStructure); GPIO_Init(GPIOE,&GPIO_InitStructure); GPIO_Init(GPIOF,&GPIO_InitStructure); GPIO_Init(GPIOG,&GPIO_InitStructure); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB| RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD| RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOF| RCC_APB2Periph_GPIOG,DISABLE);}voidADC_Configuration(void){ //===========定义变量for各项外设的初始化=================== GPIO_InitTypeDef GPIO_InitStructure; DMA_InitTypeDef DMA_InitStructure; ADC_InitTypeDef ADC_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; //===================初始化ADC对应的GPIOPC.00~PC.03(ADCChannel10~13)================ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN; GPIO_Init(GPIOC,&GPIO_InitStructure); //========================初始化TIM定时触发ADC======================== /*TIM1configuration*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE); /*TimeBaseconfiguration*/ TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); TIM_TimeBaseStructure.TIM_Period=56000000/Fs;//64K的采样频率5*175*64k=56000k=56M TIM_TimeBaseStructure.TIM_Prescaler=0x0; TIM_TimeBaseStructure.TIM_ClockDivision=0x0; TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure); /*TIM1channel1configurationinPWMmode*/ TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse=10; TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low; TIM_OC3Init(TIM1,&TIM_OCInitStructure); /*TIM1mainOutputEnable*/ TIM_CtrlPWMOutputs(TIM1,ENABLE); //========================初始化DMA:ADC1~DMA1.1,ADC3~DMA2.5================================ ///*EnableDMA1clock*/ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1|RCC_AHBPeriph_DMA2,ENABLE); /*DMA1channel1configuration*/ DMA_DeInit(DMA1_Channel1); DMA_InitStructure.DMA_PeripheralBaseAddr=(uint32_t)ADC1_DR_Address; DMA_InitStructure.DMA_MemoryBaseAddr=(uint32_t)ADC_DualConvertedValueTab; DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC; DMA_InitStructure.DMA_BufferSize=ADC_NPT; DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Word; DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_Word; DMA_InitStructure.DMA_Mode=DMA_Mode_Normal; 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); /*DMA2channel5configuration*/ DMA_DeInit(DMA2_Channel5); DMA_InitStructure.DMA_PeripheralBaseAddr=(uint32_t)ADC3_DR_Address; DMA_InitStructure.DMA_MemoryBaseAddr=(uint32_t)ADC3ConvertedValue; DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC; DMA_InitStructure.DMA_BufferSize=ADC_NPT; 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_Normal; DMA_InitStructure.DMA_Priority=DMA_Priority_High; DMA_InitStructure.DMA_M2M=DMA_M2M_Disable; DMA_Init(DMA2_Channel5,&DMA_InitStructure); /*EnableDMA2channel5*/ DMA_Cmd(DMA2_Channel5,ENABLE); //======================初始化ADCADC0|ADC1组成双ADC规则,ADC3==================================== /*ConfigureADCCLKsuchasADCCLK=PCLK2/4=56/4=14M*/ RCC_ADCCLKConfig(RCC_PCLK2_Div4); RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1|RCC_APB2Periph_ADC2|RCC_APB2Periph_ADC3,ENABLE); /*ADC1configuration*/ ADC_InitStructure.ADC_Mode=ADC_Mode_RegSimult; ADC_InitStructure.ADC_ScanConvMode=DISABLE; ADC_InitStructure.ADC_ContinuousConvMode=DISABLE; ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_T1_CC3; ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel=1; ADC_Init(ADC1,&ADC_InitStructure); /*ADC1regularchannelsconfiguration*/ ADC_RegularChannelConfig(ADC1,ADC_Channel_10,1,ADC_SampleTime_7Cycles5); ADC_ExternalTrigConvCmd(ADC1,ENABLE); /*ADC2configuration*/ ADC_InitStructure.ADC_Mode=ADC_Mode_RegSimult; ADC_InitStructure.ADC_ScanConvMode=DISABLE; ADC_InitStructure.ADC_ContinuousConvMode=DISABLE; ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_T1_CC3; ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel=1; ADC_Init(ADC2,&ADC_InitStructure); /*ADC2regularchannelsconfiguration*/ ADC_RegularChannelConfig(ADC2,ADC_Channel_11,1,ADC_SampleTime_7Cycles5); ADC_ExternalTrigConvCmd(ADC2,ENABLE); /*EnableADC2externaltriggerconversion*/ /*ADC3configuration*/ ADC_InitStructure.ADC_Mode=ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode=DISABLE; ADC_InitStructure.ADC_ContinuousConvMode=DISABLE; ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_T1_CC3; ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel=1; ADC_Init(ADC3,&ADC_InitStructure); /*ADC3regularchannel14configuration*/ ADC_RegularChannelConfig(ADC3,ADC_Channel_12,1,ADC_SampleTime_7Cycles5); ADC_ExternalTrigConvCmd(ADC3,ENABLE); ADC_DMACmd(ADC1,ENABLE);/*EnableADC1DMA*/ /*EnableADC3DMA*/ ADC_DMACmd(ADC3,ENABLE); /*=====================ADC1、2、3的使能加校准===================*/ ADC_Cmd(ADC1,ENABLE); ADC_ResetCalibration(ADC1); while(ADC_GetResetCalibrationStatus(ADC1)); ADC_StartCalibration(ADC1); while(ADC_GetCalibrationStatus(ADC1)); ADC_Cmd(ADC2,ENABLE); ADC_ResetCalibration(ADC2); while(ADC_GetResetCalibrationStatus(ADC2)); ADC_StartCalibration(ADC2); while(ADC_GetCalibrationStatus(ADC2)); ADC_Cmd(ADC3,ENABLE); ADC_ResetCalibration(ADC3); while(ADC_GetResetCalibrationStatus(ADC3)); ADC_StartCalibration(ADC3); while(ADC_GetCalibrationStatus(ADC3)); /*总体使能,启动ADC*/// TIM_Cmd(TIM1,ENABLE); }voidTFT_Configuration(void){ LCD_CtrlLinesConfig(); LCD_FSMCConfig(); TFT_Initializtion();/*InitializetheLCD*/ TFT_Clear(Black); /*CleartheLCD*/ SetTextColor(White); SetBackColor(Black);}voidTouch_Configuration(void){ GPIO_InitTypeDefGPIO_InitStructure; EXTI_InitTypeDefEXTI_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOG,ENABLE); //SPI--CS-PB12|DCLK-PB13|DIN-PB15 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_15|GPIO_Pin_13|GPIO_Pin_12; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //推挽 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz; GPIO_Init(GPIOB,&GPIO_InitStructure); //DOUT-PB14 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_14; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU; GPIO_Init(GPIOB,&GPIO_InitStructure); //INT-PG7 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7; GPIO_Init(GPIOG,&GPIO_InitStructure); TouchInit(); ///<Key2 A0 GPIO_EXTILineConfig(GPIO_PortSourceGPIOG,GPIO_PinSource7); EXTI_InitStructure.EXTI_Line=EXTI_Line7;//设定外部中断0 EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;//设定中断模式 EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;//设定下降沿触 EXTI_InitStructure.EXTI_LineCmd=ENABLE; EXTI_Init(&EXTI_InitStructure); // NVIC_SetPriorityGrouping(0); ///<EnabletheEXTI7Interrupt NVIC_SetPriority(EXTI9_5_IRQn,30); NVIC_EnableIRQ(EXTI9_5_IRQn);}/*配置继电器*/voidJDQ_Configuration(void){ GPIO_InitTypeDefGPIO_InitStructure; /*配置继电器对应的GPIO*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOG,ENABLE); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_10|GPIO_Pin_12| GPIO_Pin_14; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz; GPIO_Init(GPIOD,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2; GPIO_Init(GPIOG,&GPIO_InitStructure); GPIO_ResetBits(GPIOD,GPIO_Pin_8|GPIO_Pin_10|GPIO_Pin_12 //初始化继电器 |GPIO_Pin_14); GPIO_SetBits(GPIOG,GPIO_Pin_2);}voidSYSTEM_Configuration(void){ /*必须的初始化设置*/ SystemInit(); GPIO_Configuration(); /*可选,根据你的需要选择*/ LED_Configuration(); KEY_Configuration(); PWM_Configuration(); DAC_Configuration(); ADC_Configuration(); TFT_Configuration(); Touch_Configuration(); JDQ_Configuration();}4.1.2屏幕界面的设计 源程序如下: //屏幕界面 TFT_Clear(White); TFT_DrawLine(0,25,320,Horizontal); TFT_DrawLine(120,0,240,Vertical); TFT_DrawLine(60,25,215,Vertical); TFT_DrawLine(0,96,120,Horizontal); TFT_DrawLine(0,166,120,Horizontal); TFT_DisplayString(Line(0),Column(2),"测量控制",Big); TFT_DisplayString(Line(0),Column(22),"结果显示",Big); TFT_DisplayString(Line(5),Column(1),"测量",Big); TFT_DisplayString(Line(8),Column(2),"V",Big); TFT_DisplayString(Line(9),Column(4),"IO",Small); TFT_DisplayString(Line(5),Column(8),"测量",Big); TFT_DisplayString(Line(8),Column(9),"I",Big); TFT_DisplayString(Line(9),Column(11),"IO",Small); TFT_DisplayString(Line(13),Column(1),"测量",Big); TFT_DisplayString(Line(16),Column(2),"A",Big); TFT_DisplayString(Line(17),Column(4),"VD",Small); TFT_DisplayString(Line(13),Column(8),"测量",Big); TFT_DisplayString(Line(16),Column(9),"K",Big); TFT_DisplayString(Line(17),Column(11),"CMR",Small); TFT_DisplayString(Line(22),Column(1),"自动",Big); TFT_DisplayString(Line(25),Column(1),"测量",Big); TFT_DisplayString(Line(22),Column(8),"量程",Big); TFT_DisplayString(Line(25),Column(8),"切换",Big); TFT_DisplayString(Line(6),Column(16),"V",Big); TFT_DisplayString(Line(7),Column(18),"IO",Small); TFT_DisplayString(Line(6),Column(21),"=",Big); TFT_DisplayString(Line(6),Column(35),"mV",Big); TFT_DisplayString(Line(11),Column(16),"I",Big); TFT_DisplayString(Line(12),Column(18),"IO",Small); TFT_DisplayString(Line(11),Column(21),"=",Big); TFT_DisplayString(Line(11),Column(35),"uA",Big); TFT_DisplayString(Line(16),Column(16),"A",Big); TFT_DisplayString(Line(17),Column(18),"VD",Small); TFT_DisplayString(Line(16),Column(21),"=",Big); TFT_DisplayString(Line(16),Column(35),"dB",Big); TFT_DisplayString(Line(21),Column(16),"K",Big); TFT_DisplayString(Line(22),Column(18),"CMR",Small); TFT_DisplayString(Line(21),Column(21),"=",Big); TFT_DisplayString(Line(21),Column(35),"dB",Big); TFT_DisplayString(Line(26),Column(16),"量程:Vio4mVIio0.4uA",Small);4.1.3触摸屏中断 此部分包括了对测量电路切换的控制、量程切换的控制以及数据采集处理,结果的显示,源程序如下:voidEXTI9_5_IRQHandler(void){ uint16_ti; if(EXTI_GetITStatus(EXTI_Line8)==SET) { //addcodehere GPIO_WriteBit(GPIOF,GPIO_Pin_8,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOF,GPIO_Pin_8))); //key3A8 EXTI_ClearITPendingBit(EXTI_Line8); } elseif(EXTI_GetITStatus(EXTI_Line7)==SET) { //TFTTouch Touch_Key_Press(0); if(Is_In_Area(0,25,60,96)) { TIM_Cmd(TIM1,ENABLE); GPIO_ResetBits(GPIOD,GPIO_Pin_8); //GPIO输出低电平,控制继电器衔铁吸合 GPIO_SetBits(GPIOD,GPIO_Pin_12); //GPIO输出高电平,控制继电器衔铁放开 GPIO_SetBits(GPIOD,GPIO_Pin_14); GPIO_SetBits(GPIOG,GPIO_Pin_2); VL0=ADC_GetConversionValue(ADC2)*3300*4/4095; a=r3*VL0/(r3+rf); VIO=FloatToChar2(a); TFT_DisplayString(Line(6),Column(24),FloatToChar2(VL0),Big); //FloatToChar2(VL0) TIM_Cmd(TIM1,DISABLE); } elseif(Is_In_Area(61,25,120,96)) { TIM_Cmd(TIM1,ENABLE); GPIO_ResetBits(GPIOD,GPIO_Pin_8); GPIO_SetBits(GPIOD,GPIO_Pin_12); GPIO_SetBits(GPIOD,GPIO_Pin_14); GPIO_SetBits(GPIOG,GPIO_Pin_2); VL0=ADC_GetConversionValue(ADC2)*3300/4095; GPIO_SetBits(GPIOD,GPIO_Pin_8); VL1=ADC_GetConversionValue(ADC2)*3300/4095; b=r3*(VL1-VL0)/((r3+rf)*r); IIO=FloatToChar3(b); TFT_DisplayString(Line(11),Column(24),IIO,Big); TIM_Cmd(TIM1,DISABLE); } elseif(Is_In_Area(0,97,60,166)) { TIM_Cmd(TIM1,ENABLE); GPIO_ResetBits(GPIOD,GPIO_Pin_8); GPIO_SetBits(GPIOD,GPIO_Pin_12); GPIO_ResetBits(GPIOD,GPIO_Pin_14); GPIO_SetBits(GPIOG,GPIO_Pin_2); for(i=0;i<ADC_NPT;i++) { ADC1ConvertedValue[i]=(uint16_t)(ADC_DualConvertedValueTab[i]&0x0000FFFF); ADC2ConvertedValue[i]=(uint16_t)((ADC_DualConvertedValueTab[i]&0xFFFF0000)>>16); if(ADC1ConvertedValue[i]>max1)max1=ADC1ConvertedValue[i]; if(ADC2ConvertedValue[i]>max2)max2=ADC2ConvertedValue[i]; if(ADC1ConvertedValue[i]<min1)min1=ADC1ConvertedValue[i]; if(ADC2ConvertedValue[i]<min2)min2=ADC2ConvertedValue[i]; } Vs=3.3*(max1-min1)/(1.414*4095); VL0=3.3*(max2-min2)/(1.414*4095); c=20*log10(Vs*(r3+rf)/(VL0*r3)); AVD=FloatToChar1(c); TFT_DisplayString(Line(16),Column(24),AVD,Big); TIM_Cmd(TIM1,DISABLE); } elseif(Is_In_Area(61,97,120,166)) { TIM_Cmd(TIM1,ENABLE); GPIO_ResetBits(GPIOD,GPIO_Pin_8); GPIO_ResetBits(GPIOD,GPIO_Pin_12); GPIO_ResetBits(GPIOD,GPIO_Pin_14); GPIO_ResetBits(GPIOG,GPIO_Pin_2); for(i=0;i<ADC_NPT;i++) { ADC1ConvertedValue[i]=(uint16_t)(ADC_DualConvertedValueTab[i]&0x0000FFFF); ADC2ConvertedValue[i]=(uint16_t)((ADC_DualConvertedValueTab[i]&0xFFFF0000)>>16); if(ADC1ConvertedValue[i]>max1)max1=ADC1ConvertedValue[i]; if(ADC2ConvertedValue[i]>max2)max2=ADC2ConvertedValue[i]; if(ADC1ConvertedValue[i]<min1)min1=ADC1ConvertedValue[i]; if(ADC2ConvertedValue[i]<min2)min2=ADC2ConvertedValue[i]; } Vs=3.3*(max1-min1)/(1.414*4095); VL0=3.3*(max2-min2)/(1.414*4095); d=20*log10(Vs*(r3+rf)/(VL0*r3)); KCMR=FloatToChar1(d); TFT_DisplayString(Line(21),Column(24),KCMR,Big); TIM_Cmd(TIM1,DISABLE); } elseif(Is_In_Area(0,167,60,240)) { //测量VIO TIM_Cmd(TIM1,ENABLE); GPIO_ResetBits(GPIOD,GPIO_Pin_8); GPIO_SetBits(GPIOD,GPIO_Pin_12); GPIO_SetBits(GPIOD,GPIO_Pin_14); GPIO_SetBits(GPIOG,GPIO_Pin_2); VL0=ADC_GetConversionValue(ADC2)*3300/4095; a=r3*VL0/(r3+rf); VIO=FloatToChar2(a); TFT_DisplayString(Line(6),Column(24),VIO,Big); //测量IIO GPIO_SetBits(GPIOD,GPIO_Pin_8); VL1=ADC_GetConversionValue(ADC2)*3300/4095; b=r3*(VL1-VL0)/((r3+rf)*r); IIO=FloatToChar3(b); TFT_DisplayString(Line(11),Column(24),IIO,Big); //测量AVD GPIO_ResetBits(GPIOD,G

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论