ADC及DMA的使用原理和使用过程
ADC(Analog-Digital Converter) 模拟-数字转换器
可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁
ADC主要用于传感器,传感器一般是利用电阻电容等测量外界信息的物理量,导致测量电路电压发生变化,产生模拟信号,二单片机只能读取数字信号,所以就需要我们把模拟信号转变为数字信号
ADC的类型
- 积分型:工作原理是将输入电压转换成时间(脉冲宽度信号)或频率(脉冲频率),然后由定时器、计数器获得数值。优点是用简单电路就能获得高分辨率,缺点是慢。已逐渐淘汰。
- 逐次逼近型:由一个比较器和DA转换器通过逐次比较逻辑构成,从MSB(Most Significant Bit)开始,将输入电压的每一位与内置DA转换器输出进行顺序比较,经n次比较后输出数字值;为中等电路规模。优点是速度快,功耗低,低分辨率(<12bit)时价格较低,反之价格很高。
- 并行比较型/串行比较型:采用多个比较器,仅做一次比较就实行转换,也叫Flash型。n位的转换需要n-1个比较器,因此电路规模极大,价格很高,一般只适用于视频AD转换器等高速领域。
ADC的通道
ADC的转换模式
- 单通道单次转换模式:ADC只执行一次转换,只能用于单通道
- 单通道连续转换模式:转换结束后马上开始新的转换,只能用于单通道
- 多通道单次转换模式:ADC扫描选中的所有通道,在每个组的每个通道上执行单次转换。每个转换结束时,这一组的下一个通道会被自动转换。若设置了连续转换模式,转换会在选择组的最后一个通道停止。
- 多通道多次转换模式:ADC扫描选中的所有通道,在每个组的每个通道上执行单次转换。每个转换结束时,这一组的下一个通道会被自动转换。若设置了连续转换模式,转换不会在选择组的最后一个通道停止,而是再次从选择组的第一个通道继续转换。
- 间断模式:触发一次只转换一个通道。在所选转换通道循环,由触发信号启动新一轮EOC(End of Conversion)表示单个通道是否转换完毕,EOS(End of Sequence)表示所有通道是否转换完毕
ADC采样时间计算
STM32 ADC总转换时间为:TCONV = 采样时间 + 12.5个ADC周期
ADC有一个内置校准模式,校准可大幅减小因内部电容器组的变化而造成的误差。校准期间,每个电容器上都会计算出一个误差修正码,用于消除随后的转换中每个电容器上产生的误差,建议在每次上电后执行一次校准,启动校准前ADC必须处于关电状态超过至少两个ADC时钟周期。在HAL库中,ADC启动后添加四个函数。
ADC采样配置的步骤
- 开启RCC时钟,包括ADC,GPIO内包括ADC预分频ADCCLK也要配置(RCC库函数中);
- GPIO配置,为ADC采样输入;
- 配置多路选择开关;
- 配置ADC结构体;
- ADC采样模式
- ADC时钟分频
- ADC采样时间
- 连续采样或单次采样
- 配置校准(复位校准和开始校准)
- 软件触发开启ADC采样
- 设置一个合适的采样时间
- 进行采样数据读取
- 进行采样数据转换:采样值/2^ADC位数*参考电压
DMA(Direct Memory Access) 直接内存访问
可以将数据从一个地址空间复制到另一个地址空间;只要DMA通信通道已经建立,这个过程无需CPU参与。
DMA的主要特性
- 双向的AHB主端口,GPDMA:两个端口
- 内存映射数据从源到目标的传输:
- 外设到内存
- 内存到外设
- 内存到内存
- 外设到外设
- 在睡眠和停止模式下自主数据传输
- 并发DMA通道
- GPDMA有16个通道
GPDMA的通道分配
- 用户需要分配一个通道用于GPDMA传输,为了实现全双工通信,GPDMA对给定的GPDMA通道试用装用的FIFO;FIFO单元的单位是一字节。(First In First Out,也就是队列)
- FIFO的大小决定了通道能够有效处理的最大DMA突发大小(突发长度与数据宽度的乘积)。通常突发长度越大,系统总体性能越好,有更高的吞吐率/带宽传输,更低的系统总线占用率
- 由于系统总线为32位字宽,建议将DMA源、目标数据宽度设定为32位(GPDMA_CxTR1中的S/DDW_LOG2[1:0]),以便最大限度的减少总线使用量
GPDMA的端口选择
GPDMA的两个主端口:端口0应分配给与外设之间的传输,因为在此端口和apb外设之间有一条直接的硬件数据途径,位于apb矩阵之外;端口1应分配给内存之间的数据传输。
DMA的数据传输模式
普通模式:随后DMA会停止工作,不再接收数据。需关断DMA使能后再次重新配置后才能再次使用。
循环模式:DMA传输了固定长度的数据后,会产生中断标志,但不会停止工作,新的数据会循环保存到内存中,覆盖之前的数据。