2293|5

250

帖子

5

TA的资源

纯净的硅(初级)

楼主
 

【N32L43x评测】OPAMP内部运算放大器使用 [复制链接]

 

内部运放功能,这个功能我感觉在采集热电偶那种微弱信号的时候比较有用,可以进行放大,本次的N32L436上就有,而且可以调节增益倍数,可以说比较方便了。下面我看下我们测试。

 

 

从上两幅图我们大致可以看到内部运放连接到了什么口上,还有一些什么样的特性。本次正好两个口连接到了ADC口上,我们可以直接接上电,然后用内部ADC采集下。

我是先移植了ADC的功能。如下:

#include "adc.h"









void ADC_Initial(void)

{

      

       ADC_InitType ADC_InitStructure;

      

      

       GPIO_InitType GPIO_InitStructure;

      

      

      

    /* Enable GPIOC clocks */

    RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA, ENABLE);

    /* Enable ADC clocks */

    RCC_EnableAHBPeriphClk(RCC_AHB_PERIPH_ADC, 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   



    GPIO_InitStruct(&GPIO_InitStructure);

    /* Configure PC0 PC1 as analog input -------------------------*/

    GPIO_InitStructure.Pin       = GPIO_PIN_2 | GPIO_PIN_6;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Analog;

    GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);

      

    /* ADC configuration ------------------------------------------------------*/

    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(ADC, &ADC_InitStructure);



    /* Enable ADC */

    ADC_Enable(ADC, ENABLE);

    /* Check ADC Ready */

    while(ADC_GetFlagStatusNew(ADC,ADC_FLAG_RDY) == RESET)

        ;

    /* Start ADC1 calibration */

    ADC_StartCalibration(ADC);

    /* Check the end of ADC1 calibration */

    while (ADC_GetCalibrationStatus(ADC))

        ;

}





uint16_t ADC_GetData(uint8_t ADC_Channel)

{

    uint16_t dat;

    ADC_ConfigRegularChannel(ADC, ADC_Channel, 1, ADC_SAMP_TIME_55CYCLES5);

    /* Start ADC Software Conversion */

    ADC_EnableSoftwareStartConv(ADC,ENABLE);

    while(ADC_GetFlagStatus(ADC,ADC_FLAG_ENDC)==0){

    }

    ADC_ClearFlag(ADC,ADC_FLAG_ENDC);

    ADC_ClearFlag(ADC,ADC_FLAG_STR);

    dat=ADC_GetDat(ADC);

    return dat;

}

然后仿真就能看结果。接到地ADC数值基本不动。

 

#include "opamp.h"















void OPAMP_Configuration(void)

{

    /* Enable COMPE clocks */

    RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_COMP | RCC_APB1_PERIPH_OPAMP | RCC_APB1_PERIPH_COMP_FILT, ENABLE);

       RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_AFIO | RCC_APB2_PERIPH_GPIOA | RCC_APB2_PERIPH_GPIOB | RCC_APB2_PERIPH_GPIOC

                                | RCC_APB2_PERIPH_GPIOD , ENABLE);





       GPIO_InitType GPIO_InitStructure;

      

             

    OPAMP_InitType OPAMP_Initial;



    GPIO_InitStruct(&GPIO_InitStructure);

    /* Configure OPAMP1_VP, OPAMP2_Vp,

                 PA1       PA7          as analog inputs */

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Analog;

    GPIO_InitStructure.GPIO_Current = GPIO_DC_4mA;

    GPIO_InitStructure.Pin       = GPIO_PIN_1 | GPIO_PIN_7;

    GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);



    // OPAMP output pin enable pix pin when OPAMPx En.not to remap or select output pin

    /* configure OP1_out,  OP2_out,

                   PA2        PA6       as analog output */

    GPIO_InitStructure.Pin = GPIO_PIN_2 | GPIO_PIN_6;

    GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);  

      



    OPAMP_StructInit(&OPAMP_Initial);

    OPAMP_Initial.Gain = OPAMP_CS_PGA_GAIN_4;

    /*configure opamp1*/

    OPAMP_Init(OPAMP1, &OPAMP_Initial);

    OPAMP_SetVpSel(OPAMP1, OPAMP1_CS_VPSEL_PA1);

    OPAMP_Enable(OPAMP1, ENABLE);

    /*configure opamp2*/

    OPAMP_Init(OPAMP2, &OPAMP_Initial);

    OPAMP_SetVpSel(OPAMP2, OPAMP2_CS_VPSEL_PA7);

    OPAMP_Enable(OPAMP2, ENABLE);

      



}

然后弄了下运算放大器,一切都是按照其demo来的,我试了改增益,不改输入,ADC输出就变了,同理采集的电压也基本是增益倍数。不过有些跳动。

 

 

 

              adc_val[0] = (ADCConvertedValue[0]*3.3)/4096;

              adc_val[1] = (ADCConvertedValue[1]*3.3)/4096;

中间我直接增加了一个电压值转换。如果使用后期应该需要进行滤波处理,让ADC数值稳定一些。

最新回复

某国产芯片,不是常见的那几个。面试的说和原厂确认过,是芯片问题。   详情 回复 发表于 2022-8-16 23:16
点赞 关注
 
 

回复
举报

7046

帖子

11

TA的资源

版主

沙发
 
这个电源看起来非常有年代感。是不是放大后更加精准吗?
 
 
 

回复

6534

帖子

9

TA的资源

版主

板凳
 

这个功能真不错

 
 
 

回复

7671

帖子

2

TA的资源

五彩晶圆(高级)

4
 

我前几天面试一个伙伴,他们也在用国产芯片,说国产的芯片,读出来的数据是错的,寄存器读出来的和总线上的数据不一样。。。不知道这颗如何。

点评

应该是某国产芯片吧?直接说“国产芯片”这个打击范围可太大了。而且问题也不一定绝对是芯片本身的问题。  详情 回复 发表于 2022-8-12 11:53
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 
 

回复

9795

帖子

24

TA的资源

版主

5
 
freebsder 发表于 2022-8-10 19:09 我前几天面试一个伙伴,他们也在用国产芯片,说国产的芯片,读出来的数据是错的,寄存器读出来的和总线上的 ...

应该是某国产芯片吧?直接说“国产芯片”这个打击范围可太大了。而且问题也不一定绝对是芯片本身的问题。

点评

某国产芯片,不是常见的那几个。面试的说和原厂确认过,是芯片问题。  详情 回复 发表于 2022-8-16 23:16
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

7671

帖子

2

TA的资源

五彩晶圆(高级)

6
 
littleshrimp 发表于 2022-8-12 11:53 应该是某国产芯片吧?直接说“国产芯片”这个打击范围可太大了。而且问题也不一定绝对是芯片本 ...

某国产芯片,不是常见的那几个。面试的说和原厂确认过,是芯片问题。

个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表