880|1

107

帖子

1

TA的资源

一粒金砂(高级)

楼主
 

【国民技术车规MCU N32A455开发板】 N32A455 OPAMP模块测试 [复制链接]

本帖最后由 尹小舟 于 2024-3-2 17:09 编辑

 

 

 

             国民技术N32A455内部有4个OPAMP,OPAMP 模块可以灵活配置,适用于独立运算放大器、可编程增益放大器(PGA),和跟随器等模式应用。

支持轨到轨输入,输入范围是 0V 到 VDDA,输出范围是 0.1V 到 VDDA-0.1V 可编程增益

        可编程增益设置为 2X、4X、8X、16X、32X

       增益带宽:4MHz

内部运放使得单片机能够直接处理模拟信号,例如采集传感器信号、进行信号调理或控制电路,常需要适当的电源电压供应,开发者需要确保单片机提供了足够的电源支持内部运放的正常工作,但在某些应用中,可能还需要外部连接独立的运放器件以满足特定的性能要求。

内部运放可以用于各种应用,包括:

  •  传感器信号放大:

                              用于从传感器中采集的微弱信号。

  • 信号调理:

                             用于调整信号的增益、滤波或其他特性。

  • 比较器:

                             用于比较两个信号的大小。

  • 反馈电路:

                             用于控制系统的稳定性和性能。

OPAMP 工作模式

OPAMP 独立运算放大器模式

可做为同相比例放大电路 ,外部放大模式即放大倍数由连接的电阻电容决定。

 

 

 

 

该电路的特征为:Uo=(1 + Rf/R1)Ui,电路的闭环增益为Av=(1+ Rf/R1)

电压跟随器

 

由运算放大器组成的电压跟随器具有输入阻抗高,输出阻抗低的特点。一般来说,输入电阻要达到几兆欧姆是很容易做到的,输出阻抗可低至几欧姆。电压跟随器可起到缓冲、隔离、提高带载能力的作用。


PGA

内部放大模式,即 PGA 模式,通过内置的电阻反馈网络对输入电压进行放大

 

软件代码

#include "main.h"
#include "stdio.h"
#include "uart_printf.h"
#include "dwt_delay.h"
/** @addtogroup ADC_ADC1_DMA
 * @{
 */

ADC_InitType ADC_InitStructure;
DMA_InitType DMA_InitStructure;
__IO uint16_t ADC4ConvertedValue[5];

void RCC_Configuration(void);
void GPIO_Configuration(void);
uint16_t ADC_GetData(ADC_Module* ADCx, uint8_t ADC_Channel);
void ADC_Initial(ADC_Module* ADCx);
void OPAMP_Configuration(void);

void ADC_Initial(ADC_Module* ADCx)
{
    /* ADC configuration ------------------------------------------------------*/
    ADC_InitStructure.WorkMode       = ADC_WORKMODE_INDEPENDENT;
    ADC_InitStructure.MultiChEn      = DISABLE;
    ADC_InitStructure.ContinueConvEn = DISABLE;
    ADC_InitStructure.ExtTrigSelect  = ADC_EXT_TRIGCONV_NONE;
    ADC_InitStructure.DatAlign       = ADC_DAT_ALIGN_R;
    ADC_InitStructure.ChsNumber      = 1;
    ADC_Init(ADCx, &ADC_InitStructure);


    /* Enable ADC */
    ADC_Enable(ADCx, ENABLE);
    /*Check ADC Ready*/
    while(ADC_GetFlagStatusNew(ADCx,ADC_FLAG_RDY) == RESET)
        ;
    /* Start ADC calibration */
    ADC_StartCalibration(ADCx);
    /* Check the end of ADC calibration */
    while (ADC_GetCalibrationStatus(ADCx))
        ;
}
/**
 * [url=home.php?mod=space&uid=159083]@brief[/url]   Main program
 */
int main(void)
{
    /* System clocks configuration ---------------------------------------------*/
    RCC_Configuration();

    /* GPIO configuration ------------------------------------------------------*/
    GPIO_Configuration();
    Delaylnit();
    uart_print_init();
    ADC_Initial(ADC4);
    ADC_Initial(ADC1);
	  OPAMP_Configuration();
    while (1)
    {
			  DelayNms(500);
        ADC4ConvertedValue[0]=ADC_GetData(ADC4,ADC4_Channel_05_PB15);
			  printf("ADC4 P15 = %d \r\n",ADC4ConvertedValue[0]);
			  ADC4ConvertedValue[1]=ADC_GetData(ADC1,ADC1_Channel_03_PA6);
			  printf("ADC1 PA6 = %d \r\n",ADC4ConvertedValue[1]);
        
    }
}

/**
 * @brief  Configures the different system clocks.
 */
void RCC_Configuration(void)
{
    /* Enable peripheral clocks ------------------------------------------------*/

    /* Enable GPIOC clocks */
    RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA|RCC_APB2_PERIPH_GPIOB, ENABLE);
	   /* Enable COMPE clocks */
    RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_OPAMP, ENABLE);
    /* Enable  ADC4 clocks */
    RCC_EnableAHBPeriphClk(RCC_AHB_PERIPH_ADC4, ENABLE);
    RCC_EnableAHBPeriphClk(RCC_AHB_PERIPH_ADC1, ENABLE);
    /* RCC_ADCHCLK_DIV16*/
    ADC_ConfigClk(ADC_CTRL3_CKMOD_AHB,RCC_ADCHCLK_DIV16);
    RCC_ConfigAdc1mClk(RCC_ADC1MCLK_SRC_HSE, RCC_ADC1MCLK_DIV8);  //selsect HSE as RCC ADC1M CLK Source		
}

/**
 * @brief  Configures the different GPIO ports.
 */
void GPIO_Configuration(void)
{
    GPIO_InitType GPIO_InitStructure;
    
    
    GPIO_InitStructure.Pin       = GPIO_PIN_15;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
    GPIO_InitPeripheral(GPIOB, &GPIO_InitStructure);
	  
	  //OPA IN
	  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
    GPIO_InitStructure.Pin       = GPIO_PIN_1;
    GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);
	  //OPA OUT
	  GPIO_InitStructure.Pin = GPIO_PIN_6;
    GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);
	
  
}

uint16_t ADC_GetData(ADC_Module* ADCx, uint8_t ADC_Channel)
{
    uint16_t dat;
    
    ADC_ConfigRegularChannel(ADCx, ADC_Channel, 1, ADC_SAMP_TIME_239CYCLES5);
    /* Start ADC Software Conversion */
    ADC_EnableSoftwareStartConv(ADCx, ENABLE);
    while(ADC_GetFlagStatus(ADCx, ADC_FLAG_ENDC)==0){
    }
    ADC_ClearFlag(ADCx, ADC_FLAG_ENDC);
    ADC_ClearFlag(ADCx, ADC_FLAG_STR);
    dat=ADC_GetDat(ADCx);
    return dat;
}



/**
 * @brief  Configures the Opa.
 */
void OPAMP_Configuration(void)
{
    OPAMP_InitType OPAMP_Initial;
    OPAMP_StructInit(&OPAMP_Initial);
    OPAMP_Initial.Gain = OPAMP_CS_PGA_GAIN_2;
    /*configure opamp1*/
    OPAMP_Init(OPAMP1, &OPAMP_Initial);
    OPAMP_SetVpSel(OPAMP1, OPAMP1_CS_VPSEL_PA1);
    OPAMP_Enable(OPAMP1, ENABLE);
    
}

 

 

 

 

 

 

实验现象

PA1 电压 0.829

 

此帖出自汽车电子论坛

最新回复

N32A455 OPAMP模块测试,学习了   详情 回复 发表于 2024-3-2 20:37
点赞 关注(1)

回复
举报

6809

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

N32A455 OPAMP模块测试,学习了

此帖出自汽车电子论坛
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表