打印
[技术问答]

M261 ADC 配置问题

[复制链接]
1415|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
caodd|  楼主 | 2021-8-19 10:45 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 caodd 于 2021-8-24 09:28 编辑

本人使用 M261 的 ADC 测量电压结果不正确,尝试修改 SYS_VREFCTL 寄存器,无论改成哪种参考电压,测量出来的结果都是一样的。

如:
ADC 引脚输入电压是 1.2V,SYS_VREFCTL = 0x07 时(使用内部 2.0V 参考电压),ADC 寄存器值是 1490;
ADC 引脚输入电压是 1.2V,SYS_VREFCTL = 0x0F 时(使用内部 3.0V 参考电压),ADC 寄存器值依然是 1490;
SYS_VREFCTL 修改为其他值,结果不变。

单片机型号是 M261ZIAAE,33引脚,没有 VREF 引脚。

之前用过 M452 系列单片机,按照手册进行配置之后,ADC 测量结果是正确的。


求教如何正确配置 M261 的 ADC?


使用特权

评论回复
沙发
jasontu| | 2021-8-20 15:39 | 只看该作者
把你的代码贴上来,看是不是有初始化错误的地方

使用特权

评论回复
板凳
caodd|  楼主 | 2021-8-20 15:56 | 只看该作者
本帖最后由 caodd 于 2021-8-20 15:58 编辑
jasontu 发表于 2021-8-20 15:39
把你的代码贴上来,看是不是有初始化错误的地方

我用的是 mbed-os,ADC 初始化和读取结果的代码在这里:
https://github.com/ARMmbed/mbed-os/blob/mbed-os-6.12.0/targets/TARGET_NUVOTON/TARGET_M261/analogin_api.c

除此之外,我自己添加了配置内部参考电压的代码:
SYS_UnlockReg();
SYS->VREFCTL = 0x0f; // 修改为 0x07 或者其他值 ADC 测量结果不变
SYS_LockReg();

ADC 测量代码:
AnalogIn bat(adc); // adc 是实际用到的引脚名
printf("adc data: %hu\n", bat.read_u16() >> 4);

使用特权

评论回复
地板
jasontu| | 2021-8-23 09:50 | 只看该作者
应该是bit 3 IVREN 要打开,其它是选择电压


使用特权

评论回复
5
caodd|  楼主 | 2021-8-24 09:47 | 只看该作者
jasontu 发表于 2021-8-23 09:50
应该是bit 3 IVREN 要打开,其它是选择电压

M261 手册里面没有这个 IVREN,不过 bit3 我也有设置为 1,没有变化。SYS_VREFCTL 的低 5 位无论设置什么值,测出来的结果都一样。

通过测量结果反推参考电压,发现参考电压其实就是 VDD。可能是因为没有外部 VREF 引脚,所以或许是单片机内部直接把 VREF 硬连接到 VDD 上了?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝