adc通道输出正弦波_型ADC是如何构成和工作的?

本文介绍了Σ-Δ型ADC的工作原理,这种ADC采用过采样和噪声整形技术,其噪底由热噪声决定,不受量化噪声限制。Σ-Δ调制器是一个负反馈系统,输出的转换率与输入信号的变化率同步,通过低通数字滤波器重构模拟输入的精确数字转换结果。文章通过比较不同阶数调制器的噪声传递函数,展示了提高系统分辨率的方法,并以AD7177-2为例,展示了一款高性能的Σ-Δ型ADC的应用特点。
摘要由CSDN通过智能技术生成
好文章当然要分享啦~如果您喜欢这篇文章,请联系后台添加白名单,欢迎转载哟~ 91bdfd85fdc14cf27305c4c7a8333e1e.gif

Σ-Δ型ADC是当今信号采集和处理系统设计人员的工具箱中必不可少的基本器件。本文的目的是让读者对Σ-Δ型号ADC拓扑结构背后的根本原理有一个基本了解。本文探讨了与ADC子系统设计相关的噪声、带宽、建立时间和所有其他关键参数之间的权衡分析示例,以便为精密数据采集电路设计人员提供背景信息。

a0feef4caa91e9baa0dbf97398497714.png

它通常包括两个模块:Σ-Δ调制器和数字信号处理模块,后者通常是数字滤波器。Σ-Δ型ADC的简要框图和主要概念如图1所示。

e012d1210bb37a8ddc06ab07ec20c8c6.png

图1. Σ-Δ型ADC的关键概念

Σ-Δ调制器是一种过采样架构,因此,我们从奈奎斯特采样理论和方案以及过采样ADC操作开始讨论。

图2比较了ADC的奈奎斯特操作、过采样方案和Σ-Δ调制(也是过采样)方案。

以下是一段基于STM32F4的ADC通道采样正弦波的代,可以供参考: ``` #include "stm32f4xx.h" #include "stm32f4xx_gpio.h" #include "stm32f4xx_rcc.h" #include "stm32f4xx_adc.h" #include "misc.h" #define ADC1_DR_ADDRESS ((uint32_t)0x4001204C) __IO uint16_t ADC1ConvertedValue[3]; void GPIO_Configuration(void); void ADC1_Configuration(void); void DMA_Configuration(void); int main(void) { GPIO_Configuration(); ADC1_Configuration(); DMA_Configuration(); ADC_SoftwareStartConv(ADC1); while(1); } void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOA, &GPIO_InitStructure); } void ADC1_Configuration(void) { ADC_CommonInitTypeDef ADC_CommonInitStructure; ADC_InitTypeDef ADC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent; ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2; ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles; ADC_CommonInit(&ADC_CommonInitStructure); ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b; ADC_InitStructure.ADC_ScanConvMode = ENABLE; ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfConversion = 3; ADC_Init(ADC1, &ADC_InitStructure); ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_3Cycles); ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_3Cycles); ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 3, ADC_SampleTime_3Cycles); ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE); ADC_Cmd(ADC1, ENABLE); while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_ADEN)); } void DMA_Configuration(void) { DMA_InitTypeDef DMA_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE); DMA_InitStructure.DMA_Channel = DMA_Channel_0; DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC1_DR_ADDRESS; DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ADC1ConvertedValue; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; DMA_InitStructure.DMA_BufferSize = 3; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; DMA_Init(DMA2_Stream0, &DMA_InitStructure); DMA_Cmd(DMA2_Stream0, ENABLE); ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE); ADC_DMACmd(ADC1, ENABLE); } #ifdef USE_FULL_ASSERT void assert_failed(uint8_t* file, uint32_t line) { while(1); } #endif ``` 在这个例子中,我们使用了PA0、PA1和PA2三个通道来采样正弦波。首先,我们需要配置GPIO,将这三个通道设置为模拟输入。然后,我们需要配置ADC1,设置分辨率、采样时间、通道等参数。为了实现连续转换,我们需要设置扫描模式和连续转换模式。最后,我们需要启用ADC1,并等待ADC稳定后开始采样。 为了实现多通道采样,我们需要使用DMA。首先,我们需要配置DMA,设置DMA通道、传输方向、缓存地址等参数。然后,我们需要启用DMA,并将ADC的DMA请求开启。这样,在ADC每次采样后,DMA会将采样值存储到缓存中。 在这个例子中,我们使用了循环模式,即DMA会不断地将采样值存储到缓存中。我们可以在主函数中使用ADC_SoftwareStartConv函数触发ADC转换,并在while循环中等待DMA将采样值存储到缓存中。这样,我们就可以实现多通道采样正弦波了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值