织梦网站做中英文双语言版本,重庆网站建设模板制作,杭州自助建站软件,网站如何被百度收入1.外部时钟
单片机如何对外部触发进行计数#xff1f;先看一下内部时钟#xff0c;内部时钟是接在APB1和APB2时钟线上的#xff0c;APB1,APB2来自stm32单片机内部的脉冲信号#xff0c;也叫内部时钟。我们用来定时。同样我们可以把外部的信号接入单片机#xff0c;来对其…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 count0;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