IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 工创赛基于stm32f103的HAL库的全向麦轮的四个7路寻迹传感器智能款采集程序 -> 正文阅读

[嵌入式]工创赛基于stm32f103的HAL库的全向麦轮的四个7路寻迹传感器智能款采集程序

文章目录

引言

1.寻迹传感器工作原理介绍

2.使用方法

3.代码实现


引言:

? ? 基于刚刚结束的工创赛给大家分享一下我们的传感器选择方案

一、寻迹传感器工作原理介绍

? ? ? ?灰度传感器有数字传感器和模拟传感器两种,其原理大致相同。原理:一只发光二极管和一只光敏二极管,安装在同一面上。灰度传感器利用不同颜色的检测面对光的反射程度不同的原理进行颜色深浅检测。在有效的检测距离内(理论上距离可以无限远,实际受外界光源的影响,最佳距离为15mm至50mm,如果距离过高的话,需要进行遮光),发光二极管发出的光,照射在检测面上,检测面反射部分光线,光敏二极管检测此光线的强度并将其转换为单片机可以识别的电信号。这个电信号是一个模拟值,单片机可以根据模拟值的大小进行二值化处理,也就是给一个电平分界线,当电压大于一个值的时候给一个高电平(或低电平),当电压小于一个值的时候给一个低电平(或高电平)。当然这里可以用电压比较器作为电平的参考电压。这就是我们用的数字量灰度传感器。数字量的灰度传感器如果加入的是单片机处理数据,那么可以把得到的原始数据加入滤波算法、数据混合算法得到一个波动小、适应环境强的数字传感器。 如果对采集的原始的数据不做处理,那么就是模拟值输出。也就是我们的模拟量灰度传感器。因为每路传感器相互之间都是有误差的,所以同样的条件下模拟值肯定不是一样。

作为我们使用者来说一般知道怎么用就可以了(说点人话)简单来说智能款传感器有两种输出方式

第一种是通过gpio输出高低电平5v/3.3v(例如传感器在黑线上输出高电平,不在黑线上输出低电平)

第二种是串口通信,因为在智能款传感器上有一颗mcu通过自身的采集和计算可以采集到传感器的状态,而我们要做的就是用我们的主板与传感器的主板通信就可以来知道我们想知道的传感器的状态就可以了。


?2.使用方法

接下来给大家讲一下使用方法(仅供参考)

作为一个麦轮车要想进准的定位首先就是位置状态足够多从而实现位置闭环,如果采用第一种gpio输出高低电平的话,那么一路对应着一路引脚,四个7路就是28个引脚,太占引脚而且麻烦,所以我们采用第二种串口通信的方式,stm32f103这个型号的板子有5路硬件串口,四路作为与传感器通信,一路与我们的上位机通信处理数据和计算从而改变车身校正。

提供一个思路

第一步配置cubemx的串口

首先配置RCC、SYS、clock(这里跳过了)

?

?

然后生成项目文件打开


3.代码实现

1.主函数代码

int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  MX_USART2_UART_Init();
  MX_USART3_UART_Init();
  MX_UART4_Init();
  MX_UART5_Init();
  /* USER CODE BEGIN 2 */
delay_ms(1000);
HAL_UART_Transmit(&huart2,&Tx_strcc,sizeof(Tx_strcc),10000);//串口2发送函数
HAL_UART_Receive_IT(&huart1,&Rx_mcu,1);//串口1接收函数
HAL_UART_Receive_IT(&huart5,&Rx_dat2,1);//串口5接收函数
HAL_UART_Receive_IT(&huart3,&Rx_dat3,1);//串口3接收函数				
HAL_UART_Receive_IT(&huart2,&Rx_dat,1); //串口2接收函数

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */

	}
  /* USER CODE END 3 */
}

?2.串口中断代码

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)  
{
	if((huart->Instance)==USART1)
			{ 
				if(Rx_mcu==0x00)
				{chuan_flag=0;
        Rx_dat=0;	
				Rx_dat2=0;	
				Rx_dat3=0;	
        wink=0;					
				}
				if(Rx_mcu==0x31)
				{chuan_flag=1;				
				}
				if(Rx_mcu==0x32)
				{chuan_flag=2;				
				}
				if(Rx_mcu==0x33)
				{chuan_flag=3;				
				}
				if(Rx_mcu==0x34)
				{chuan_flag=4;				
				}
			  if(Rx_mcu==0x35)
				{chuan_flag=5;				
				}
				if(Rx_mcu==0x36)
				{qq=1;
					chuan_flag=6;
				}
				if(Rx_mcu==0x37)
				{qq=0;
					chuan_flag=7;
					}					
				if(Rx_mcu==0x38)
				{qq=0;
					chuan_flag=8;
				}
				if(Rx_mcu==0x39)
				{qq=0;
					chuan_flag=9;
				}
				if(Rx_mcu==0x3a)
				{qq=0;
					chuan_flag=10;
				}
				if(Rx_mcu==0x3b)
				{qq=0;
					chuan_flag=11;
				}
				if(Rx_mcu==0x3c)
				{qq=1;				 
					chuan_flag=12;
				}
				if(Rx_mcu==0x3d)
				{qq=0;
					chuan_flag=13;
				}
				if(Rx_mcu==0x3e)
				{qq=0;
					chuan_flag=14;
				}
				if(Rx_mcu==0x3f)
				{qq=1;
					chuan_flag=15;
				}
				if(Rx_mcu==0x40)
				{qq=0;
					chuan_flag=16;
				}
				if(Rx_mcu==0x41)
				{qq=0;
					chuan_flag=17;
				}
				if(Rx_mcu==0x42)
				{qq=1;
					chuan_flag=18;
				}
				if(Rx_mcu==0x43)
				{qq=0;
				 chuan_flag=19;
				}
				send_data();
      HAL_UART_Receive_IT(&huart1,&Rx_mcu,1);	
			
			}
      if((huart->Instance)==UART5)
			{			
				if(chuan_flag==4)
						{if(Rx_dat2 == 0x40)
							{HAL_UART_Transmit(&huart1,&Tx_0x32,sizeof(Tx_0x32),10000);     
							}}
												if(chuan_flag==5)
						{if(Rx_dat2 == 0x7f)
							{HAL_UART_Transmit(&huart1,&Tx_0x31,sizeof(Tx_0x31),10000);     
							}}
												 if(chuan_flag==7)
						{
							if(chu_or_jue==chu)
							{
							if(Rx_dat2 == 0x08)
							{HAL_UART_Transmit(&huart1,&Tx_0x32,sizeof(Tx_0x32),10000);     
							}
							if(Rx_dat2 == 0x10||Rx_dat2 == 0x18||Rx_dat2 == 0x20||Rx_dat2 == 0x40||Rx_dat2 == 0x30||Rx_dat2 == 0x60||Rx_dat2 == 0x70)
							{HAL_UART_Transmit(&huart1,&Tx_0x33,sizeof(Tx_0x33),10000);     
							}
							if(Rx_dat2 == 0x04||Rx_dat2 == 0x0c||Rx_dat2 == 0x02||Rx_dat2 == 0x01||Rx_dat2 == 0x06||Rx_dat2 == 0x07||Rx_dat2 == 0x03)
							{HAL_UART_Transmit(&huart1,&Tx_0x34,sizeof(Tx_0x34),10000);     
							}
						  }		
							if(chu_or_jue==jue)
							{
							if(Rx_dat2 == 0x08)
							{HAL_UART_Transmit(&huart1,&Tx_0x32,sizeof(Tx_0x32),10000);     
							}
						  }
							if(chuan_flag==9)
						{if(Rx_dat2 == 0x40)
							{HAL_UART_Transmit(&huart1,&Tx_0x32,sizeof(Tx_0x32),10000);     
							}}
						if(chuan_flag==10)
						{if(Rx_dat2 != 0x40&&Rx_dat2 != 0x20&&Rx_dat2 != 0x60)
							{HAL_UART_Transmit(&huart1,&Tx_0x33,sizeof(Tx_0x33),10000);     
							}
						}
            if(chuan_flag==13)
						{ 
							
							if(Rx_dat2 == 0x08)
							{HAL_UART_Transmit(&huart1,&Tx_0x31,sizeof(Tx_0x31),10000);     
							}	
							if(Rx_dat2 == 0x04||Rx_dat2 == 0x0c||Rx_dat2 == 0x02||Rx_dat2 == 0x01||Rx_dat2 == 0x06||Rx_dat2 == 0x07||Rx_dat2 == 0x03)
							{HAL_UART_Transmit(&huart1,&Tx_0x33,sizeof(Tx_0x33),10000);     
							}	
							if(Rx_dat2 == 0x10||Rx_dat2 == 0x18||Rx_dat2 == 0x20||Rx_dat2 == 0x40||Rx_dat2 == 0x30||Rx_dat2 == 0x60||Rx_dat2 == 0x70)
							{HAL_UART_Transmit(&huart1,&Tx_0x32,sizeof(Tx_0x31),10000);     
							}
							wink++;
						}
            else if(chuan_flag==14)
						{if(Rx_dat2 == 0x08)
							{HAL_UART_Transmit(&huart1,&Tx_0x34,sizeof(Tx_0x34),10000);     
							}}
						else if(chuan_flag==17)
						{if(Rx_dat2 == 0x01||Rx_dat2 == 0x02||Rx_dat2 == 0x03)
							{HAL_UART_Transmit(&huart1,&Tx_0x31,sizeof(Tx_0x31),10000);     
							}
							if(Rx_dat2 == 0x40||Rx_dat2 == 0x20||Rx_dat2 == 0x30)
							{HAL_UART_Transmit(&huart1,&Tx_0x32,sizeof(Tx_0x32),10000);     
							}
						}
						 HAL_UART_Transmit(&huart5,&Tx_strcc,sizeof(Tx_strcc),10000);
HAL_UART_Receive_IT(&huart5,&Rx_dat2,1);						 						
			}
			if((huart->Instance)==USART3)
			{					
				 if(chuan_flag==6)
						{if(Rx_dat3 == 0x7f)
							{HAL_UART_Transmit(&huart1,&Tx_0x31,sizeof(Tx_0x31),10000);     
							}}
																		else if(chuan_flag==18)
						{if(Rx_dat3 == 0x01||Rx_dat3 == 0x02||Rx_dat3 == 0x03)
							{HAL_UART_Transmit(&huart1,&Tx_0x31,sizeof(Tx_0x31),10000);     
							}
							if(Rx_dat3 == 0x40||Rx_dat3 == 0x20||Rx_dat3 == 0x30)
							{HAL_UART_Transmit(&huart1,&Tx_0x32,sizeof(Tx_0x32),10000);     
							}
						}
						HAL_UART_Transmit(&huart3,&Tx_strcc,sizeof(Tx_strcc),10000);
			 HAL_UART_Receive_IT(&huart3,&Rx_dat3,1);		
			 }
			if((huart->Instance)==USART2)                      
      {    
				   if(chuan_flag==1)
						{if(Rx_dat == 0x08||Rx_dat == 0x04||Rx_dat == 0x0c)        
			     {HAL_UART_Transmit(&huart1,&Tx_0x31,sizeof(Tx_0x31),10000);						 
           }}
            if(chuan_flag==2)
						{if(Rx_dat == 0x7f)        
			     {HAL_UART_Transmit(&huart1,&Tx_0x31,sizeof(Tx_0x31),10000);						 
           }}
						 if(chuan_flag==3)
						{
           if(Rx_dat != 0x7f)       
			     {HAL_UART_Transmit(&huart1,&Tx_0x32,sizeof(Tx_0x32),10000); 						 							 
             }
					  if(Rx_dat == 0x7f)        
			     {HAL_UART_Transmit(&huart1,&Tx_0x33,sizeof(Tx_0x33),10000);            						
            }}
						
						if(chuan_flag==8)
						{if(Rx_dat == 0x08)
							{HAL_UART_Transmit(&huart1,&Tx_0x33,sizeof(Tx_0x33),10000);     
							}}	
            if(chuan_flag==11)
						{
							if(Rx_dat == 0x08)
							{HAL_UART_Transmit(&huart1,&Tx_0x31,sizeof(Tx_0x31),10000);     
							}	
							if(Rx_dat == 0x04||Rx_dat == 0x0c||Rx_dat == 0x02||Rx_dat == 0x01||Rx_dat == 0x06||Rx_dat == 0x07||Rx_dat == 0x03)
							{HAL_UART_Transmit(&huart1,&Tx_0x33,sizeof(Tx_0x33),10000);     
							}
							if(Rx_dat >= 0x10||Rx_dat == 0x18||Rx_dat == 0x20||Rx_dat == 0x40||Rx_dat == 0x30||Rx_dat == 0x60||Rx_dat == 0x70)
							{HAL_UART_Transmit(&huart1,&Tx_0x32,sizeof(Tx_0x31),10000);     
							}
							wink++;
						}
           	if(chuan_flag==12)
						{if(Rx_dat == 0x3f)
							{HAL_UART_Transmit(&huart1,&Tx_0x37,sizeof(Tx_0x37),10000);     
							}
						}
            else if(chuan_flag==15)
						{if(Rx_dat == 0x40)
							{HAL_UART_Transmit(&huart1,&Tx_0x35,sizeof(Tx_0x35),10000);     
							}}
						else if(chuan_flag==16)
						{if(Rx_dat == 0x01||Rx_dat == 0x02||Rx_dat == 0x03)
							{HAL_UART_Transmit(&huart1,&Tx_0x31,sizeof(Tx_0x31),10000);     
							}
							if(Rx_dat == 0x40||Rx_dat == 0x20||Rx_dat == 0x30)
							{HAL_UART_Transmit(&huart1,&Tx_0x32,sizeof(Tx_0x32),10000);     
							}
						}
             if(chuan_flag==19)
						{if(Rx_dat == 0x20||Rx_dat == 0x30)
							{HAL_UART_Transmit(&huart1,&Tx_0x31,sizeof(Tx_0x31),10000);     
							}
						}			
				if(chu_or_jue==1)
				{					
HAL_UART_Receive_IT(&huart1,&Rx_mcu,1);	
				}
  HAL_UART_Transmit(&huart2,&Tx_strcc,sizeof(Tx_strcc),10000);
      HAL_UART_Receive_IT(&huart2,&Rx_dat,1);       
			}

(大家仅供参考)这个是当时我当时做的所有的位置当时用到哪个位置就就写到哪了有点乱哈=.=

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-10-08 11:56:38  更:2021-10-08 11:57:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 5:27:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码