当前位置: 首页 > article >正文

【STM32】外部时钟|红外反射光电开关

1.外部时钟

单片机如何对外部触发进行计数?先看一下内部时钟,内部时钟是接在APB1和APB2时钟线上的,APB1,APB2来自stm32单片机内部的脉冲信号,也叫内部时钟。我们用来定时。同样我们可以把外部的信号接入单片机,来对其进行计数功能呢?
在这里插入图片描述
这个GPIO口的数据就是外部的信号,当时为了保证稳定性,而是采用下面这种做法
在这里插入图片描述
我们知道每一个定时器都有四个输入通道TI1 ~TI4,而TI3 ~TI4不接入触发控制器,也就先不说,对于TI1和TI2对外部输入信号会做滤波处理,以及边沿检测,TI1FP1和TI2FP2既可以选择是上升沿,也可以下降沿触发,也可以双边沿触发,而TI1_ED只能双边沿触发,以及还有一个外部触发器单独的,ETR需要经过极性选择,边沿检测,预分频和输入滤波,边沿检测只能检测到上升沿,但是极性选择可以翻转电平,所以说既能检测高电平,也能检测到低电平,由于ETR输入到触发器的信号只能是内部时钟频率的1/4,所以我们可以调节预分频器改变,输入滤波的话是会有一定的抖动,而抖动的话,时间不会太长,所以我们可以根据一定频率的采样信号来进行采样,N次采样后,这N次采样到的电平是一样的,就说明不是抖动,因为抖动时间不会太长,所以还没有达到N次就出现电平不一样,来进行滤波.
触发器会在TI1FP1和TI2FP2和TI1_ED和ETR中选择一个信号进行控制,也被称为外部时钟模式1,而在ETR输入滤波后面也会直接接入到触发控制器,不借用从模式控制器

2.红外反射光电开关原理

在这里插入图片描述
VCC和GND来给模块供电,类似蓝色的灯泡用来发射红外光,而黑色的小灯泡用来接收红外光,黑色小灯泡检测出来的红外光强度以模拟量的形式输出到AO口,当接收的红外光强度很强(灯泡前有物体)时,对应的模拟量电压就越小,当接收红外光强度很弱时(灯泡前有黑色物体时或没有物体时),对应模拟量的电压就越大。
当接收红外光强度很强时,指示灯就会亮。
很强很弱的区分是有一个阈值,这个阈值可以由该模块上的一个电位器来调节,大于该阈值说明接收红外光强度低,但是AO模拟量电压大。
我们会用到他的DO引脚,当AO的电压大于阈值时,DO输出高电平,当AO电压小于阈值时,DO输出低电平。
总结:当灯泡前有物体,DO输出低电平,灯泡前有黑色物体时或没有物体时,DO输出高电平。

3.使用

我们可以将DO引脚当做ETR外部输入的信号,然后通过外部时钟模式1来对其脉冲来计数,将计数的结果打印在屏幕上。
注意主频时钟频率不要选择太大,因为滤波的时候,他的采样频率适合主频时钟频率有关系的,主频频率越大的话,采样频率就越大,相同的采集次数,假如说会采集5次,频率越大就是更小的时间间隔采集一次,这样有的抖动也就会逃脱滤波器的滤波。
在这里插入图片描述
定时器2的ETR是在PA0上,所以将DO引脚接在单片机的PA0引脚即可
在这里插入图片描述
这里的滤波要设置15,要不然等一下会在黑白交替的时候会有好多抖动,如果不滤波的话,这些抖动也会算在计数中。

#include <stdio.h>
#include "string.h"
#include "oled.h"
int main(void)
{

  
 


  
  OLED_Init();
  HAL_TIM_Base_Start(&htim2);//开启定时器2来对ETR外部输入信号计数
  int count=0;
  char message[50]="";


  while (1)
  {
	  count=__HAL_TIM_GET_COUNTER(&htim2);//将计数值放在count中

	  OLED_NewFrame();
	  sprintf(message,"count:%d",count);
	  OLED_PrintString(15, 15,message, &font16x16, OLED_COLOR_NORMAL);

	   OLED_ShowFrame();
	   HAL_Delay(100);

    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

根据视频可以看出共计数19次,实现对下表黑条进行计数

在这里插入图片描述
同时我们可以使用外部时钟模式1中的TI1_ED进行双边沿检测,对于黑色条纹会有一个高电平,双边沿就会计数*2;


http://www.kler.cn/a/555046.html

相关文章:

  • EasyRTC智能硬件:实时畅联、沉浸互动、消音护航
  • 前端导出word文件,并包含导出Echarts图表等
  • phpmyadmin 文件包含(CVE-2014-8959)
  • 微信小程序实现拉卡拉支付
  • 《鸿蒙开发-答案之书》获取视频第一帧和视频时间
  • 深度学习-4.优化与正则化
  • 亲测可用,IDEA中使用满血版DeepSeek R1!支持深度思考!免费!免配置!
  • 第1章大型互联网公司的基础架构——1.11 消息中间件技术
  • android 使用 zstd算法压缩文件
  • 数仓搭建(hive):DWS层(服务数据层)
  • Ubuntu 20.04源码安装opencv 4.5.0
  • 视频图像质量评价开源算法介绍【持续更新】
  • 有向图的强连通分量: Kosaraju算法和Tarjan算法详解
  • MapReduce理论知识与实践
  • ESXI 8.0 linux vSphere Client service has stopped working.手动启动服务
  • BS架构网络安全 网络安全架构分析
  • UI学习备忘
  • 第1章 快速认识线程
  • 用deepseek学大模型05逻辑回归
  • 在 Python 中操作 Excel 文件