找回密码
 立即注册

QQ登录

只需一步,快速开始

打印 上一主题 下一主题
开启左侧

关于ADC 差分输入(Differential input)问题

[复制链接]
跳转到指定楼层
楼主
匿名  发表于 2022-11-15 16:35:13 |只看大图 回帖奖励 |倒序浏览 |阅读模式
各位专家你好,目前使用M487JIDAE
想使用ADC差分输入去讀取音源線訊號
参考TRM的代码设定 但是读取出来的值有点奇怪
ADC clock 、GPIO mode的设定看起来没问题
使用PB0 PB1
//---------------------------------------------------------------
下面是我ADC初始化的配置
void        EADC_Init()
{               
SYS_ResetModule(EADC_RST);       

EADC_Open(EADC, EADC_CTL_DIFFEN_DIFFERENTIAL);

EADC_ConfigSampleModule(EADC, 0, EADC_SOFTWARE_TRIGGER, 0);

EADC_CLR_INT_FLAG(EADC, EADC_STATUS2_ADIF0_Msk);

EADC_ENABLE_INT(EADC, BIT0);

EADC_ENABLE_SAMPLE_MODULE_INT(EADC, 0, BIT0);
}

//---------------------------------------------------------------
跟ADC读取函式

uint16_t        Get_ADC_VAL()
{
uint16_t vol=0;

EADC_START_CONV(EADC, BIT0);

while (EADC_GET_INT_FLAG(EADC, BIT0) == 0);

vol = EADC_GET_CONV_DATA(EADC, 0);

EADC_CLR_INT_FLAG(EADC, BIT0);

return        vol;
}

//---------------------------------------------------------------
输入测试电压
V+:3.32V    V-:     0V       vol:3.32V  (0xFFF)
V+:3.32V    V-:1.66V       vol:2.49V   (0xC05)
V+:1.66V    V-:1.66V       vol:1.66V   (0x805)
V+:1.66V    V-:    0V        vol:2.49V  (0xC05)

看起來像single-end mode 读取出来的值有点奇怪
不知有没有参考的代码和电路能够解决我的问题
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 顶 踩
回复

使用道具

沙发
admin 发表于 2022-11-16 10:42:06 | 只看该作者
1、 差分输入换算公式用错了,应该如下换算
牛卧堂
回复 支持 反对

使用道具 举报

板凳
admin 发表于 2022-11-16 10:42:26 | 只看该作者

牛卧堂
回复 支持 反对

使用道具 举报

地板
admin 发表于 2022-11-16 10:42:35 | 只看该作者
2、既然用查询方式,建议不要使能中断。按如下修改:
  1. void        EADC_Init()
  2. {               
  3. SYS_ResetModule(EADC_RST);      
  4. EADC_Open(EADC, EADC_CTL_DIFFEN_DIFFERENTIAL);
  5. EADC_ConfigSampleModule(EADC, 0, EADC_SOFTWARE_TRIGGER, 0);
  6. //EADC_CLR_INT_FLAG(EADC, EADC_STATUS2_ADIF0_Msk);
  7. //EADC_ENABLE_INT(EADC, BIT0);
  8. //EADC_ENABLE_SAMPLE_MODULE_INT(EADC, 0, BIT0);
  9. }
  10. //---------------------------------------------------------------
  11. 跟ADC读取函式
  12. uint16_t        Get_ADC_VAL()
  13. {
  14. uint16_t vol=0;
  15. EADC_START_CONV(EADC, BIT0);
  16. //while (EADC_GET_INT_FLAG(EADC, BIT0) == 0);修改为:
  17. while(EADC_GET_DATA_VALID_FLAG(EADC, BIT0) != BIT0);
  18. vol = EADC_GET_CONV_DATA(EADC, 0);
  19. EADC_CLR_INT_FLAG(EADC, BIT0);
  20. return        vol;
  21. }
复制代码

牛卧堂
回复 支持 反对

使用道具 举报

5#
匿名  发表于 2022-11-16 17:14:26
回复 支持 反对

使用道具

6#
匿名  发表于 2022-11-16 17:15:03
admin 发表于 2022-11-16 10:42
2、既然用查询方式,建议不要使能中断。按如下修改:

非常謝謝您
回复 支持 反对

使用道具

7#
admin 发表于 2022-11-28 13:07:22 | 只看该作者

差分输入有些要求,建议您直接联系下我们技术 yhu@nuvoton.com
牛卧堂
回复 支持 反对

使用道具 举报

8#
匿名  发表于 2023-4-19 16:36:17
想问下m480 怎么实现循环差分采样
回复 支持 反对

使用道具

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

新唐MCU