3900|7

6960

帖子

11

TA的资源

版主

楼主
 

【ACM32G103RCT6】OPA使用求助 [复制链接]

 

我申请使用的功能有一个是OPA的功能。

使用他的OPA的示例时,由于他的readme只是说明了配置为哪几点功能,并没有详细的说明如何接外设,我摸索了一下,还没有明白他是怎么用的。

阅读了它的用户手册:

 

我是试用他的PGA功能,其配置的代码如下:

/******************************************************************************
*[url=home.php?mod=space&uid=159083]@brief[/url] : OPA Initiation as PGA mode. 
*@return: none
******************************************************************************/
void OPA_Init_PGA(void)
{ 
    OPA2_Handle.Instance = OPA;
    OPA2_Handle.Init.OPAx = OPA2;
    OPA2_Handle.Init.Mode = OPA_MODE_PGA;
    OPA2_Handle.Init.VinPSel = OPA_VINP_0;    
    OPA2_Handle.Init.VinM0En = OPA_VINM0_DISABLE;
    OPA2_Handle.Init.OutSel = OPA_OUT_GPIO;
    OPA2_Handle.Init.PolSel = OPA_POL_INVERT;
    OPA2_Handle.Init.Hsm = OPA_HSM_HIGH;
    OPA2_Handle.Init.Gain = OPA_GAIN_2_1;
    OPA2_Handle.Init.TrimEn = OPA_TRIM_DISABLE;
	
    
    HAL_OPA_Init(&OPA2_Handle);
}

我使用数字电源作用输入,经阅读数据手册查到输入端口为:

  于是我将输入负接到PA5,输入正接到PA7,测量PA6电压,确没有预期的效果。

 

最新回复

我看了一下官方代码,你的配置和它的还是有一点区别,你直接使用官方代码能正常运行吗?   /* ****************************************************************************** * [url=home.php?mod=space&uid=1307177]@File[/url] APP.c * [url=home.php?mod=space&uid=1315547]@author[/url] Xiao Han * [url=home.php?mod=space&uid=252314]@version[/url] V1.0.0 * [url=home.php?mod=space&uid=311857]@date[/url] 2020 * [url=home.php?mod=space&uid=159083]@brief[/url] OPA demo source code. ****************************************************************************** */ #include "APP.h" OPA_HandleTypeDef OPA2_Handle; OPA_HandleTypeDef OPA3_Handle; /************************************************************************ * function : OPA_Init_PGA * Description: OPA Initiation as PGA mode. ************************************************************************/ void OPA_Init_PGA(void) { OPA2_Handle.Instance = OPA; OPA2_Handle.Init.OpaX = OPA2; OPA2_Handle.Init.Hsm = OPA_HSM_HIGH; OPA2_Handle.Init.VinPSel = OPA_VINP_0; OPA2_Handle.Init.OpaMode = OPA_MODE_PGA; OPA2_Handle.Init.Gain = OPA_GAIN_2_1; OPA2_Handle.Init.TrimEn = OPA_CSR_TRIM_DISABLE; HAL_OPA_Init(&OPA2_Handle); OPA3_Handle.Instance = OPA; OPA3_Handle.Init.OpaX = OPA3; OPA3_Handle.Init.Hsm = OPA_HSM_HIGH; OPA3_Handle.Init.VinPSel = OPA_VINP_0; OPA3_Handle.Init.OpaMode = OPA_MODE_PGA; OPA3_Handle.Init.Gain = OPA_GAIN_2_1; OPA3_Handle.Init.TrimEn = OPA_CSR_TRIM_DISABLE; HAL_OPA_Init(&OPA3_Handle); } /************************************************************************ * function : OPA_Init_SA * Description: OPA Initiation as SA mode. ************************************************************************/ void OPA_Init_SA(void) { OPA2_Handle.Instance = OPA; OPA2_Handle.Init.OpaX = OPA2; OPA2_Handle.Init.Hsm = OPA_HSM_HIGH; OPA2_Handle.Init.VinPSel = OPA_VINP_0; OPA2_Handle.Init.OpaMode = OPA_MODE_SA; OPA2_Handle.Init.TrimEn = OPA_CSR_TRIM_DISABLE; HAL_OPA_Init(&OPA2_Handle); OPA3_Handle.Instance = OPA; OPA3_Handle.Init.OpaX = OPA3; OPA3_Handle.Init.Hsm = OPA_HSM_HIGH; OPA3_Handle.Init.VinPSel = OPA_VINP_0; OPA3_Handle.Init.OpaMode = OPA_MODE_SA; OPA3_Handle.Init.TrimEn = OPA_CSR_TRIM_DISABLE; HAL_OPA_Init(&OPA3_Handle); } /************************************************************************ * function : OPA_Init_UG * Description: OPA Initiation as UG mode. ************************************************************************/ void OPA_Init_UG(void) { OPA2_Handle.Instance = OPA; OPA2_Handle.Init.OpaX = OPA2; OPA2_Handle.Init.Hsm = OPA_HSM_HIGH; OPA2_Handle.Init.VinPSel = OPA_VINP_0; OPA2_Handle.Init.OpaMode = OPA_MODE_UG; OPA2_Handle.Init.TrimEn = OPA_CSR_TRIM_DISABLE; HAL_OPA_Init(&OPA2_Handle); OPA3_Handle.Instance = OPA; OPA3_Handle.Init.OpaX = OPA3; OPA3_Handle.Init.Hsm = OPA_HSM_HIGH; OPA3_Handle.Init.VinPSel = OPA_VINP_0; OPA3_Handle.Init.OpaMode = OPA_MODE_UG; OPA3_Handle.Init.TrimEn = OPA_CSR_TRIM_DISABLE; HAL_OPA_Init(&OPA3_Handle); } /************************************************************************ * function : OPA_Test * Description: OPA 1,2,3 enable. * OPA trim disable. ************************************************************************/ void OPA_Test(enum_TEST_MODE_t test_mode) { printfS("OPA Test is Ready!!! \r\n"); switch(test_mode) { case TEST_OPA_PGA: printfS("OPA init as PGA mode. \r\n"); OPA_Init_PGA(); break; case TEST_OPA_SA: printfS("OPA init as SA mode. \r\n"); OPA_Init_SA(); break; case TEST_OPA_UG: printfS("OPA init as UG mode. \r\n"); OPA_Init_UG(); break; } printfS("OPA Inition OK!\r\n"); } 另外Enable函数的问题,我看了一下,在HAL_OPA_Init里已经有      SET_BIT(*gu32RegCrx, OPA_CSR_EN); 对应的操作,所以官方代码是没单独使用HAL_OPA_Enable       详情 回复 发表于 2024-2-13 13:12
点赞 关注
 
 

回复
举报

5260

帖子

236

TA的资源

管理员

沙发
 

等上班了,你这个问题要是还没解决,帮你转航芯技术支持

加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身

点评

多谢管管大大的关心,估计要官方技术支持一下了。找了一下,这方面的资料少。  详情 回复 发表于 2024-2-13 08:32
 
 
 

回复

6960

帖子

11

TA的资源

版主

板凳
 
nmg 发表于 2024-2-13 07:49 等上班了,你这个问题要是还没解决,帮你转航芯技术支持

多谢管管大大的关心,估计要官方技术支持一下了。找了一下,这方面的资料少。

 
 
 

回复

9790

帖子

24

TA的资源

版主

4
 

除了OPA_Init_PGA有没有类似OPA_Start这样的函数?


点评

我添加enable也是一样的,实现的效果是电压跟随器一样。 [attachimg]785929[/attachimg]    详情 回复 发表于 2024-2-13 12:34
我今天拿stm32的学习了一下,应该要找到start的函数才行。多谢了。  详情 回复 发表于 2024-2-13 11:26
 
 
 

回复

6960

帖子

11

TA的资源

版主

5
 
littleshrimp 发表于 2024-2-13 09:04 除了OPA_Init_PGA有没有类似OPA_Start这样的函数?

我今天拿stm32的学习了一下,应该要找到start的函数才行。多谢了。

 
 
 

回复

6960

帖子

11

TA的资源

版主

6
 
littleshrimp 发表于 2024-2-13 09:04 除了OPA_Init_PGA有没有类似OPA_Start这样的函数?

我添加enable也是一样的,实现的效果是电压跟随器一样。

 

 
 
 

回复

9790

帖子

24

TA的资源

版主

7
 

我看了一下官方代码,你的配置和它的还是有一点区别,你直接使用官方代码能正常运行吗?

 

/*
  ******************************************************************************
  * [url=home.php?mod=space&uid=1307177]@File[/url] APP.c
  * [url=home.php?mod=space&uid=1315547]@author[/url] Xiao Han
  * [url=home.php?mod=space&uid=252314]@version[/url] V1.0.0
  * [url=home.php?mod=space&uid=311857]@date[/url] 2020
  * [url=home.php?mod=space&uid=159083]@brief[/url] OPA demo source code.
  ******************************************************************************
*/
 
#include  "APP.h"

OPA_HandleTypeDef OPA2_Handle;
OPA_HandleTypeDef OPA3_Handle;
/************************************************************************
 * function   : OPA_Init_PGA
 * Description: OPA Initiation as PGA mode. 
 ************************************************************************/ 
void OPA_Init_PGA(void)
{ 
    OPA2_Handle.Instance = OPA;
    OPA2_Handle.Init.OpaX = OPA2;
    OPA2_Handle.Init.Hsm = OPA_HSM_HIGH;
    OPA2_Handle.Init.VinPSel = OPA_VINP_0;
    OPA2_Handle.Init.OpaMode = OPA_MODE_PGA;
    OPA2_Handle.Init.Gain = OPA_GAIN_2_1;
    OPA2_Handle.Init.TrimEn = OPA_CSR_TRIM_DISABLE;

    HAL_OPA_Init(&OPA2_Handle);

    OPA3_Handle.Instance = OPA;
    OPA3_Handle.Init.OpaX = OPA3;
    OPA3_Handle.Init.Hsm = OPA_HSM_HIGH;
    OPA3_Handle.Init.VinPSel = OPA_VINP_0;
    OPA3_Handle.Init.OpaMode = OPA_MODE_PGA;
    OPA3_Handle.Init.Gain = OPA_GAIN_2_1;
    OPA3_Handle.Init.TrimEn = OPA_CSR_TRIM_DISABLE;

    HAL_OPA_Init(&OPA3_Handle);
}

/************************************************************************
 * function   : OPA_Init_SA
 * Description: OPA Initiation as SA mode. 
 ************************************************************************/ 
void OPA_Init_SA(void)
{
    OPA2_Handle.Instance = OPA;
    OPA2_Handle.Init.OpaX = OPA2;
    OPA2_Handle.Init.Hsm = OPA_HSM_HIGH;
    OPA2_Handle.Init.VinPSel = OPA_VINP_0;
    OPA2_Handle.Init.OpaMode = OPA_MODE_SA;
    OPA2_Handle.Init.TrimEn = OPA_CSR_TRIM_DISABLE;

    HAL_OPA_Init(&OPA2_Handle);

    OPA3_Handle.Instance = OPA;
    OPA3_Handle.Init.OpaX = OPA3;
    OPA3_Handle.Init.Hsm = OPA_HSM_HIGH;
    OPA3_Handle.Init.VinPSel = OPA_VINP_0;
    OPA3_Handle.Init.OpaMode = OPA_MODE_SA;
    OPA3_Handle.Init.TrimEn = OPA_CSR_TRIM_DISABLE;

    HAL_OPA_Init(&OPA3_Handle);
}

/************************************************************************
 * function   : OPA_Init_UG
 * Description: OPA Initiation as UG mode. 
 ************************************************************************/ 
void OPA_Init_UG(void)
{
    OPA2_Handle.Instance = OPA;
    OPA2_Handle.Init.OpaX = OPA2;
    OPA2_Handle.Init.Hsm = OPA_HSM_HIGH;
    OPA2_Handle.Init.VinPSel = OPA_VINP_0;
    OPA2_Handle.Init.OpaMode = OPA_MODE_UG;
    OPA2_Handle.Init.TrimEn = OPA_CSR_TRIM_DISABLE;

    HAL_OPA_Init(&OPA2_Handle);

    OPA3_Handle.Instance = OPA;
    OPA3_Handle.Init.OpaX = OPA3;
    OPA3_Handle.Init.Hsm = OPA_HSM_HIGH;
    OPA3_Handle.Init.VinPSel = OPA_VINP_0;
    OPA3_Handle.Init.OpaMode = OPA_MODE_UG;
    OPA3_Handle.Init.TrimEn = OPA_CSR_TRIM_DISABLE;

    HAL_OPA_Init(&OPA3_Handle);
}

/************************************************************************
 * function   : OPA_Test
 * Description: OPA 1,2,3 enable. 
 *              OPA trim disable. 
 ************************************************************************/ 
void OPA_Test(enum_TEST_MODE_t test_mode)
{
    printfS("OPA Test is Ready!!! \r\n");

    switch(test_mode)
    {
        case TEST_OPA_PGA:
            printfS("OPA init as PGA mode. \r\n");
            OPA_Init_PGA();
            break;
        
        case TEST_OPA_SA:
            printfS("OPA init as SA mode. \r\n");
            OPA_Init_SA();
            break;
        
        case TEST_OPA_UG:
            printfS("OPA init as UG mode. \r\n");
            OPA_Init_UG();
            break;
    }
    
    printfS("OPA Inition OK!\r\n");
}

另外Enable函数的问题,我看了一下,在HAL_OPA_Init里已经有      SET_BIT(*gu32RegCrx, OPA_CSR_EN); 对应的操作,所以官方代码是没单独使用HAL_OPA_Enable

 

 

点评

我跑的就是官方的代码。感觉还是哪里没有弄好,看来得等他们上班才能搞定了。  详情 回复 发表于 2024-2-13 19:06
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

6960

帖子

11

TA的资源

版主

8
 
littleshrimp 发表于 2024-2-13 13:12 我看了一下官方代码,你的配置和它的还是有一点区别,你直接使用官方代码能正常运行吗?   /* ...

我跑的就是官方的代码。感觉还是哪里没有弄好,看来得等他们上班才能搞定了。

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
单片机、DSP、PLD/EDA的介绍、比较和分析

摘 要:当今,数字时代的核心动力便是单片机,DSP ,PLD/ EDA ,以其各自的特点满足了各种需要,推动着信息技术的快速发展。这里将对 ...

VxWorks操作系统及实时多任务程序设计

非常不错的资料,与大家分享 欢迎下载:)

全国大学生电子设计竞赛相关帖子汇总

由于帖子的不断更新以及论坛的现实篇幅有限,故难免会有一些好贴沉下去而不能发挥余热~~~ 在此特整理汇总全国大学生电子设计竞赛 ...

超级电容器贴近我们生活吗?

随着社会的快速发展,我们的生活也越来越方便快捷,它的功劳归功于智能家居。让我们一起来看看我们的生活智能到哪了? 智能家 ...

【基于NUCLEO-F746ZG电机开发应用】12.参数配置-定时器TIM1配置

在伺服电机的控制过程中,使电机能够按照自己的想法转起来,一定要用到PWM输出控制,但是PWM该如何产生,频率如何控制,占空比 ...

[HPM-DIY]hpm6750 openmv移植成功,使用cherryusb作为repl交互

使用官方板子hpm6750evkmini,移植成功openmv,全新的Board支持,移植过程中学到不少东西,新鲜玩意就是好。 使用ses工程进 ...

ZigBee无线传感器网络设计与实现

本书面向立志于进行ZigBee无线传感器网络开发的初学者以及向无线网络开发转型的工程师,按照理论实践相结合的思想,介绍了ZigBee ...

回顾2022展望2023+时间过的真快呀

时间过得真是快,转眼娃娃会走路讲话了 ●你的2022年是如何度过的 出差60天,游了西湖,桂林,夫子庙,完美躲避了疫情; ...

PWM整流电路的网侧滤波?

本帖最后由 乱世煮酒论天下 于 2024-5-16 22:45 编辑 PWM整流滤波单元的参数该怎么选择,网侧滤波器一般是LCL结构,有时还会 ...

IEC61850转Modbus RTU解决案例

IEC61850定义 IEC61850标准是电力系统自动化领域的全球通用标准。它通过标准的实现,实现了智能变电站的工程运作标准化。使得 ...

关闭
站长推荐上一条 1/9 下一条

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