STM32----ADC进行信号(跳变沿、PWM)的捕获

发布者:TranquilSilence最新更新时间:2018-07-01 来源: eefocus关键字:STM32  ADC  跳变沿  PWM 手机看文章 扫描二维码
随时随地手机看文章

      一般情况下进行信号的捕获,如上升沿或者下降沿。均可采用外部触发进行捕获。这是基于信号比较稳定的情况,如信号出现较大的纹波或者易受到干扰。会出现“误触”的现象,此时用外部中断难以捕获到正确的信号。

       这种情况的解决办法,可以采用以下办法:

(1)使用定时器进行捕获,并开启定时器的滤波功能。在库函数结构体中,为:

        TIM_ICInitStruct.TIM_ICFilter = 0x0f;(滤波系数可填0x00~0x0f)

        当系数开到最大(0x0f)可有效过滤大部分纹波以及干扰信号,但对于持续时间较长的干扰无法过滤。

(2)使用ADC模拟看门狗功能。

        比如当前信号为高电平,触发信号为下降沿,存在着一定的纹波以及偶发的干扰如图:

        

        这种信号,采用第一种方法并不能很好地捕获。但如果使用ADC模拟看门狗功能则能很好地识别。方法如下:

   (1)初始化看门狗触发阈值为低电平触发。假设触发信号的电平为0.2V,干扰信号最低达到0.6V。设置看门狗阈值为:0.4V~3.3V(STM32F1供电3.3V),此时0.4V~3.3V的信号不会触发看门狗中断,但0.2V(触发信号)可成功触发中断。达到了过滤干扰信号的目的。

   (2)当触发信号触发模拟看门狗中断后,处理完触发信号的程序后,更改看门狗触发阈值为高电平状态。如0V~2V。目的是防止触发信号时间过长,频繁进入看门狗中断。当触发信号恢复高电平状态,因为已经设置了看门狗中断为高电平触发,此时会进入一次中断。中断中只需要将看门狗触发阈值改为低电平触发,即可等待下一次的触发信号。

 

具体实现代码如下:


void  ADC2_AWGZcpInit(void)

{

GPIO_InitTypeDef GPIO_InitStruct;

ADC_InitTypeDef  ADC_InitStruct;

NVIC_InitTypeDef  NVIC_InitStruct;

 

/*********************初始化ADC GPIO********************/

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN;

GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;

GPIO_Init(GPIOB,&GPIO_InitStruct);

/**********************ADC2 NVIC************************/

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

NVIC_InitStruct.NVIC_IRQChannel = ADC1_2_IRQn;

NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;

NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;

NVIC_InitStruct.NVIC_IRQChannelSubPriority = 2;

 

NVIC_Init(&NVIC_InitStruct);

 

/************************初始化ADC2************************/

RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2, ENABLE);

RCC_ADCCLKConfig(RCC_PCLK2_Div6);   //72M/6 = 12M

ADC_InitStruct.ADC_ContinuousConvMode = ENABLE;

ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;

ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;

ADC_InitStruct.ADC_Mode = ADC_Mode_Independent;

ADC_InitStruct.ADC_NbrOfChannel = 1;

ADC_InitStruct.ADC_ScanConvMode = ENABLE;

ADC_Init(ADC2,&ADC_InitStruct);

ADC_RegularChannelConfig(ADC2, ADC_Channel_8, 1, ADC_SampleTime_7Cycles5);

/***************************ADC看门狗设置****************************/

    ADC_AnalogWatchdogThresholdsConfig(ADC2,ADC2_AEG[2],ADC2_AEG[3]);

    ADC_AnalogWatchdogSingleChannelConfig(ADC2, ADC_Channel_8);

ADC_AnalogWatchdogCmd(ADC2,ADC_AnalogWatchdog_SingleRegEnable);

/***************************ADC校准****************************/

ADC_Cmd(ADC2, ENABLE);

 

    ADC_ResetCalibration(ADC2);

while(ADC_GetResetCalibrationStatus(ADC2)&&(timeout--));

ADC_StartCalibration(ADC2);

while(ADC_GetCalibrationStatus(ADC2)&&(timeout--));

 

ADC_ITConfig(ADC2,ADC_IT_AWD, ENABLE);

ADC_SoftwareStartConvCmd(ADC2, ENABLE);

}

 

u16 ADC2_AEG[5]={4095,250,3850,0,1};  //模拟看门狗阈值数组,第0、1元素为监测低电平触发信号阈值,2、3为高阈值  

void ADC1_2_IRQHandler(void)

{

 ADC2_AEG[4] = !ADC2_AEG[4]*2;

 ADC2->HTR = ADC2_AEG[0+ADC2_AEG[4]];  //更改ADC看门狗阈值

      ADC2->LTR = ADC2_AEG[1+ADC2_AEG[4]];

 if(ADC2_AEG[4]<1)  //下降沿触发输出

     {

   //code

}

 ADC2->SR &= 0xfffe;  //清除标志位

}


关键字:STM32  ADC  跳变沿  PWM 引用地址:STM32----ADC进行信号(跳变沿、PWM)的捕获

上一篇:STM32----FLASH掉电保存动态平衡方案
下一篇:STM32定时TIM2触发ADC采样,使用DMA保存结果

推荐阅读最新更新时间:2024-03-16 16:07

STM32之HAL库详解及手动移植
HAL库结构   说到STM32的HAL库,就不得不提STM32CubeMX,其作为一个可视化的配置工具,对于开发者来说,确实大大节省了开发时间。STM32CubeMX就是以HAL库为基础的,且目前仅支持HAL库及LL库!首先看一下,官方给出的HAL库的包含结构: - **stm32f2xx.h**主要包含STM32同系列芯片的不同具体型号的定义,是否使用HAL库等的定义,接着,其会根据定义的芯片信号包含具体的芯片型号的头文件: #if defined(STM32F205xx) #include stm32f205xx.h #elif defined(STM32F215xx) #include stm32f21
[单片机]
<font color='red'>STM32</font>之HAL库详解及手动移植
单片机典型实例:如何用PWM程序控制LED灯
  我们知道 51单片机本身是没有pwm接口的,这个程序是通过软件模拟pwm.在一定的频率的方波中,调整高电平和低电平的占空比,即可实现LED灯亮度控制。   要用51产生PWM去控制LED,首先要确定PWM的周期T和占空比D,确定了这些以后,可以用定时器产生一个时间基准t,比如定时器溢出n次的时间是PWM的高电平的时间,则D*T=n*t,类似的可以求出PWM低电平时间需要多少个时间基准n‘。   那么就可以编写程序,根据定的时间基准t给定时器赋值初始化,然后开启定时器,定义一个标志位flag,根据flag的状态决定输出高平还是低电平,假设定义flag=1的时候输出高电平,用一个变量去记录定时器中断的次数,每次中断就让记录中断
[单片机]
单片机典型实例:如何用<font color='red'>PWM</font>程序控制LED灯
STM32与通常ARM的区别
ARM是英国的芯片设计公司,其最成功的莫过于32位嵌入式CPU核----ARM系列,最常用的是ARM7和ARM9,ARM公司主要提供IP核,就是CPU的内核结构,只包括最核心的部分,并不是完整的处理器. ARM把这个核卖给各大半导体公司,如 Pllips 三星 ,ATMEL 等等,许多公司,甚至Intel. ARM为了对付 8位机市场,最近推出了 Cortex-M3核,STM32就是意大利的意法半导体基于Cortex-M3的32位嵌入式处理器, Cortex_M3核性价比更高,价格低,可以与8位单片机竞争 ARM Cortex-M3 处理器初探 单片机市场的规模可以用“巨无霸”来形容,预计到2010时每年能有20G片的出货量。世界
[单片机]
意法半导体STM32十周年:出货超过24亿,已构建起强大生态
集微网 4月25日报道 俗话说“十年磨一剑”,而从2007年起意法半导体(ST)推出第一颗STM32以来至今恰好十年,该系列产品不仅出货量超过20亿颗,而且还构建起了庞大、强壮的产业生态链。 4月25日,ST在深圳专门召开了“STM32中国峰会”。据悉,这是继2016年在深圳举行的首届STM32中国峰会取得了成功后第二次举办。本次峰会以“专注生态合作,整合技术创新”为主题,特别聚焦智能硬件、智慧城市和智能工业等热点领域。现场除了ST展示十年来STM32 的发展成果外,还邀请了众多合作伙伴分享与ST的合作经验。 会议具体安排上,4月25日为意法半导体高层主旨演讲及STM32生态系统伙伴针对智能硬件、智慧城市和智能工业的分论坛
[手机便携]
STM32 + ESP8266 + MQTT协议连接OneNet
一、环境介绍 单片机 采用: STM32 F103C8T6 上网方式:采用 ESP8266 ,也可以使用其他设备代替,只要支持TCP协议即可。比如:GSM模块、有线网卡等。 开发软件: keil 5 硬件 连接功能:ESP8266接在STM32的串口3上。通过AT指令与ESP8266进行 通信 。 注意:本篇文章没有贴ESP8266的底层 编程 代码,如果不会ESP8266底层编程,请看这里: https://blog.csdn.net/xiaolong1126626497/ar ti cle/det ai ls/107379554 如果需要了解ESP8266+MQTT协议连接阿里云 物联网 服务器请看这里:https:/
[单片机]
<font color='red'>STM32</font> + ESP8266 + MQTT协议连接OneNet
STM32-点灯程序
最近学习使用STM32,做个记录吧。 刚接触,就先从点灯程序开始。单片机的点灯程序,就相当于学语言的hello world程序了。 先简单介绍下开发环境,芯片类型是STM32F030C8,集成开发环境用的是Keil5 MDK-ARM,仿真器使用JLINK。 要点灯,先要确定接灯的引脚。我的板子上是PA0接的一个led灯。 在程序中,就是GPIO_Pin_0了。为了扩展性,或者说,为了方便修改引脚,我使用了一个函数来封装。如下: int get_gpios(){ return GPIO_Pin_0 ;//连接到灯的gpio引脚,可以有多个 } 要点灯,也就是要将这个引脚设置为输出,并控制它的高低电平
[单片机]
s3c6410 pwm 学习
第一次自学直接看数据手册而不是大端的中文资料或者示例代码讲解。。不过这是大家必须要走过的过程。 开始吧! The 6410 RISC microprocessor comprises of five 32-bit timers. These timers are used to generate internal interrupts to the ARM subsystem. In addition, Timers 0 and 1 include a PWM function (Pulse Width Modulation), which can drive an external I/O signal. The PW
[单片机]
s3c6410 <font color='red'>pwm</font> 学习
降压型PWM_AC-DC开关电源设计
1.引 言 1.1开关电源的概念 开关电源(Switch Mode Power Supply,SMPS)是以功率半导体器件为开关元件,利用现代电力电子技术,控制开关管开通和关断的时间比率,维持稳定输出电压的一种电源。开关电源和线性电源相比,二者的成本都随着输出功率的增加而增长,但二者增长速率各异。线性电源成本在某一输出功率点上,反而高于开关电源,这一点称为成本反转点。开关电源高频化是其发展的方向,高频化使开关电源小型化,并使开关电源进入更广泛的应用领域,特别是在高新技术领域的应用,推动了高新技术产品的小型化、轻便化。另外开关电源的发展与应用在节约能源、节约资源及保护环境方面都具有重要的意义。 开关电源中应用的电力电子器
[电源管理]
降压型<font color='red'>PWM</font>_AC-DC开关电源设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved