查看: 3946|回复: 4

adc采集内部opa1通道不正常

[复制链接]

3

主题

4

帖子

67

积分

中级工程师

Rank: 2

积分
67
发表于 2022-1-17 14:09:34 | 显示全部楼层 |阅读模式
将opa1设置成pga模式  将opa输出PC4与adc输入PC9短接    运行V = (float)GetSingleChannelVoltage_DMA(FL_ADC_EXTERNAL_CH0)/1000;   采集数据正常
断开opa输出与adc输入   运行V = (float)GetSingleChannelVoltage_DMA(FL_ADC_INTERNAL_OPA1)/1000;   采集电压始终为0.975v
回复

使用道具 举报

1

主题

44

帖子

2278

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2278
发表于 2022-1-18 15:49:39 | 显示全部楼层
看现象感觉是 计算公式时调用的参数反了,把公式中的ram[0]和ram[1]互换下呢
回复

使用道具 举报

3

主题

4

帖子

67

积分

中级工程师

Rank: 2

积分
67
 楼主| 发表于 2022-1-18 17:48:38 | 显示全部楼层
我是一只鱼21 发表于 2022-1-18 15:49
看现象感觉是 计算公式时调用的参数反了,把公式中的ram[0]和ram[1]互换下呢

uint32_t GetSingleChannelVoltage_DMA(uint32_t channel)
{
    uint32_t GetChannelVoltage;
    GetDMAChannelSample(channel);
    GetChannelVoltage = ((uint64_t)DMAResult[0] * ADC_VREF * 3000) / (DMAResult[1] * 4095);

    return GetChannelVoltage;
}

DMAResult[0]跟DMAResult[1] 对调一下就好了   那就是库函数有问题
回复

使用道具 举报

1

主题

44

帖子

2278

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2278
发表于 2022-1-19 13:52:40 | 显示全部楼层
q825117996 发表于 2022-1-18 17:48
uint32_t GetSingleChannelVoltage_DMA(uint32_t channel)
{
    uint32_t GetChannelVoltage;

其实这个取决于扫描顺序,如果不想对调这两个顺序的话,你也可以将ADC结构体配置的扫描顺序修改下也行。
回复

使用道具 举报

1

主题

44

帖子

2278

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2278
发表于 2022-1-19 13:55:42 | 显示全部楼层
q825117996 发表于 2022-1-18 17:48
uint32_t GetSingleChannelVoltage_DMA(uint32_t channel)
{
    uint32_t GetChannelVoltage;

这个测试函数倒是可以再优化下,让兼容性更好一点
回复

使用道具 举报

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

本版积分规则

快速回复 返回顶部 返回列表