2536|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数值稳定一些。

最新回复

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

回复
举报

7190

帖子

11

TA的资源

版主

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

回复

6876

帖子

10

TA的资源

版主

板凳
 

这个功能真不错

 
 
 

回复

7773

帖子

2

TA的资源

五彩晶圆(高级)

4
 

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

点评

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

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

 
 
 

回复

9864

帖子

24

TA的资源

版主

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

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

点评

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

回复

7773

帖子

2

TA的资源

五彩晶圆(高级)

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

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

个人签名

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

 
 
 

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

开源项目 更多>>
    查找数据手册?

    EEWorld Datasheet 技术支持

    相关文章 更多>>
      关闭
      站长推荐上一条 1/10 下一条
      中星联华&ADI明日直播
      直播主题:大咖面对面,轻松玩转高速ADC性能测试
      直播时间:3月25日(周二)14:00
      活动奖励:京东卡、双肩包

      查看 »

       
      EEWorld订阅号

       
      EEWorld服务号

       
      汽车开发圈

       
      机器人开发圈

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

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

      北京市海淀区中关村大街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
      快速回复 返回顶部 返回列表