【FOC相关外设】内部OPA的应用

描述

一、OPA介绍

CW32L012 集成两路独立轨到轨运算放大器,支持 1.7~5.5V 宽电压供电,具备正常与低功耗两种工作模式,适配低功耗锂电产品设计。

运放支持多路内外输入切换,同相端可接入外部模拟信号或内部 DAC 电压,反相端可选外部引脚输入,输出可直连片内 ADC,省去外围缓冲电路。芯片自带失调电压自动校准功能,有效提升小信号采集精度。

电气性能优秀,正常模式带宽可达 2MHz,低功耗模式大幅降低静态功耗,输入输出接近电源轨。常应用于电流采样放大、电压信号缓冲、有源滤波、传感器信号调理等场景,精简外围电路,降低硬件成本,适配各类低功耗模拟采集控制系统,核心特性如下:

数量:2 个独立 OPA(OPA1、OPA2)

供电:1.7V–5.5V,轨到轨输入 / 输出(RRIO)

功耗:正常 / 低功耗双模式,可在 DeepSleep 下运行

输入

同相端(INP):3 路外部 + 1 路内部 DAC(DAC_OUT)
反相端(INN):2 路外部输入

输出:可映射到 GPIO 引脚,也可内部直连 ADC/VC

校准:内置失调电压校准,支持软件 / 事件触发

应用:信号放大、电流采样、电压跟随、有源滤波、比较器前置

二、OPA基本原理

运算放大器(OPA)是一种高增益、高输入阻抗、低输出阻抗的模拟集成电路,核心由多级差分放大电路构成,主要包含同相输入端(+)、反相输入端(-)和输出端三个关键引脚,广泛应用于信号放大、缓冲、滤波等场景。

OPA工作遵循两大理想特性:一是“虚短”,闭环工作时,正负输入端电压近似相等,差值趋近于零;二是“虚断”,两个输入端几乎无电流流入,输入阻抗极高,可避免影响被测信号源。其核心工作逻辑是放大正负输入端的电压差值,内部开环增益极高,输出电压受电源电压限制,无法无限放大,需通过外接反馈网络稳定工作。

实际应用中,OPA主要有两种常用接法:电压跟随器(输出直连反相端,增益为1,用于信号缓冲隔离)和比例放大器(外接电阻构成负反馈,精准设定放大倍数)。负反馈是OPA稳定工作的关键,可固定放大倍数、降低信号失真、稳定输出电压,适配各类模拟信号调理需求,是电子设备中模拟电路的核心器件。

三、配置流程

本实验使用OPA外设进行,需要开启OPA时钟,使用__SYSCTRL_OPA_CLK_ENABLE宏定义开启时钟;

配置引脚,设置 OPA 通道对应的 GPIO 引脚为模拟功能;

使用结构体OPA_InitTypeDef,对OPA进行配置,使能正端模拟输入信号 INPy,使能负端模拟输入信号 INNy;

选择外部放大模式,使能模拟输出OUT,使能OPA;

选择电平校准,使能校准功能,启动电平校准;

延时等待规定的校准时长,停止电平校准;

通过ADC采样OPA输出信号;

四、配置OPA

 

void OPA_Configuration(void)
{
    __SYSCTRL_GPIOA_CLK_ENABLE();
    __SYSCTRL_GPIOB_CLK_ENABLE();
    GPIO_InitTypeDef gpio_init_struct;
    gpio_init_struct.IT = GPIO_IT_NONE;
    gpio_init_struct.Mode = GPIO_MODE_ANALOG;
    gpio_init_struct.Pins = GPIO_PIN_7;
    GPIO_Init(CW_GPIOA, &gpio_init_struct);
    AFx_OPA1INN2_PA07();
    gpio_init_struct.Pins = GPIO_PIN_0;
    GPIO_Init(CW_GPIOB, &gpio_init_struct);
    AFx_OPA1OUT_PB00();
    __SYSCTRL_OPA_CLK_ENABLE();
    OPA_InitTypeDef opa_init_sturct;
    opa_init_sturct.InputP = OPA_INPUT_INP2;
    opa_init_sturct.InputN = OPA_INPUT_INN2;
    opa_init_sturct.Bias = OPA_BIAS_8UA_4US;
    opa_init_sturct.PgaGain = OPA_PGA_GAIN2;
    opa_init_sturct.WorkMode = OPA_WORKMODE_STANDALONE;
    OPA_Init(CW_OPA1, &opa_init_sturct);
    OPA_AutoZeroTrig_Config(CW_OPA1, OPA_AZCLOCK_PCLK_DIV4, OPA_AZPERIOD_AZCLK512, OPA_AZTRIGSRC_ADC1START);
    OPA_Start(CW_OPA1);
}

 

五、数据采集

在main.c中采集数据,初始化外设,调用ADC_GetSqr0Result函数获取adc转换序列0中的adc原始数据,每延时500ms,调用UART1_SendBytes函数通过串口发送到上位机

 

int main(void)
{
    uint16_t adc_value = 0;
    SYSCTRL_HSI_Enable(SYSCTRL_HSIOSC_DIV1);
    SYSCTRL_HCLKPRS_Config(SYSCTRL_HCLK_DIV1);
    SYSCTRL_PCLKPRS_Config(SYSCTRL_PCLK_DIV1);
    SYSCTRL_SystemCoreClockUpdate(96000000);
    InitTick(96000000);
    Int_Uart_Init();
    GPIO_Configuration();
    OPA_Configuration();
    ADC_Configuration();
    UART1_SendBytes("hello,world!", 12);
    while (1)
    {
        ADC_GetSqr0Result(CW_ADC1, &adc_value);
        sprintf(convert_string, "%d", adc_value);
        UART1_SendBytes((uint8_t*)convert_string, 4);
        SysTickDelay(500);
    }
}

 

六、实验现象

OPA

通过原始数据计算:2100 / 4096 * 5=2.563V,最后得到了2.563V的一个电压值,和在采集A相相电流的电路中有一个2.5V的偏置电压大致相等。

实验例程如下:

通过网盘分享的文件:OPA_and_ADC.zip

链接: https://pan.baidu.com/s/13Fe61RT6eYeT0NngDCzKig?pwd=L012 提取码: L012

审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 相关推荐
  • 热点推荐
  • OPA
  • FOC

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分