牛卧堂MCU技术交流

标题: 关于ADC 差分输入(Differential input)问题 [打印本页]

作者: 匿名    时间: 2022-11-15 16:35
标题: 关于ADC 差分输入(Differential input)问题
各位专家你好,目前使用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 读取出来的值有点奇怪
不知有没有参考的代码和电路能够解决我的问题

作者: admin    时间: 2022-11-16 10:42
1、 差分输入换算公式用错了,应该如下换算
作者: admin    时间: 2022-11-16 10:42


作者: admin    时间: 2022-11-16 10:42
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. }
复制代码


作者: 匿名    时间: 2022-11-16 17:14
admin 发表于 2022-11-16 10:42

感謝您的解惑
作者: 匿名    时间: 2022-11-16 17:15
admin 发表于 2022-11-16 10:42
2、既然用查询方式,建议不要使能中断。按如下修改:

非常謝謝您
作者: admin    时间: 2022-11-28 13:07
游客 61.216.111.x 发表于 2022-11-16 09:15
非常謝謝您

差分输入有些要求,建议您直接联系下我们技术 yhu@nuvoton.com
作者: 匿名    时间: 2023-4-19 16:36
想问下m480 怎么实现循环差分采样




欢迎光临 牛卧堂MCU技术交流 (http://nuvoton-mcu.com/) Powered by Discuz! X3.2