智能小车红外测速模块的使用方法(基于STM32的标准库)

这篇具有很好参考价值的文章主要介绍了智能小车红外测速模块的使用方法(基于STM32的标准库)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基于STM32标准库编程实现智能小车的红外测速所需掌握的知识:

(1)外部中断的配置

(2)定时器的配置

(3)串口的配置

红外测速的核心思路

(1)红外测速模通电后,会发出红外线,利用测速盘对红外线进行遮光,使测速模块连接STM32的中断引脚触发中断。每次发生中断,就进入一次中断服务函数,对遮光次数进行累加并记录。

(2)配置定时器为0.01s触发一次中断,每次中断程序自动进入定时器的中断服务函数,设置一个定时器中断次数的计数值,使用if语句判断定时器中断次数如果为100次,即为1s的时间定时,就进行速度的处理。

(3)计算公式:路程 = [ (总遮光次数 / 测速盘孔数) * 2πR / 1000 ]

注意事项:

(1)总遮光次数 / 测速盘孔数 = 测速盘转的圈数

(2)R即为车轮半径,单位为mm,除以1000转换单位为m,易于计算速度单位为m/s

(3)速度 = 路程 / t  (t=1s)

智能小车红外线模块参数,学习STM32的随笔录,stm32,单片机,嵌入式硬件

智能小车红外线模块参数,学习STM32的随笔录,stm32,单片机,嵌入式硬件

智能小车红外线模块参数,学习STM32的随笔录,stm32,单片机,嵌入式硬件

 STM32基于标准库编程的代码:

外部中断配置:

void Exti2_Init(void)
{
	//使能端口A的硬件时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	//配置PA2为输入模式
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	//使能系统时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
	//将PA2和EXTI2连接一起
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource2);
	//外部中断配置
	EXTI_InitStructure.EXTI_Line = EXTI_Line2;
	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;  
	EXTI_InitStructure.EXTI_LineCmd = ENABLE;
	EXTI_Init(&EXTI_InitStructure);
	//配置中断优先级及中断请求
	NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStructure);
}

 定时器的配置:

oid Time4_Init(void)
{
	//使能硬件时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);			//0.01s定时,100个0.01s则为1s
	
	//配置分频值,计数值
	TIM_TimeBaseStructure.TIM_Period = (10000/100)-1;					//T=1/100,(10000/100)=100完成一个计数所需的时间,则1s时间到达需要100个计数值
	TIM_TimeBaseStructure.TIM_Prescaler = 7200-1;  						//36MHz=36000000/3600=10000Hz 的预分频 
	TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
 
	TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
	
	//将PB0引脚连接到定时器4,在此用不到
	 GPIO_PinRemapConfig(GPIO_Remap_TIM4,ENABLE);
	
	//配置定时器4触发方式
	TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE);
	
	//配置定时器中断优先级
	NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStructure);

	//使能定时器
	TIM_Cmd(TIM4,ENABLE);

 串口配置:

void Usart1_Init_2BlueTooth(uint32_t baud)
{
	 
	//配置串口1相关参数:波特率,无校验位,8位数据位,停止位
	USART_InitStructure.USART_BaudRate = baud;											//波特率
	USART_InitStructure.USART_WordLength = USART_WordLength_8b;							//八个数据位
	USART_InitStructure.USART_StopBits = USART_StopBits_1;								//一个停止位
	USART_InitStructure.USART_Parity = USART_Parity_No;									//无校验位
	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;		//无硬件流控制
	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;						//允许接收发送
	USART_Init(USART1, &USART_InitStructure);
	
	//配置串口1中断触发方法:接收一个字节触发中断
	USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
	//配置串口1的中断优先级
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStructure);	
	
	//使能串口1工作
	USART_Cmd(USART1, ENABLE);

}

公式所需的变量:

int number = 0;          //遮光的计数值
int _1s_number = 0;      //定时器中断次数的计数值,100次即为1s
int Diameter = 65.0000; //小车车轮的直径
float Send_Speed;        //使用printf向串口发送速度数据
float pi = 3.1415926;    //π

中断服务函数:

void EXTI2_IRQHandler(void)
{	

if(EXTI_GetITStatus(EXTI_Line2) != RESET)
{
number++;
 EXTI_ClearITPendingBit(EXTI_Line2);
}
}




void TIM4_IRQHandler(void)
{
if(TIM_GetITStatus(TIM4,TIM_IT_Update)==SET)
{
_1s_number++;
if(_1s_number==100)
{	

float Speed = ((number/20.0000)*pi*Diameter)/1000.0000;
Send_Speed = Speed;
printf("%.4f\n",Speed);
number=0;
_1s_number=0;
	
}

TIM_ClearITPendingBit(TIM4,TIM_IT_Update);
}

}

主函数:

int main()
{
Usart1_Init_2BlueTooth(115200);
Time4_Init();	
Exti2_Init();

while(1)
{

}

return 0;

}

结语:

(1)由于设计智能小车整体代码,作者只能将红外测速模块的代码分部呈现,希望谅解。

(2)作者非重本大一生,在学习STM32中的随笔录,并非专业的开发人员,代码上或多或少存在不足之处,欢迎各位指正。

(3)发帖的初衷于在使用STM32做智能小车的红外测速模块中,缺少比较详细的讲解,为此写下这篇文章,希望可以帮助大一新生喜欢智能车的萌新解惑。文章来源地址https://www.toymoban.com/news/detail-761135.html

到了这里,关于智能小车红外测速模块的使用方法(基于STM32的标准库)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 智能小车红外避障原理

    红外避障电路由电位器R17,R28;发光二极管D8,D9;红外发射管 D2,D4和红外接收管D3,D5和芯片LM324等组成,LM234用于信号的比较,并产生比较结果输出给单片机进行处理。 智能小车红外避障运动的原理如下。红外光线具有反射特性,红外发射管发出红外信号,经物体反射后被红

    2024年02月01日
    浏览(32)
  • 智能小车红外循迹原理

    循迹电路由收发一体的红外收发管P1,P2;电位器R18,R29;发光二极管D6,D7和芯片LM324等组成。一共有两路,对应的红外电位器用于调节灵敏度。LM234用于信号的比较,并产生比较结果输出给单片机进行处理。 智能小车循迹运动的原理如下。红外光线具有反射特性,但对不同颜

    2023年04月17日
    浏览(49)
  • 【 STM32实例 】 智能小车的红外循迹

    这篇文章我主要讲的是让基于stm32单片机下的智能小车实现红外循迹功能,智能小车的项目非常多,比如说循迹避障、蓝牙遥控、视觉控制等等,我将会一步一步带大家走进stm32单片机的项目当中。 项目源码置文章底部,可自提 在硬件部分,与前几节我所介绍的51智能小车大

    2024年02月02日
    浏览(40)
  • STM32基于hal库的智能小车—红外寻迹

    材料: (1)stm32f407zgt6最小系统开发板 (2)l298n电机驱动模块1个 (3)四个电机 (4)循迹红外模块3个 一、组装 (1)L298N电机驱动模块与stm32开发板接线如下图: 说明:PWM接线把跳线帽扒开接外面引脚 CH1接ENA,CH2接ENB。 (2)寻迹红外接线: 二、主要程序 1、STM32CUBEMX配置如下:

    2024年02月01日
    浏览(45)
  • 大一萌新の作品:红外寻迹模块做跟随小车之没有I的极简PID算法

    (纯萌新,学习单片机半年了,这是寒假回家的作品,师从江科大,写博客纪录我实现后的经验)(比较粗略) 因为没买超声波避障模块,只能勉强一下用红外寻迹做一个类似的小车。 问题很多:光线会干扰读取到的AD值,且难以设置详细的距离,只能设置大概距离;碍于萌

    2024年02月14日
    浏览(35)
  • 基于FPGA的蓝牙遥控,超声波避障,红外循迹的智能小车

            闲来无事整个小车玩玩,设想的小车可以有蓝牙模块来控制模式切换,通过发送指令来更改相对应的功能,当避障的时候可以自动规避障碍物,当处于红外循迹时,可以跟随规划的轨迹前线,当手动遥控时可以控制前进后退左右转向停止等功能。         先介绍一下

    2024年02月07日
    浏览(48)
  • 一起玩儿物联网人工智能小车(ESP32)——69 使用INMP441模块采集声音

    摘要:本文介绍如何使用INMP441模块采集声音 前边介绍了第一个基于I2S通信协议的MAX98357A模块,利用该模块可以播放各种声音文件。今天来介绍如何使用INMP441模块实现声音的采集功能,也就是如何将声音转变成数字信号。 INMP441是一款高性能,低功耗,数字输出的全向MEMS(微

    2024年03月15日
    浏览(63)
  • 一起玩儿物联网人工智能小车(ESP32)——63 SD和TF卡模块的使用

    摘要:本文介绍SD和TF卡模块的使用方法 前面介绍了非易失性存储的使用方法,由于空间和本身只支持键值对的限制,非易失性存储只适用于少量数据的记录。而不适用于各种声音、图片、大量数据等情况的使用。这时候就需要有文件系统或者更大容量存储空间的支持。SD卡(

    2024年02月22日
    浏览(53)
  • AT89S52单片机智能寻迹小车自动红外避障趋光检测发声发光设计

    wx供重浩:创享日记 对话框发送:寻迹 获取完整说明报告+源程序+数据 小车具有以下几个功能:自动避障功能;寻迹功能(按路面的黑色轨道行驶);趋光功能(寻找前方的点光源并行驶到位);检测路面所放置的铁片的个数的功能;计算并显示所走的路程和行走的时间,并

    2024年02月19日
    浏览(50)
  • 51红外循迹智能车——红外循迹模块设计

    目录 赛道环境 红外传感器的特征 TCRT5000传感器 LM339单限电压比较器 LM339简介 ​编辑  单限电压比较器仿真 红外循迹模块的设计 红外循迹模块原理图   红外循迹模块原理图讲解 上图为赛道示意图,两端为黑色,中间为白色  TCRT5000传感器 红外传感器由一个 红外发光二极管

    2024年02月04日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包