请教ADC转换的问题
在LG0的例程中,计算ADC的值为什么是这样的 GetChannelVoltage = ((uint64_t)DMAResult * ADC_VREF * 3000) / (DMAResult * 4095);具体代码如下:
uint16_t DMAResult;
void GetDMAChannelSample(uint32_t channel)
{
FL_VREF_EnableVREFBuffer(VREF);//使能VREF BUFFER
FL_ADC_DisableSequencerChannel(ADC, FL_ADC_ALL_CHANNEL);//清空打开的通道
FL_ADC_EnableSequencerChannel(ADC, FL_ADC_INTERNAL_VREF1P2);//通道选择VREF
FL_ADC_EnableSequencerChannel(ADC, channel);//通道选择ADC_1
ADC_DMA(DMAResult, 2);
FL_ADC_ClearFlag_EndOfConversion(ADC);//清标志
FL_ADC_Enable(ADC); // 启动ADC
FL_ADC_EnableSWConversion(ADC);// 开始转换
// 等待转换完成
while(!FL_DMA_IsActiveFlag_TransferComplete(DMA, FL_DMA_CHANNEL_0));
FL_DMA_ClearFlag_TransferComplete(DMA, FL_DMA_CHANNEL_0);
FL_ADC_Disable(ADC); // 关闭ADC
FL_ADC_DisableSequencerChannel(ADC, channel);//通道关闭ADC_1
FL_ADC_DisableSequencerChannel(ADC, FL_ADC_INTERNAL_VREF1P2);//通道关闭VREF
FL_VREF_DisableVREFBuffer(VREF);//关闭VREF BUFFER
// 转换结果
}
uint32_t GetSingleChannelVoltage_DMA(uint32_t channel)
{
uint32_t GetChannelVoltage;
GetDMAChannelSample(channel);
GetChannelVoltage = ((uint64_t)DMAResult * ADC_VREF * 3000) / (DMAResult * 4095);
return GetChannelVoltage;
}
手册ADC章节有介绍,通过内部1.22V,计算当前参考电压,然后通过参考电压,计算当前电压。
页:
[1]