第15章模拟数字转换器ADC自学内容课件.ppt
第1页,此课件共63页哦 12位 ADC 是一种逐次逼近型模拟数字转换器。它有18个通道,可测量16个外部和2个内部信号源。各通道的 A/D 转换可以单次、连续、扫描或间断模式执行。ADC 的结果可以左对齐或右对齐方式存储在16位数据寄存器中。模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值值。第2页,此课件共63页哦第3页,此课件共63页哦第4页,此课件共63页哦第5页,此课件共63页哦第6页,此课件共63页哦第7页,此课件共63页哦第8页,此课件共63页哦第9页,此课件共63页哦第10页,此课件共63页哦第11页,此课件共63页哦第12页,此课件共63页哦第13页,此课件共63页哦第14页,此课件共63页哦第15页,此课件共63页哦校准时间框图 第16页,此课件共63页哦第17页,此课件共63页哦第18页,此课件共63页哦第19页,此课件共63页哦 DMADMASW TRIGGERDMA DMA 请求请求ORORADC1TIM2_CC3TIM4_CC1SW TRIGGERORORUSART3_TXSW TRIGGERORORSW TRIGGERORORSW TRIGGERORORSW TRIGGERORORSW TRIGGEROROR高优先级请求高优先级请求低优先级请求低优先级请求通道通道1 1TIM1_CC1TIM2_UPTIM3_CC3SPI1_RXUSART3_RXTIM1_CC2SPI1_TXTIM3_CC4TIM3_UPSPI2_RXI2C2_TXTIM1_CC4USART1_TXTIM1_CCUTIM1_TRIGTIM4_CC2USART1_RXTIM1_UPSPI2_TXI2C2_RXTIM2_CC1TIM4_CC3USART2_RXTIM1_CC3TIM3_CC1I2C1_TXTIM3_TRIGUSART2_TXTIM2_CC2TIM2_CC4TIM4_UPI2C1_RX通道通道2 2通道通道3 3通道通道4 4通道通道5 5通道通道6 6通道通道7 7第20页,此课件共63页哦第21页,此课件共63页哦第22页,此课件共63页哦第23页,此课件共63页哦第24页,此课件共63页哦十、ADC固件库函数l 的使用方法第25页,此课件共63页哦ADC_InitTypeDef 结构:该结构定义在 stm32f10 x_adc.h 文件中。typedef struct u32 ADC_Mode;FunctionalState ADC_ScanConvMode;FunctionalState ADC_ContinuousConvMode;u32 ADC_ExternalTrigConv;u32 ADC_DataAlign;u8 ADC_NbrOfChannel;ADC_InitTypeDef 第26页,此课件共63页哦ADC_Mode 参数配置 ADC 工作在单/双模式.第27页,此课件共63页哦ADC_ExternalTrigConv 参数设置规则通道使用外部触发启动 ADC 转换。第28页,此课件共63页哦ADC_ScanConvMode 参数指定 ADC 工作在扫描模式(多通道)还是单次(单通道)模式。如果设置为 ENABLE,就是扫描模式,设置 DISABLE 就是单次模式.ADC_ContinuousConvMode 参数指定转换是连续的还是单次的。如设置 ENABLE 就是连续的,设置 DISABLE 是单次的.ADC_NbrOfChannel 参数指定使用序列规则组中 ADC 通道的数目.可以取 1 到 16.ADC_DataAlign 参数指定数据对齐方式.第29页,此课件共63页哦第30页,此课件共63页哦ADC_Channel 参数指定需要配置的 ADC 通道.第31页,此课件共63页哦ADC_SampleTime 参数指定选择通道的 ADC 采样时间.5 第32页,此课件共63页哦第33页,此课件共63页哦的使用方法第34页,此课件共63页哦ADC_AnalogWatchdog 参数配置 ADC 的模拟看门狗.第35页,此课件共63页哦的使用方法第36页,此课件共63页哦ADC_IT 参数取下列值:第37页,此课件共63页哦l l 第38页,此课件共63页哦l l 第39页,此课件共63页哦l l 第40页,此课件共63页哦例:采用DMA通道1将ADC1的通道14的数据连续转换结果放到变量ADC_ConvertedValue中,采用软件启动,采样周期为55.5个周期。/*定义*/#define ADC1_DR_Address (u32)0 x4001244C)/*定义变量和结构*/ADC_InitTypeDef ADC_InitStructure;DMA_InitTypeDef DMA_InitStructure;vu16 ADC_ConvertedValue;ErrorStatus HSEStartUpStatus;第41页,此课件共63页哦/*DMA通道1初始化,因ADC1接在这个通道上*/DMA_DeInit(DMA_Channel1);DMA_InitStructure.DMA_PeripheralBaseAddr=ADC1_DR_Address;DMA_InitStructure.DMA_MemoryBaseAddr=(u32)&ADC_ConvertedValue;DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;DMA_InitStructure.DMA_BufferSize=1;DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Disable;第42页,此课件共63页哦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_M2M=DMA_M2M_Disable;DMA_Init(DMA_Channel1,&DMA_InitStructure);/*使能DMA通道1*/DMA_Cmd(DMA_Channel1,ENABLE);第43页,此课件共63页哦/*ADC1配置*/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);第44页,此课件共63页哦/*配置ADC1规则通道14*/ADC_RegularChannelConfig(ADC1,ADC_Channel_14,1,ADC_SampleTime_55Cycles5);/*使能ADC1的DMA*/ADC_DMACmd(ADC1,ENABLE);/*使能ADC1*/ADC_Cmd(ADC1,ENABLE);/*使能ADC1的复位校准寄存器*/ADC_ResetCalibration(ADC1);第45页,此课件共63页哦/*检测ADC1的复位校准是否结束*/while(ADC_GetResetCalibrationStatus(ADC1);/*启动ADC1校准*/ADC_StartCalibration(ADC1);/*检测ADC1的校准是否结束*/while(ADC_GetCalibrationStatus(ADC1);/*软件启动ADC1转换*/ADC_SoftwareStartConvCmd(ADC1,ENABLE);第46页,此课件共63页哦STM32实验平台上电位器的电路图是:STM32实验平台上CPU的管脚图是:第47页,此课件共63页哦GPIO的配置程序是:void GPIO_Configuration(void)GPIO_InitTypeDef GPIO_InitStructure;/*配置 PC.04(ADC Channel14)作为模拟输入*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;GPIO_Init(GPIOC,&GPIO_InitStructure);第48页,此课件共63页哦在RCC配置程序里要开启DMA和AD的时钟 /*使能 DMA 时钟*/RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA,ENABLE);/*使能 ADC1 和 GPIOC 时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1|RCC_APB2Periph_GPIOC,ENABLE);第49页,此课件共63页哦例:采用ADC1的通道14进行数据连续转换,用模拟看门狗检测ADC1的通道14的模拟输入量(当ADC的模拟输入量在窗口之外,将点亮LED1灯),采用软件启动,采样周期为13.5个周期。/*定义结构*/ADC_InitTypeDef ADC_InitStructure;第50页,此课件共63页哦/*配置ADC1*/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);第51页,此课件共63页哦/*配置ADC1规则通道14*/ADC_RegularChannelConfig(ADC1,ADC_Channel_14,1,ADC_SampleTime_13Cycles5);/*设置高低模拟看门狗阈值*/ADC_AnalogWatchdogThresholdsConfig(ADC1,0 x0B00,0 x0300);/*配置通道14为单模拟看门狗保证通道*/ADC_AnalogWatchdogSingleChannelConfig(ADC1,ADC_Channel_14);/*在一个规则通道上使能模拟看门狗*/ADC_AnalogWatchdogCmd(ADC1,ADC_AnalogWatchdog_SingleReg(Enable);第52页,此课件共63页哦/*使能AWD中断*/ADC_ITConfig(ADC1,ADC_IT_AWD,ENABLE);/*使能ADC1*/ADC_Cmd(ADC1,ENABLE);/*使能ADC1复位校准寄存器*/ADC_ResetCalibration(ADC1);/*检测ADC1的复位校准寄存器结束*/while(ADC_GetResetCalibrationStatus(ADC1);/*启动ADC1校准*/ADC_StartCalibration(ADC1);第53页,此课件共63页哦/*检测ADC1校准结束*/while(ADC_GetCalibrationStatus(ADC1);/*用软件启动ADC1的数据转换*/ADC_SoftwareStartConvCmd(ADC1,ENABLE);/*ADC1的中断服务程序*/void ADC_IRQHandler(void)/*清ADC1的AWD中断登记位*/ADC_ClearITPendingBit(ADC1,ADC_IT_AWD);第54页,此课件共63页哦STM32实验平台上电位器的电路图是:STM32实验平台上CPU的管脚图是:第55页,此课件共63页哦在GPIO配置程序中增加下列代码:/*配置 PC.04(ADC Channel14)作为模拟输入*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;GPIO_Init(GPIOC,&GPIO_InitStructure);在RCC配置程序里要开启AD的时钟/*使能 ADC1 和 GPIOC 时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1|RCC_APB2Periph_GPIOC,ENABLE);第56页,此课件共63页哦在NVIC配置程序中增加下列代码:/*配置和使能 ADC 中断*/NVIC_InitStructure.NVIC_IRQChannel=ADC_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure);第57页,此课件共63页哦例:采用DMA存储ADC1的64个采样点的值,选用ADC1的通道4和14为规则通道,ADC1的通道10和11为注入通道。规则通道采用间断模式,间断数为1,转换为外部触发EXTI-11,每次触发只转换一个通道;注入通道采用外部出发EXTI-15。转化时间均为28.5时钟周期,数据采用右对齐。第58页,此课件共63页哦/*定义*/#define ADC1_DR_Address (u32)0 x4001244C)vu32 Index=0;/*定义变量与结构*/ADC_InitTypeDef ADC_InitStructure;DMA_InitTypeDef DMA_InitStructure;vu16 ADC_RegularConvertedValueTab64,ADC_InjectedConvertedValueTab32;ErrorStatus HSEStartUpStatus;第59页,此课件共63页哦 /*配置DMA通道1*/DMA_DeInit(DMA_Channel1);DMA_InitStructure.DMA_PeripheralBaseAddr=ADC1_DR_Address;DMA_InitStructure.DMA_MemoryBaseAddr=(u32)ADC_RegularConvertedValueTab;DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;DMA_InitStructure.DMA_BufferSize=64;DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable;第60页,此课件共63页哦 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_M2M=DMA_M2M_Disable;DMA_Init(DMA_Channel1,&DMA_InitStructure);/*使能DMA通道1*/DMA_Cmd(DMA_Channel1,ENABLE);第61页,此课件共63页哦/*配置ADC1*/ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;ADC_InitStructure.ADC_ScanConvMode=ENABLE;ADC_InitStructure.ADC_ContinuousConvMode=DISABLE;ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_Ext_IT11;ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;ADC_InitStructure.ADC_NbrOfChannel=2;ADC_Init(ADC1,&ADC_InitStructure);第62页,此课件共63页哦/*配置ADC1规则通道*/ADC_RegularChannelConfig(ADC1,ADC_Channel_4,1,ADC_SampleTime_28Cycles5);ADC_RegularChannelConfig(ADC1,ADC_Channel_14,2,ADC_SampleTime_28Cycles5);/*配置规则通道间断模式数*/ADC_DiscModeChannelCountConfig(ADC1,1);/*使能规则通道间断模式*/ADC_DiscModeCmd(ADC1,ENABLE);/*使能ADC1的外部触发转换*/ADC_ExternalTrigConvCmd(ADC1,ENABLE);第63页,此课件共63页哦