嵌入式ADC和DMA
ADC(模数转换)
1.模拟信号(A)与数字信号(D)
模拟信号(Analog) :
模拟信号是指用连续变化的物理量所表达的信息,如温度、湿度、压力、长度、电流、电压等等,我们通常又把模拟信号称为连续信号,它在一定的时间范围内可以有无限多个不同的取值。模拟信号传输过程中,先把信息信号转换成几乎“一模一样”的波动电信号(因此叫“模拟”)(传感器可以将非电学量转换成电学量)数字信号(Digital) :数字信号,是指自变量是离散的、因变量也是离散的信号,这种信号的自变量用整数表示,因变量用有限数字中的一个数字来表示。在计算机中,数字信号的大小常用有限位的二进制数表示。
2. 概念
转换器(converter)是指将一种信号转换成另一种信号的装置。信号是信息存在的形式或载体。在自动化仪表设备和自动控制系统中,常将一种信号转换成另一种与标准量或参考量比较后的信号,以便将两类仪表联接起来,因此,转换器常常是两个仪表(或装置)间的中间环节。ADC,全称模数转换器(Analog-to-Digital Converter),模拟数字转换器即A/D转换器,ADC的作用就是将连续变化的模拟信号转换为离散的数字信号。通常的模数转换器是将一个输入电压信号转换为一个输出的数字信号。由于数字信号本身不具有实际意义,仅仅表示一个相对大小。故任何一个模数转换器都需要一个参考模拟量作为转换的标准,比较常见的参考标准为最大的可转换信号大小。而输出的数字量则表示输入信号相对于参考信号的大小。
ADC应用场景
1)智能手机(陀螺仪,加速度计,光传感器)
2)温度计和湿度计(模拟信号转换为数字信号进行处理和显示)
3)电子秤(压力传感器测量物体的重量)
3.ADC原理
采用逐次逼近(二分法)的思想
若为12位的ADC,假设电压范围是0~4v, 则是将0~4v分成2^12(4096)份,每一份对应一个电压取值范围。
我们可以知道,位数越多,测得的电平准确度会更高。
4.ADC特性
量程:能测量的电压范围 0 ~ 3.6V(VSS ~VDD) (单片机供电范围是1.71到3.6)分辨率:ADC的分辨率通常以输出二进制数的位数表示,位数越多,分辨率越高,一般来说分辨率越高,转化时间越长。
可配置的转换精度:6位,8位,10位,12位,14位 2^6 2^8 2^10 2^12 。。。
转化时间:模拟输入电压在允许的最大变化范围内,从转换开始到获得稳定的数字量输出所需要的时间称为转换时间
5.CubeMX配置
6.ADC单通道采集
U5系列特有函数:(以ADC4为例)HAL_PWREx_EnableVddA();
这个函数用于启用VDDA电压域。VDDA是指处理器的模拟电源电压域,用于供电模拟功能模块,例如ADC,DAC等。通过HAL_PWREx_EnableVddA()函数,可以使处理器的VDDA电压域处于启用状态,以供给模拟功能模块所需的电源。
HAL_PWREx_EnableVddIO2();
这个函数用于启用VDDIO2电压域。VDDIO2是指处理器的I/O引脚电源域,用于供电处理器的I/O引脚。通过调用HAL_PWREx_EnableVddIO2()函数,可以使处理器的VDDIO2电压域处于启用状态,以供给处理器的I/O引脚所需的电源。
HAL_ADCEx_Calibration_Start(&hadc4,ADC_CALIB_OFFSET,ADC_SINGLE_ENDED); //校准单端ADC采样(用于采样一个输入端)
单端模式:在单端模式中,ADC的输入信号是相对于一个固定的参考点(通常是地或VCC的某个比例)进行测量的。这意味着ADC的一个输入端连接到待测信号,而另一个输入端(通常是内部的或外部的参考地)保持固定。
HAL_ADCEx_Calibration_Start(&hadc4,ADC_DIFFERENTIAL_ENDED);
//校准差分端ADC采样(用于采样多个输入端)
差分模式:在差分模式中,ADC测量两个输入端之间的电压差。这种模式对于抑制共模噪声非常有效,因为两个输入端都会受到相同的噪声影响,而差分测量会消除这种共模成分。
ADC函数调用的步骤:
- 启动ADC芯片(外设)开始工作
- 等待转换(需要转换时间)
- 获取转换结果
- 停止ADC
对应的函数:
HAL_ADC_Start(&hadc4);//启动adc转换HAL_ADC_PollForConversion(&hadc4,100); //等待转换完成,第二个参数表示超时时间(ms)int value=HAL_ADC_GetValue(&hadc4); //获取ADC转换结果HAL_ADC_Stop(&hadc4); //停止
实验:采集VBAT电压
VBAT是单片机上的一个引脚名
本实验VBAT可由核心板的3.3V或者外部的纽扣电池提供
真实的电压值=value*4*3.3/4095
7.ADC多通道采集
为保证采集数据的准确性,我们可以采集完一轮后重新关闭开启ADC。
DMA
1.简介
数据搬运工(从哪搬?搬到哪?搬多少?)
DMA(Direct Memory Access,直接内存(存储器)访问)是一种内存访问技术,允许某些硬件设备独立地、直接地访问主内存,而不需要通过中央处理器(CPU)的介入。DMA传输是将数据从一个地址空间搬到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。CPU无时不刻的在处理着大量的事务,但有些事情却没有那么复杂,比方说数据的复制和存储数据,如果我们把这部分的CPU资源拿出来,让CPU去处理其他的复杂计算事务,能够更好的利用CPU的资源。因此:转移数据(尤其是转移大量数据)是可以不需要CPU参与。比如希望外设A的数据拷贝到外设B,只要给两种外设提供一条数据通路,直接让数据由A拷贝到B 不经过CPU的处理
DMA作用:DMA的传输方式无需CPU参与,可以直接控制传输。
DMA给外部设备和内存开辟了一条直接数据传输的通道。(DMA总线)
目的:给CPU节省资源,使CPU的工作效率提高
2.DMA主要特性
1)同一个DMA模块可以有多个优先级请求:很高、高、中等、低2)每个通道有3个事件标志: DMA半传输、DMA传输完成、 DMA传输出错
3)数据源 目标 数据传输宽度对齐 传输数据 字节(8位) 半字(16位) 全字(32位 )
4)双向的AHB主端口,GPDMA:2个端口
5)内存映射数据从源到目标的传输:
外设到内存
内存到外设
内存到内存或外设到外设
6)在睡眠和停止模式下自主数据传输
8)并发DMA通道
8)GPDMA 有 16 个通道。
3. DMA增量或循环模式
1)增量:外设搬移到存储器的时候 ,不希望覆盖上一个数据,会将内存设置为增量模式2)循环:DMA不停循环的搬移数据,一组的数据传输完成时,计数寄存器将会自动地被恢复成配置该通道时设置的初值。
DMA的增量或循环模式是指在进行连续数据传输时,DMA可以选择以递增的方式访问源和目标地址,或者以循环的方式重复访问相同的地址。
在增量模式下,DMA控制器在每次传输完成后,会自,外部设备可以连续地读写数据,而不需要额外的指令干预。
4.CubeMX配置
配置发送端
配置接收
DMA接收搬运
DMA做发送搬运