任务5-1 电位器调控LED灯数量的设计与实现_第1页
任务5-1 电位器调控LED灯数量的设计与实现_第2页
任务5-1 电位器调控LED灯数量的设计与实现_第3页
任务5-1 电位器调控LED灯数量的设计与实现_第4页
任务5-1 电位器调控LED灯数量的设计与实现_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

掌握ADC模块原理理解模数转换过程实现电压控制LED绿色低碳设计理念STM32EMBEDDEDTECHNOLOGYSTM32嵌入式技术及应用5-1电位器调控LED灯数量的设计与实现项目五简易多通道电压采集系统的设计CONTENTS目录01任务目标TaskObjectives明确学习目标与能力要求,掌握ADC模块的基本概念和应用场景核心能力培养02知识储备KnowledgePreparation学习ADC工作原理、STM32ADC内部结构、库函数使用方法理论基础03任务实施TaskImplementation电路设计、程序开发、ADC配置与LED控制实现实践操作04任务总结TaskSummary梳理核心知识点、技能提升要点和代码规范要求知识梳理05提升训练与评价Practice&Evaluation通过知识问答、实践操作和任务评价巩固所学知识,提升工程实践能力CHAPTERONE任务目标明确学习目标与能力要求掌握ADC模块原理理解模数转换过程实现电压控制LEDTASKOBJECTIVES任务目标01目标一掌握ADC模块的基本概念及其工作原理,理解逐次逼近式ADC的转换过程,了解ADC参考电压和分辨率对转换精度的影响。ADC基本概念逐次逼近原理分辨率与精度02目标二深入理解STM32ADC的内部结构,包括电压范围、采样通道、转换模式、触发方式等关键特性,掌握ADC时钟配置和采样时间设置方法。ADC内部结构通道与模式时钟与采样03目标三实现电位器调控LED灯数量的完整功能,掌握ADC库函数的使用方法,能够根据电压值动态控制LED点亮数量,体现绿色低碳设计理念。ADC库函数应用电压-LED映射节能设计绿色低碳设计理念在设计过程中,强调选择低功耗LED和优化ADC采样策略,通过动态调节LED亮度范围(如限制最大亮度、低电压自动关闭LED)来降低系统整体功耗,体现绿色低碳的设计思路。在满足功能需求的前提下,合理设置ADC采样周期,避免过度采样造成的不必要能耗。IMPLEMENTATIONREQUIREMENTS任务实现要求硬件设计构建滑动变阻器分压电路,将其输出端接STM32的ADC引脚PA1,并将8个LED灯分别连接至STM32的GPIOC0~7引脚。电位器→PA1LED1-8→PC0-7编程实现完成GPIO引脚和ADC模块的初始化,通过ADC采样值划分区间,控制LED灯的点亮数量。实现电压值越高,点亮LED数量越多的分段控制逻辑。ADC值0~511→1个LEDADC值512~1023→2个LED...ADC值3584~4095→8个LED系统联调在Proteus仿真环境中验证,调节电位器时LED灯数量应随之变化,确保系统实时响应,验证电路设计的正确性和程序的可靠性。调节电位器,电压从低到高变化LED灯逐步从全灭变为点亮1-8个系统能够实时响应电位器变化控制逻辑映射0-5111LED512-10232LEDs1024-15353LEDs1536-20474LEDs2048-25595LEDs2560-30716LEDs3072-35837LEDs3584-40958LEDsCHAPTERTWO知识储备ADC模块原理与STM32ADC内部结构ADC模块概述基本概念与工作原理STM32ADC结构内部结构与配置方法ADC库函数标准库函数应用ADCBASICSADC模块概述什么是ADC?ADC(Analog-to-DigitalConverter,模数转换器)是将模拟信号转换为数字信号的电子器件。在嵌入式系统中,温湿度、压力、速度等物理量通常以模拟信号形式出现,需要通过ADC转换为数字量供处理器处理。转换过程:输入模拟信号→采样→保持→量化→编码→输出数字信号常用ADC类型1积分型ADC精度高、速度慢,适用于高精度测量2逐次逼近型ADC(SAR)速度较快、功耗低,嵌入式系统常用3并行比较型ADC速度极快、成本高,用于高速采集4Σ-Δ调制型ADC高精度、适合音频和传感器应用ADC转换过程示意图模拟信号输入连续变化的电压信号ADC转换采样、量化、编码采样保持量化编码数字信号输出离散的二进制数据01011001SUCCESSIVEAPPROXIMATIONADC逐次逼近式ADC工作原理工作原理STM32内部集成的A/D转换器采用逐次逼近型(SAR)结构。转换过程通过逐位比较实现,从最高位(MSB)开始,逐位确定数字量的每一位。核心思想:采用二分搜索策略,每次比较将搜索范围缩小一半,N位转换需要N个时钟周期。转换步骤1启动转换:触发控制信号,开始A/D转换过程2设置MSB:时钟将寄存器最高位(MSB)设为1,其余为03D/A转换:数字量经D/A转换器转换为电压VDA4电压比较:比较器比较VDA与输入电压VIN5逐位逼近:从MSB到LSB逐位重复上述过程6输出结果:N个周期后,寄存器中的值即为转换结果SARADC结构框图模拟输入信号VIN采样保持电路时钟控制逐次逼近寄存器(SAR)MSB→...→LSBD/A转换器比较器数字输出特点:SARADC因其低功耗、中等速度和较高精度,成为嵌入式系统中最常用的ADC类型。REFERENCEVOLTAGE&RESOLUTIONADC参考电压和分辨率参考电压(VREF)参考电压是用来确定模拟输入信号范围的固定电压值,作为ADC转换过程中的基准。STM32的ADC参考电压范围由VREF+和VREF-决定。VREF+:ADC参考电压正极(通常接3.3V)VREF-:ADC参考电压负极(通常接地)测量范围:VREF-~VREF+(0~3.3V)分辨率分辨率是指ADC能够分辨的最小模拟信号变化量,用二进制位数表示。STM32F103的ADC为12位分辨率。12位ADC:输出范围0~4095(212-1)16位ADC:输出范围0~65535(216-1)分辨率越高,转换精度越高,能够识别的电压变化越小。步长(最小精度)计算步长是ADC能够感知并识别的最小模拟电压变化量,由参考电压和分辨率共同决定。计算公式:步长=VREF/2N其中:VREF=参考电压,N=分辨率位数计算示例STM32F103(12位ADC)VREF=3.3V,N=12步长=3.3V/4096≈0.805mV10位ADC对比VREF=3.3V,N=10步长=3.3V/1024≈3.22mV12位ADC的精度是10位ADC的4倍,能够识别更小的电压变化。MULTI-CHANNELDATAACQUISITION多路数据采集系统结构多路复用技术为简化系统设计、降低成本,通常不会为每个物理量配备单独的ADC,而是采用多路复用技术。通过多路模拟切换开关,将多个输入信号轮流连接到ADC输入端,依次进行转换。降低系统复杂度和硬件成本提高ADC资源利用率适用于转换时间远小于信号变化时间的场景STM32ADC特性ADC数量STM32F103最多有3个ADC:ADC1、ADC2、ADC3通道数量每个ADC最多16个外部通道+2个内部通道多路复用内置多路选择器,支持多通道轮询采集多路数据采集系统结构传感器1传感器2传感器3传感器4传感器5传感器6多路模拟切换开关轮流切换各通道ADC转换器依次转换各通道信号数字输出供处理器读取处理当ADC转换时间远小于信号变化时间时,轮流采样结果近似于同一时刻的值。STM32ADCINTERNALSTRUCTURESTM32的ADC内部结构ADC电压范围STM32使用独立的模拟电源供电,以提高转换精确度。ADC能够转换的电压范围由VREF+和VREF-决定。引脚名称说明VREF+ADC参考电压正极(2.4V~3.6V)VREF-ADC参考电压负极(内部连接VSSA)VDDA模拟电源正极(VREF+≤VDDA)VSSA模拟电源地采样通道ADCx_INx是ADC的输入通道,每个通道可连接一个模拟信号输入源。GPIO引脚可配置为模拟输入模式作为ADC输入。外部通道:16个,连接GPIO引脚(PA0~PC5)内部通道:温度传感器、内部参考电压通道映射:ADC1_IN0→PA0,ADC1_IN1→PA1...INPUTCHANNELGROUPING输入通道分组规则通道组(Regular)规则通道组最多支持16个通道,按照序列寄存器SQRx配置的顺序依次转换。这是最常用的通道组类型。SQR3:控制通道顺序1~6SQR2:控制通道顺序7~12SQR1:控制通道顺序13~16示例:5个温度传感器接ADC1_IN1~5,设置SQ1~SQ5,SQL=5,触发后依次采集。注入通道组(Injected)注入通道组最多支持4个通道,根据JSQR配置的顺序,抢先规则通道的ADC转换,具有更高优先级。JSQR:控制注入通道顺序1~4特点:可中断规则通道转换应用:紧急数据采集场景触发AD转换的方式软件触发通过向控制寄存器ADC_CR2的ADON位写入1来启动转换。ADC_SoftwareStartConvCmd(ADC1,ENABLE);硬件触发支持内部定时器(TIM)触发和外部引脚(EXTI)触发。规则通道:TIM1_CH1~CH3、EXTI_11等注入通道:TIM1_CH4、EXTI_15等ADC中断ADC在每个通道转换结束后,可产生相应的中断请求,通过配置ADC_CR1寄存器使能。EOC中断转换结束中断(规则/注入通道)JEOC中断注入通道转换结束中断AWD中断模拟看门狗中断(超出阈值)ADCCLOCK&CONVERSIONMODESADC时钟与转换模式ADC时钟配置ADC时钟ADCCLK由APB2(PCLK2)经ADC预分频器分频得到。APB2总线时钟通常为72MHz,ADC最大工作频率为14MHz。分频值:2、4、6、8(即2n,1≤n≤4)常用配置:6分频→ADCCLK=12MHz最大频率:14MHz(不能超过此值)RCC_ADCCLKConfig(RCC_PCLK2_Div6);采样时间与转换时间采样时间每个通道的采样时间可配置,采样时间越长,转换结果越稳定。可选:1.5、7.5、13.5、28.5、41.5、55.5、71.5、239.5个周期转换时间计算转换时间=采样时间+12.5个周期当ADCCLK=12MHz,采样时间=1.5周期时,转换时间=1.17μsADC四种转换模式1单次模式ADC执行一次转换后停止,适用于单次测量场景。需要手动触发每次转换。2连续模式ADC持续不断地进行转换,适用于连续监测和实时数据采集场景。只需触发一次。3扫描模式按顺序扫描一组通道(规则或注入通道组)。单次模式下扫描完停止;连续模式下循环扫描。4间断模式间歇转换一组通道,根据预设通道数触发转换。适用于分时复用数据采集。模式组合:扫描模式可与单次或连续模式组合使用,实现多通道的灵活采集。ADCDATA&ALIGNMENTADC数据与对齐方式ADC数据寄存器ADC转换结束后,数据存入相应的数据寄存器。不同通道组使用不同的寄存器存储结果。规则通道数据寄存器(ADC_DR)16位寄存器,只有一个。转换完成后应立即读取,避免被覆盖。支持DMA传输(ADC1和ADC3)注入通道数据寄存器(ADC_JDRx)4个16位寄存器(JDR1~JDR4),对应每个注入通道,不存在覆盖问题。数据对齐方式STM32的ADC为12位,而数据寄存器为16位,因此涉及数据对齐问题。右对齐(推荐)数据存放在寄存器的低12位,高4位为0。0000|D11D10D9D8D7D6D5D4D3D2D1D0读取值=实际ADC值(0~4095)左对齐方式左对齐数据存放在寄存器的高12位,低4位为0。D11D10D9D8D7D6D5D4D3D2D1D0|0000读取值=实际ADC值×16建议:通常使用右对齐方式,因为数据传输一般从最低位开始,且读取值即为实际ADC值,无需额外计算。数据读取示例//等待转换完成while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)==RESET);//读取转换结果uint16_tadcValue=ADC_GetConversionValue(ADC1);电压值计算V=(adcValue/4096.0)×Vref例如:adcValue=2048,Vref=3.3V,则V=1.65VADCLIBRARYFUNCTIONS(1/3)ADC相关库函数(一)1ADC_DeInit函数将外设ADCx的全部寄存器重设为默认值。voidADC_DeInit(ADC_TypeDef*ADCx);用途:重新配置ADC前,恢复初始状态2ADC_Init函数根据初始化结构体参数初始化ADC寄存器。voidADC_Init(ADC_TypeDef*ADCx,ADC_InitTypeDef*ADC_InitStruct);ADC_Mode:独立/双ADC模式ADC_ScanConvMode:扫描/单次模式ADC_ContinuousConvMode:连续/单次转换ADC_ExternalTrigConv:外部触发配置ADC_DataAlign:左/右对齐ADC_NbrOfChannel:规则通道数3ADC_Cmd函数使能或失能指定的ADC。voidADC_Cmd(ADC_TypeDef*ADCx,FunctionalStateNewState);ADC_Cmd(ADC1,ENABLE);//使能ADC14ADC_ITConfig函数使能或失能指定的ADC中断。voidADC_ITConfig(ADC_TypeDef*ADCx,uint16_tADC_IT,FunctionalStateNewState);ADC_IT_EOC:转换结束中断ADC_IT_JEOC:注入通道转换结束中断ADC_IT_AWD:模拟看门狗中断5ADC校准函数用于ADC的校准操作,提高转换精度。voidADC_ResetCalibration(ADC_TypeDef*ADCx);FlagStatusADC_GetResetCalibrationStatus(ADC_TypeDef*ADCx);voidADC_StartCalibration(ADC_TypeDef*ADCx);FlagStatusADC_GetCalibrationStatus(ADC_TypeDef*ADCx);校准流程:重置校准→等待重置完成→开始校准→等待校准完成6ADC_SoftwareStartConvCmd函数使能或失能指定的ADC软件启动转换功能。voidADC_SoftwareStartConvCmd(ADC_TypeDef*ADCx,FunctionalStateNewState);ADC_SoftwareStartConvCmd(ADC1,ENABLE);//启动ADC1转换ADCLIBRARYFUNCTIONS(2/3)ADC相关库函数(二)7ADC_RegularChannelConfig函数设置ADC规则组通道,配置转换顺序和采样时间。voidADC_RegularChannelConfig(ADC_TypeDef*ADCx,uint8_tADC_Channel,uint8_tRank,uint8_tADC_SampleTime);ADC_Channel:通道号(ADC_Channel_0~17)Rank:转换顺序(1~16)ADC_SampleTime:采样时间(1.5~239.5周期)ADC_RegularChannelConfig(ADC1,ADC_Channel_1,1,ADC_SampleTime_55Cycles5);8ADC_GetConversionValue函数返回最近一次ADC规则组的转换结果。uint16_tADC_GetConversionValue(ADC_TypeDef*ADCx);uint16_tadcValue=ADC_GetConversionValue(ADC1);返回值范围:0~4095(12位ADC)9ADC_GetFlagStatus函数检查指定ADC标志位是否置1。FlagStatusADC_GetFlagStatus(ADC_TypeDef*ADCx,uint8_tADC_FLAG);ADC_FLAG_EOC:转换结束标志ADC_FLAG_JEOC:注入通道转换结束标志ADC_FLAG_AWD:模拟看门狗标志while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)==RESET);10ADC_ClearFlag函数清除ADC待处理的标志位。voidADC_ClearFlag(ADC_TypeDef*ADCx,uint8_tADC_FLAG);ADC_ClearFlag(ADC1,ADC_FLAG_EOC);//清除EOC标志RCC_ADCCLKConfig函数配置ADC时钟分频器。voidRCC_ADCCLKConfig(uint32_tRCC_PCLK2);RCC_PCLK2_Div2:2分频(36MHz,不推荐)RCC_PCLK2_Div4:4分频(18MHz,不推荐)RCC_PCLK2_Div6:6分频(12MHz,推荐)RCC_PCLK2_Div8:8分频(9MHz)ADCCONFIGURATIONEXAMPLEADC配置流程示例ADC配置步骤1开启GPIO时钟和ADC时钟2配置ADC时钟分频3配置GPIO为模拟输入模式4初始化ADC参数5配置规则通道6使能ADC7ADC校准关键要点必须先开启时钟,再进行配置ADC时钟不能超过14MHz校准必须在使能ADC后进行采样时间越长,转换结果越稳定完整配置代码//ADC1初始化函数(PA1通道1)voidAD_Init(void){GPIO_InitTypeDefGPIO_InitStructure;ADC_InitTypeDefADC_InitStructure;//1.开启GPIOA和ADC1时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_ADC1,ENABLE);RCC_ADCCLKConfig(RCC_PCLK2_Div6);//2.配置ADC时钟6分频(12MHz)//3.配置PA1为模拟输入GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;GPIO_Init(GPIOA,&GPIO_InitStructure);//4.初始化ADC参数ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;ADC_InitStructure.ADC_ScanConvMode=DISABLE;ADC_InitStructure.ADC_ContinuousConvMode=ENABLE;ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;ADC_InitStructure.ADC_NbrOfChannel=1;ADC_Init(ADC1,&ADC_InitStructure);//5.配置规则通道1,采样时间55.5周期ADC_RegularChannelConfig(ADC1,ADC_Channel_1,1,ADC_SampleTime_55Cycles5);ADC_Cmd(ADC1,ENABLE);//6.使能ADCADC_ResetCalibration(ADC1);//7.ADC校准while(ADC_GetResetCalibrationStatus(ADC1));ADC_StartCalibration(ADC1);while(ADC_GetCalibrationStatus(ADC1));}CHAPTERTHREE任务实施电路设计与程序开发硬件设计电位器电路、LED电路程序开发ADC配置、LED控制系统联调仿真验证、功能测试HARDWAREDESIGN系统硬件设计滑动变阻器电路滑动变阻器作为分压电路的一部分,一端接VDDA(3.3V),另一端接VSSA(GND),中间滑动端连接到STM32的ADC引脚PA1。上端:连接VDDA(3.3V)下端:连接VSSA(GND)滑动端:连接PA1(ADC1_IN1)调节滑动变阻器,PA1引脚电压在0~3.3V之间变化,ADC将其转换为0~4095的数字值。LED灯控制电路8只LED分别连接到STM32的GPIOC0~7引脚,采用共阳极接法,LED正极通过限流电阻接VDD,负极连接GPIO引脚。连接方式LED1(-)→PC0,LED2(-)→PC1,...,LED8(-)→PC7限流电阻220Ω~1kΩ,保护LED和GPIO控制逻辑GPIO输出低电平(0)→LED点亮系统电路连接图STM32F103R6微控制器ADC输入电位器滑动端PA1(ADC1_IN1)GPIO输出PC0→LED1PC1→LED2PC2→LED3PC3→LED4PC4→LED5PC5→LED6PC6→LED7PC7→LED8电位器0~3.3V分压8个LED共阳极接法设计说明:在Proteus中,复位电路和晶振电路在不连接的情况下,软件默认处于已接好状态。LEDCONFIGURATIONMODULE程序设计-LED配置模块LED.h头文件#ifndef__LED_H#define__LED_H#include"stm32f10x.h"//LED初始化函数voidLED_config(void);#endif配置说明GPIO端口使用GPIOC端口,配置PC0~PC7共8个引脚工作模式推挽输出模式(GPIO_Mode_Out_PP)输出速度10MHz(GPIO_Speed_10MHz)初始状态所有引脚输出高电平,LED初始熄灭LED.c源文件#include"stm32f10x.h"#include"LED.h"//LED控制码表(共阴极,低电平点亮)constuint16_tLED_CODE[]={0x0000,//0个LED亮(全灭)0x0001,//1个LED亮(PC0)0x0003,//2个LED亮(PC0-1)0x0007,//3个LED亮(PC0-2)0x000F,//4个LED亮(PC0-3)0x001F,//5个LED亮(PC0-4)0x003F,//6个LED亮(PC0-5)0x007F,//7个LED亮(PC0-6)0x00FF//8个LED亮(PC0-7)};//LED配置函数voidLED_config(void){GPIO_InitTypeDefgpio;//使能GPIOC时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//配置GPIO参数gpio.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出gpio.GPIO_Speed=GPIO_Speed_10MHz;//速度10MHzgpio.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;//PC0-7GPIO_Init(GPIOC,&gpio);//初始化GPIOC//初始状态:所有LED熄灭GPIO_SetBits(GPIOC,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);}LED_CODE数组:用于根据ADC值映射LED点亮数量,数组索引=ADC值/512ADCCONFIGURATIONMODULE程序设计-ADC配置模块AD.h头文件#ifndef__AD_H#define__AD_H#include"stm32f10x.h"//ADC初始化函数voidAD_Init(void);#endifADC配置要点时钟配置APB26分频→ADCCLK=12MHz工作模式独立模式、连续转换、单通道数据对齐右对齐,读取值0~4095触发方式软件触发,无外部触发采样时间55.5个周期,转换时间约5.67μsAD.c源文件#include"stm32f10x.h"#include"AD.h"//ADC初始化函数voidAD_Init(void){GPIO_InitTypeDefGPIO_InitStructure;ADC_InitTypeDefADC_InitStructure;//1.开启ADC1和GPIOA时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//2.配置ADC时钟6分频(12MHz)RCC_ADCCLKConfig(RCC_PCLK2_Div6);//3.配置PA1为模拟输入GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;GPIO_Init(GPIOA,&GPIO_InitStructure);//4.初始化ADC参数ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;ADC_InitStructure.ADC_ContinuousConvMode=ENABLE;ADC_InitStructure.ADC_ScanConvMode=DISABLE;ADC_InitStructure.ADC_NbrOfChannel=1;ADC_Init(ADC1,&ADC_InitStructure);//5.配置规则通道1ADC_RegularChannelConfig(ADC1,ADC_Channel_1,1,ADC_SampleTime_55Cycles5);//6.使能ADCADC_Cmd(ADC1,ENABLE);//7.ADC校准ADC_ResetCalibration(ADC1);while(ADC_GetResetCalibrationStatus(ADC1));ADC_StartCalibration(ADC1);while(ADC_GetCalibrationStatus(ADC1));}MAINPROGRAM程序设计-主程序程序执行流程1系统初始化LED_config()+AD_Init()2启动ADC转换ADC_SoftwareStartConvCmd(ADC1,ENABLE)3等待转换完成检查EOC标志位4读取ADC值ADC_GetConversionValue(ADC1)5映射LED数量LED_CODE[adcValue/512]6输出到GPIOGPIO_Write(GPIOC,LED_CODE[index])关键算法ADC值到LED数量的映射index=adcValue/512;//index范围:0~8//0→0LED,1→1LED,...,8→8LEDADC值范围:0~4095(12位)分8个区间,每区间512个值整数除法自动实现映射main.c完整代码#include"stm32f10x.h"#include"LED.h"#include"AD.h"//LED控制码表constuint16_tLED_CODE[]={0x0000,0x0001,0x0003,0x0007,0x000F,0x001F,0x003F,0x007F,0x00FF};//主函数intmain(void){uint16_tadcValue;//存储ADC转换值uint8_tledIndex;//LED数量索引//初始化LED和ADCLED_config();AD_Init();//启动ADC连续转换ADC_SoftwareStartConvCmd(ADC1,ENABLE);//主循环while(1){//等待转换完成while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)==RESET);//读取ADC值adcValue=ADC_GetConversionValue(ADC1);//计算LED索引(0~8)ledIndex=adcValue/512;if(ledIndex>8)ledIndex=8;//输出到LEDGPIO_Write(GPIOC,LED_CODE[ledIndex]);}}程序特点:采用连续转换模式,在主循环中不断读取ADC值并更新LED状态,实现实时响应电位器变化。CHAPTERFOUR任务总结核心知识点梳理与技能提升核心知识点ADC原理、STM32ADC结构、库函数应用技能提升电路设计、程序开发、调试技巧KEYKNOWLEDGESUMMARY核心知识点总结ADC模块原理ADC基本概念将模拟信号转换为数字信号的电子器件逐次逼近式ADC通过逐位比较实现转换,N位需要N个时钟周期参考电压与分辨率Vref决定测量范围,分辨率决定精度(12位→0~4095)步长计算步长=Vref/2^N,STM32F103:3.3V/4096≈0.805mVSTM32ADC内部结构电压范围Vref-~Vref+(0~3.3V),独立模拟电源供电采样通道16个外部通道+2个内部通道(温度传感器、Vrefint)通道分组规则组(16通道)+注入组(4通道,高优先级)触发方式软件触发(常用)或硬件触发(TIM、EXTI)ADC时钟与转换模式时钟配置APB2分频(2/4/6/8),推荐6分频→12MHz采样时间1.5~239.5个周期,采样时间越长越稳定转换时间转换时间=采样时间+12.5个周期四种转换模式单次、连续、扫描、间断模式ADC库函数应用ADC_Init:初始化ADC参数ADC_Cmd:使能/失能ADCADC_RegularChannelConfig:配置规则通道ADC_SoftwareStartConvCmd:软件启动转换ADC_GetConversionValue:获取转换结果校准函数:ResetCalibration、StartCalibrationSKILLSIMPROVEMENT技能提升与绿色低碳理念

温馨提示

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

评论

0/150

提交评论