嵌入应用及基础技术 5_第1页
嵌入应用及基础技术 5_第2页
嵌入应用及基础技术 5_第3页
嵌入应用及基础技术 5_第4页
嵌入应用及基础技术 5_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录CONTENTS第八章模数转换器与数模转换器模数转换器和数模转换器概述01STM32F407模数转换器02

STM32F407数模转换器0302ADC和DACHAL库函数04模数转换器实例05知识、能力、素质目标阐述模数转换与数模转换的概念和特点说明STM32的模数转换器、数模转换器的设置及应用说明模数转换器实例开发流程知识目标培养严谨细致的工作态度,注重细节提高分析问题和解决问题的能力素质目标运用STM32CubeMX软件配置模数转换器工程运用KeilMDK软件编写程序,并进行分析运用Proteus软件搭建模数转换器仿真电路设计基于模数转换器的实例能力目标目标01模数转换器和数模转换器概述ADC的工作原理包括采样和量化两个过程:采样是以一定时间间隔获取模拟信号的瞬时值,量化则将这些值转换为有限数量的数字值,虽然这一过程会引入一定的量化误差。模数转换器连续信号采样转变成离散信号数模转换器数模转换器(DAC)主要任务是将离散的数字信号转换为连续的模拟信号,通常以电流、电压或电荷的形式存在。DAC通常由输入寄存器、模拟开关、电阻网络、基准电源和求和放大器等组成。数字信号通过输入寄存器传入后,模拟开关根据每一位数字信号的值选择性地接通或断开电阻网络中的电阻,形成与数字信号相对应的模拟电压或电流,最后通过求和放大器将这些信号合成一个连续的模拟信号。DAC的精确性和稳定性对信号转换至关重要,同时需要平衡转换速度与功耗,以满足不同应用场景的需求。8.1.1模数转换器采样是将连续变化的模拟信号按一定时间间隔转换为离散数字信号,确保采样准确性需要稳定的采样电路和合理的采样频率,遵循奈奎斯特定理以避免混叠现象。采样保持则是在新的采样周期到来之前保持采样值,直到ADC开始转换为数字信号。1.采样和保持ADC模拟信号的采样过程和采样结果量化将模拟信号划分为离散的数字值,并用二进制数表示。ADC通过将模拟信号分割成微小部分,将其转换为数字电平,便于数字系统处理。编码将量化后的信号转为二进制输出,准确反映模拟信号的数字近似值。2.量化和编码分辨率表示数字量变化最小单位与模拟信号变化量的关系,通常通过ADC的位数表示。位数越多,分辨率越高。例如,10位ADC能够区分3.3V范围内的3.22mV变化,提供更高的转换精度和性能。3.分辨率转换速率表示完成一次转换所需时间的倒数。不同类型的ADC转换速率差异显著,从毫秒级(积分型)到纳秒级(全并行型)。采样时间与转换速率相关,采样速率通常等同于转换速率,单位为KSPS或MSPS。4.转换速率5.量化误差量化误差来源于ADC的有限分辨率,表现为阶梯状转移特性与理想直线型特性之间的偏差。误差大小与最小数字量(LSB)相关,通常为1LSB或1/2LSB。提高分辨率可以减小量化误差。满刻度误差是输入信号达到最大值时输出与理论最大值之间的偏差,受电路非线性和温度效应等因素影响。为提高精度,通常需要对ADC进行校准和补偿。6.偏移误差7.满刻度误差ADC的偏移误差指输入信号为零时输出非零的偏差,通常由电路不对称、温度效应或元件老化引起。为减小误差,可通过外接电位器调整参考电平,但这种调整受环境和操作精度影响。8.线性度ADC的线性度指其实际转换特性与理想直线特性之间的最大偏移程度,是衡量其稳定性和一致性的关键指标。除了线性度,ADC还涉及多个重要性能指标,包括绝对精度、相对精度、微分非线性(DNL)、单调性、无错码、总谐波失真(THD)和积分非线性(INL)。这些指标共同决定了ADC的转换精度、稳定性和应用范围。8.1.2数模转换器DAC的线性度衡量实际输出与理想输出之间的最大偏差,通常以满量程的百分比表示,如±1%线性度意味着最大偏差不超过满刻度的±1%。高线性度确保更精确的输出,适用于要求高精度的应用。1.分辨率DAC的分辨率表示输入数字量的微小变化对应的输出模拟量变化,通常通过满量程值除以2n(n为位数)计算。例如,满量程为5V的DAC,8位DAC的分辨率为19.5mV,而12位DAC为1.22mV,位数越多,分辨率越高,适用于高精度需求。2.线性度DAC的建立时间是描述输入数字量变化时输出模拟信号稳定所需的时间,反映了DAC的响应速度和性能。建立时间的长短取决于DAC的类型,电流输出型通常较短,而电压输出型可能较长。根据建立时间的不同,DAC可以分为超高速(<1μs)、高速(10μs至1μs)、中速(100μs至10μs)和低速(≥100μs)等级。3.绝对精度和相对精度4.建立时间DAC的绝对精度指的是输入数码对应的模拟量输出与理论值之间的最大误差,包括增益误差、零点误差、非线性误差和噪声等,通常要求最大误差小于一个最低有效位(LSB)。相对精度则表示最大误差占满刻度的百分比,便于比较不同量程的DAC性能。DAC的转换速率是指单位时间内能完成的转换次数,通常以每秒转换次数表示,反映了DAC对输入数字信号的响应速度。高转换速率的DAC适用于需要快速数据转换的应用,如高速数据采集和实时控制系统,而低转换速率的DAC则适合于对速度要求较低的应用。5.输出范围DAC的输出范围指其能够生成的模拟信号的幅度,通常以电压或电流形式表示。不同类型的DAC设计提供不同的输出范围,如0V至5V的电压输出或0mA至10mA的电流输出,以满足不同应用的需求。选择DAC时,需要确保其输出范围与系统要求匹配。6.转换速率02STM32F407模数转换器8.2.1STM32F407ADC概述STM32F407内置三个高性能的12位ADC模块,ADC1和ADC2各包含16个通道,ADC3则有8个通道。通过通道复用功能,总共支持最多24个模拟输入通道。这些通道支持多种操作模式,包括单次、连续、扫描模式和间断执行,增强了应用的灵活性和适应性。STM32F407的ADC模块包含规则组和注入组两种转换模式。规则组最多可配置16个通道,支持外部或内部信号源,适用于周期性的数据采集任务,如温度监测和电池电压检测,支持软件或硬件触发。注入组适用于高优先级、事件驱动的任务,最多支持4个通道。注入组优先级高于规则组,可以在规则组转换过程中被外部事件打断,支持中断和快速响应。8.2.2STM32F407ADC功能框图STM32F407的ADC是一个12位逐次逼近型模数转换器,具有19个复用通道,可测量16个外部信号、2个内部信号和VBAT通道。转换支持单次、连续、扫描和不连续模式,并可通过DMA请求存储结果。ADC转换结果存储在16位数据寄存器中,支持左对齐或右对齐。此外,ADC还具备模拟看门狗功能,可检测输入电压是否超出用户设定的阈值。8.2.3STM32F407ADC寄存器ADC寄存器必须在字级别(32位)对外设寄存器执行写入操作。而读访问可支持字节(8位)、半字(16位)或字(32位)。寄存器名称功能描述偏移地址复位值ADC_SRADC状态寄存器0x000x00000000ADC_CR1ADC控制寄存器10x040x00000000ADC_CR2ADC控制寄存器20x080x00000000ADC_SMPR1ADC采样时间寄存器10x0C0x00000000ADC_SMPR2ADC采样时间寄存器20x100x00000000ADC_JOFRx(x=1..4)ADC注入通道数据偏移寄存器X0x14-0x200x00000000ADC_HTRADC看门狗高阈值寄存器0x240x00000FFFADC_LTRADC看门狗低阈值寄存器0x280x00000000ADC_SQR1ADC规则序列寄存器10x2C0x00000000ADC_SQR2ADC规则序列寄存器20x300x00000000ADC_SQR3ADC规则序列寄存器30x340x00000000ADC_JSQRADC注入序列寄存器0x380x00000000ADC_JDRx(x=1..4)ADC注入数据寄存器x0x3C-0x480x00000000ADC_DRADC规则数据寄存器0x4C0x00000000ADC_CSRADC通用状态寄存器0x000x00000000ADC_CCRADC通用控制寄存器0x040x00000000ADC_CDR适用于双重和三重模式的ADC通用规则数据寄存器0x080x000000008.2.4STM32F407ADC功能说明ADC有16个复用通道,支持规则和注入转换,每组最多16个和4个通道,转换顺序由ADC_SQRx和ADC_JSQR寄存器控制。内部通道包括温度传感器(ADC1_IN16)、VREFINT(ADC1_IN17)和VBAT(ADC1_IN18),可作为规则或注入通道使用。1.ADC开关控制和时钟ADC通过设置ADC_CR2寄存器的ADON位启动供电并唤醒,SWSTART或JSWSTART位触发转换,ADON位清零则进入掉电模式。ADC支持两种时钟方案:ADCCLK用于模拟电路,数字接口时钟等效于APB2时钟,采样时间可通过ADC_SMPR1和ADC_SMPR2寄存器配置。2.通道选择3.转换模式单次转换模式:在此模式下,ADC仅执行一次转换。可通过设置SWSTART或JSWSTART,或外部触发启动转换。连续转换模式:启用后,ADC在完成一个转换后立即启动下一个转换。通过设置CONT位和外部触发或SWSTART启动。扫描模式:用于扫描多个通道,ADC按顺序转换选择的通道,若CONT为1,则会在最后一个通道完成后重新开始。不连续采样模式:适用于规则组和注入组,可设置短序列转换。规则组可通过DISCEN启用,注入组可通过JDISCEN启用,在外部触发时逐通道转换,直到所有转换完成。8.2.4STM32F407ADC功能说明4.转换时间转换时间是指ADC每一次信号转换所需的时间,转换时间由输入时钟和采样周期决定。ADC转换过程时间关系8.2.4STM32F407ADC功能说明5.使用DMA转换由于规则通道组只有一个数据寄存器,使用DMA有助于避免数据丢失。在DMA模式下(ADC_CR2中的DMA位置1),每完成一个规则通道转换后,会生成DMA请求,将数据从ADC_DR传输到目标位置。若发生数据溢出(OVR位置1),会触发中断并停止DMA传输,禁止后续DMA请求。在此情况下,需清除DMA流中的OVR标志和DMAEN位,重新初始化DMA和ADC,才能恢复转换并使能数据传输。注入通道转换不受溢出影响。当OVR=1时,DMA会在传送最后有效数据后停止请求。8.2.4STM32F407ADC功能说明在多ADC器件中,双重和三重ADC模式通过主ADC(如ADC1)触发从ADC(如ADC2、ADC3)进行转换,具体由ADC_CCR寄存器配置。外部事件触发时,确保仅主器件触发。可实现注入同时、规则同时、交替和交替触发模式,并可组合使用。转换结果存储在ADC_CDR寄存器,状态信息存储在ADC_CSR寄存器。6.多重ADC模式8.2.4STM32F407ADC功能说明当模拟看门狗和溢出状态位为1时,规则组和注入组可能在转换结束时触发中断。可以通过单独的中断使能位实现灵活控制。ADC_SR寄存器中还包含JSTRT和STRT标志,用于指示开始转换注入组和规则组,但不涉及中断。7.ADC中断中断事件事件标志使能控制位结束规则组的转换EOCEOCIE结束注入组的转换JEOCJEOCIE模拟看门狗状态位置1AWDAWDIE溢出(Overrun)OVROVRIE8.2.4STM32F407ADC功能说明03STM32F407数模转换器8.3.1STM32F407DAC概述STM32F407的DAC模块是12位分辨率的数模转换器,支持8位或12位模式并可与DMA配合使用。DAC有两个独立通道(DAC1和DAC2),可以独立或同步转换,每个通道支持DMA。输出电压通过数字值线性转换为0至VREF+之间的模拟电压。DAC可以通过软件触发或外部事件触发,如定时器或外部中断,且支持输出缓冲器来提高驱动能力和精度。8.3.2STM32F407DAC功能框图STM32F407的DAC模块包含两个独立的12位转换器,支持左对齐或右对齐模式,并具备同步更新功能。双通道可以独立或同步工作,以优化性能和功耗。每个通道都支持DMA,提升数据传输和实时性,同时具备波形生成模块。DAC可通过外部触发信号进行转换,并通过VREF+参考电压确定输出范围。8.3.3STM32F407DAC寄存器外设寄存器必须按字(32位)进行访问。寄存器名称功能描述偏移地址复位值DAC_CRDAC控制寄存器0x000x00000000DAC_SWTRIGRDAC软件触发寄存器0x040x00000000DAC_DHR12R1DAC1通道12位右对齐数据保持寄存器0x080x00000000DAC_DHR12L1DAC1通道12位左对齐数据保持寄存器0x0C0x00000000DAC_DHR8R1DAC1通道8位右对齐数据保持寄存器0x100x00000000DAC_DHR12R2DAC2通道12位右对齐数据保持寄存器0x140x00000000DAC_DHR12L2DAC2通道12位左对齐数据保持寄存器0x180x00000FFFDAC_DHR8R2DAC2通道8位右对齐数据保持寄存器0x1C0x00000000DAC_DHR12RD双DAC12位右对齐数据保持寄存器0x200x00000000DAC_DHR12LD双DAC12位左对齐数据保持寄存器0x240x00000000DAC_DHR8RD双DAC8位右对齐数据保持寄存器0x280x00000000DAC_DOR1DAC1通道数据输出寄存器0x2C0x00000000DAC_DOR2DAC2通道数据输出寄存器0x300x00000000DAC_SRDAC状态寄存器0x340x000000008.3.4STM32DAC功能说明STM32F407的DAC模块通过内部的数字-模拟转换电路,将输入的数字值转换为相应的模拟电压输出。通过将DAC_CR寄存器中的ENx位置1可使能对应的DAC通道,经过启动时间tWAKEUP后,通道正式使能。DAC集成输出缓冲器,通过设置DAC_CR寄存器中的BOFFx位可使能或禁用输出缓冲器,以降低输出阻抗并直接驱动外部负载。1.DAC通道使能和输出缓冲器使能2.DAC数据格式根据所选配置模式,数据必须按相应方式写入指定寄存器。1)DAC单通道x2)DAC双通道双通道模式下数据寄存器对齐单通道模式下数据寄存器对齐8.3.4STM32DAC功能说明3.DAC转换DAC_DORx无法直接写入,数据必须先通过DAC_DHRx寄存器传输。若未启用硬件触发,数据将在一个APB1时钟周期后自动转移;若启用硬件触发,数据将在三个APB1时钟周期后转移。模拟输出电压在转移后会经过tSETTLING时间可用,具体时间依赖于电源电压和负载。关闭触发(TEN=0)时的转换时序图8.3.4STM32DAC功能说明

当TENx位为1时,DAC转换由外部事件触发,并在三个APB1周期后更新DAC_DORx。选择软件触发时,SWTRIG位为1启动转换,数据将在一个APB1周期后转移。ENx位为1时,无法更改TSELx位。源类型TSEL[2:0]Timer6TRGOevent片上定时器的内部信号000Timer8TRGOevent001Timer7TRGOevent010Timer5TRGOevent011Timer2TRGOevent100Timer4TRGOevent101EXTIline9外部引脚110SWTRIG软件控制位1114.外部触发器8.3.4STM32DAC功能说明每个DAC通道都有DMA功能。当DMAENx为1且发生外部触发时,将产生DMA请求,转移DAC_DHRx数据到DAC_DORx。在双通道模式下,若两个DMAENx都为1,则会产生两个DMA请求;若只需一个请求,则只启用一个DMAENx。5.DMA请求6.生成噪声与三角波通过设置WAVEx[1:0]位为“01”生成伪噪声,或设置为“10”生成三角波,并通过MAMPx[3:0]位控制振幅。生成DAC三角波8.3.4STM32DAC功能说明7.DAC双通道转换为了有效利用总线带宽,DAC模块实现了三个双寄存器:DHR8RD、DHR12RD和DHR12LD,允许通过一个寄存器访问同时驱动两个DAC通道。通过这两个DAC通道和这三个双寄存器,可以实现11种转换模式,包括独立触发、生成单个或不同的LFSR、生成单个或不同的三角波、同步软件启动、同步触发(不产生波形)及生成不同波形的同步触发模式。此外,所有这些转换模式也可以通过单独的DHRx寄存器来实现。8.3.4STM32DAC功能说明04ADC和DACHAL库函数ADCHAL库函数函数名功能描述HAL_ADC_Init初始化ADCHAL_ADC_ConfigChannel配置ADC的通道HAL_ADC_Start启动ADCHAL_ADC_Start_IT中断方式启动ADCHAL_ADC_PollForConversion等待ADC完成HAL_ADC_GetValue获取ADC值HAL_ADC_Stop停止ADCHAL_ADC_Stop_IT中断方式停止ADCHAL_ADC_DeInitADC反初始化HAL_ADC_IRQHandlerADC中断处理函数ADCHAL库函数1.初始化ADCHAL_StatusTypeDefHAL_ADC_Init(ADC_HandleTypeDef*hadc),初始化ADC,如时钟、分辨率、转换模式等。2.配置ADC的通道HAL_StatusTypeDefHAL_ADC_ConfigChannel(ADC_HandleTypeDef*hadc,ADC_ChannelConfTypeDef*sConfig),配置ADC的通道参数,如通道号、采样时间等。3.启动ADC转换HAL_StatusTypeDefHAL_ADC_Start(ADC_HandleTypeDef*hadc),启动ADC转换。当调用此函数后ADC会根据之前配置的通道和参数开始进行模数转换,在转换过程中,ADC的状态会被标记为忙碌直到转换完成。ADCHAL库函数4.中断方式启动ADC转换HAL_StatusTypeDefHAL_ADC_Start_IT(ADC_HandleTypeDef*hadc),以中断方式启动ADC转换,当转换完成后会触发相应的中断,在中断服务函数中可以处理转换结果。5.等待ADC转换完成HAL_StatusTypeDefHAL_ADC_PollForConversion(ADC_HandleTypeDef*hadc,uint32_tTimeout),通过轮询的方式等待ADC转换完成。6.获取ADC转换值uint32_tHAL_ADC_GetValue(ADC_HandleTypeDef*hadc),获取最近一次ADC转换的结果。ADCHAL库函数7.停止ADC转换HAL_StatusTypeDefHAL_ADC_Stop(ADC_HandleTypeDef*hadc),停止ADC转换。8.中断方式停止ADC转换HAL_StatusTypeDefHAL_ADC_Stop_IT(ADC_HandleTypeDef*hadc),停止ADC转换,并禁用中断。9.ADC反初始化HAL_StatusTypeDefHAL_ADC_DeInit(ADC_HandleTypeDef*hadc),将ADC恢复到其默认状态,释放相关资源。10.ADC中断处理函数voidHAL_ADC_IRQHandler(ADC_HandleTypeDef*hadc),ADC中断处理函数,会在ADC的中断服务例程中被调用,以处理ADC的中断事件,如转换完成等,在该函数中会调用定义的回调函数。DACHAL库函数函数名功能描述HAL_DAC_Init初始化DACHAL_DAC_ConfigChannel配置DAC的通道HAL_DAC_Start启动DAC转换HAL_DAC_Start_IT中断方式启动DAC转换HAL_DAC_SetValue设置DAC转换的数字值HAL_DAC_GetValue获取DAC通道当前设置数字值HAL_DAC_Stop停止DAC转换HAL_DAC_Stop_IT中断方式停止DAC转换HAL_DAC_DeInitDAC反初始化HAL_DAC_IRQHandlerDAC中断处理函数DACHAL库函数1.初始化数模转换器HAL_StatusTypeDefHAL_DAC_Init(DAC_HandleTypeDef*hdac),初始化DAC模块,设置默认配置。2.配置DAC的通道HAL_StatusTypeDefHAL_DAC_ConfigChannel(DAC_HandleTypeDef*hdac,DAC_ChannelConfTypeDef*sConfig,uint32_tChannel),配置DAC输出通道的参数,包括通道号、数据对齐方式、触发源等。3.启动DAC转换HAL_StatusTypeDefHAL_DAC_Start(DAC_HandleTypeDef*hdac,uint32_tChannel):启动DAC输出,将数字信号转换为模拟信号。DACHAL库函数4.中断方式启动DAC转换HAL_StatusTypeDefHAL_DAC_Start_IT(DAC_HandleTypeDef*hdac,uint32_tChannel):以中断模式启动DAC输出,当转换完成时会产生中断。5.设置DAC转换的数字值HAL_StatusTypeDefHAL_DAC_SetValue(DAC_HandleTypeDef*hdac,uint32_tChannel,uint32_tAlignment,uint32_tData),设置DAC输出的数字值,该值将被转换为模拟信号。6.获取DAC通道当前设置数字值uint32_tHAL_DAC_GetValue(DAC_HandleTypeDef*hdac,uint32_tChannel),获取当前DAC输出的数字值。DACHAL库函数7.停止DAC转换HAL_StatusTypeDefHAL_DAC_Stop(DAC_HandleTypeDef*hdac,uint32_tChannel),停止DAC通道的转换。8.中断方式停止DAC转换HAL_StatusTypeDefHAL_DAC_Stop_IT(DAC_HandleTypeDef*hdac,uint32_tChannel),以中断方式停止DAC通道转换。9.DAC反初始化HAL_StatusTypeDefHAL_DAC_DeInit(DAC_HandleTypeDef*hdac),DAC进行反初始化,将DAC模块恢复到默认状态并释放相关资源。10.DAC中断处理函数voidHAL_DAC_IRQHandler(DAC_HandleTypeDef*hdac),DAC中断处理函数,在DAC的中断服务例程中被调用,该函数中会调用定义的回调函数。05模数转换器实例STM32CubeMX工程1.建立STM32CubeMX工程STM32F407VET6芯片选择SYS配置2.SYS配置STM32CubeMX工程ADC配置USART1配置3.ADC配置4.串口配置STM32CubeMX工程5.生成代码ProjectManager配置KeilMDK程序ADCKeilMDK工程KeilMDK程序在main.c中,ADC的初始化配置都已完成,包括时钟配置、GPIO配置,ADC1配置、USART1配置等,还需要增加例程应用逻辑代码,main.c文件如下。#include"main.h"ADC_HandleTypeDefhadc1;UART_HandleTypeDefhuart1;staticvoidMX_GPIO_Init(void);staticvoidMX_ADC1_Init(void);staticvoidMX_USART1_UART_Init(void);intmain(void){HAL_Init();MX_GPIO_Init();MX_ADC1_Init();MX_USART1_UART_Init();while(1){HAL_ADC_Start(&hadc1);if(HAL_ADC_PollForConversion(&hadc1,1000)==HAL_OK){uint32_tadcValue=HAL_ADC_GetValue(&hadc1);charbuffer[25];sprintf(buffer,"ADCValue:%f\r\n",adcValue*3.3/(double)4096);HAL_UART_Transmit(&huart1,(uint8_t*)buffer,strlen(buffer),HAL_MAX_DELAY);HAL_ADC_Stop(&hadc1);HAL_Delay(1000);}}}KeilMDK程序staticvoidMX_ADC1_Init(void){ADC_ChannelConfTypeDefsConfig={0};hadc1.Instance=ADC1;hadc1.Init.ClockPrescaler=ADC_CLOCK_SYNC_PCLK_DIV2;hadc1.Init.Resolution=ADC_RESOLUTION_12B;hadc1.Init.ScanConvMode=DISABLE;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论