博客
关于我
【STM32学习】(19)STM32实现直流电机测转速(霍尔传感器)
阅读量:172 次
发布时间:2019-02-28

本文共 2859 字,大约阅读时间需要 9 分钟。

最近在学习STM32单片机

本次博文想记录一下32单片机连接霍尔传感器来测量直流电机转速。

材料准备:

1.单片机:STM32L052K8*

2.霍尔传感器

3.直流电机

电路图如下:

其中,单片机和直流电机不用介绍,下面介绍一下霍尔传感器。

主要想说一下霍尔传感器的引脚怎么去看,如下图看:

其他一些性能参数暂时不需要管,一般情况肯定够用的。

下面讲一下测转速的实现原理

霍尔传感器检测到金属时,会出现低电平,当金属块离开时会变成高电平,就是这样循环往复的记录电机转动的圈数。

实现方式用定时器实现,有两种实现方法,这里记录一下:

方法一:

接线:

电机接在PA4口

霍尔传感器接在PA6口

定时器实现10us定时,在回调函数中实现功能。代码如下:

回调函数,实现如下:

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){	if(htim->Instance == htim2.Instance)	{		cnt++;		if(HAL_GPIO_ReadPin(HUOER_GPIO_Port,HUOER_Pin) == 0  && 0 == flag)		{		  count_c++; 		  flag = 1;		}		else if(HAL_GPIO_ReadPin(HUOER_GPIO_Port,HUOER_Pin) == 1)		{		  flag = 0;		}		if(cnt>=100000) 		{			printf("\n\r***1秒钟电机旋转的圈数为:%d 圈****\n\r",count_c);			count_c = 0;			cnt = 0; 		}	}}

main函数:

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_TIM2_Init();  /* USER CODE BEGIN 2 */	printf("\n\r***wantin***\n\r");  /* USER CODE END 2 */	HAL_GPIO_WritePin(MOTO_GPIO_Port,MOTO_Pin,GPIO_PIN_SET);	HAL_TIM_Base_Start_IT(&htim2);  /* Infinite loop */  /* USER CODE BEGIN WHILE */  while (1)  {	    }  /* USER CODE END 3 */}

效果如下:

方法二:(该方法不太建议使用),因为在while(1)里面实现的圈数统计,这样不好的原因是以后while(1)中功能增加,会有执行时间误差,不易准确,但只实现测速还是可以的。定时器设置1s

回调函数:

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){	if(htim->Instance == htim2.Instance)	{		printf("\n\r***1秒钟电机旋转的圈数为:%d 圈****\n\r",count_c);		count_c = 0;	}}

main函数:

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_TIM2_Init();  /* USER CODE BEGIN 2 */	printf("\n\r***wantin***\n\r");  /* USER CODE END 2 */	HAL_GPIO_WritePin(MOTO_GPIO_Port,MOTO_Pin,GPIO_PIN_SET);	HAL_TIM_Base_Start_IT(&htim2);  /* Infinite loop */  /* USER CODE BEGIN WHILE */  while (1)  {    /* USER CODE END WHILE */    /* USER CODE BEGIN 3 */	  	  if(HAL_GPIO_ReadPin(HUOER_GPIO_Port,HUOER_Pin) == 0  && 0 == flag)	  {		  count_c++; 		  flag = 1;	  }	  else if(HAL_GPIO_ReadPin(HUOER_GPIO_Port,HUOER_Pin) == 1)	  {		  flag = 0;	  }	    }  /* USER CODE END 3 */}

执行效果如下:

你会发现这两个效果是差不多,因此可以视情况而选择测速方法。

 

转载地址:http://pxnj.baihongyu.com/

你可能感兴趣的文章
LiveGBS user/save 逻辑缺陷漏洞复现(CNVD-2023-72138)
查看>>
localhost:5000在MacOS V12(蒙特利)中不可用
查看>>
logstash mysql 准实时同步到 elasticsearch
查看>>
Luogu2973:[USACO10HOL]赶小猪
查看>>
mabatis 中出现< 以及> 代表什么意思?
查看>>
Mac book pro打开docker出现The data couldn’t be read because it is missing
查看>>
MAC M1大数据0-1成神篇-25 hadoop高可用搭建
查看>>
mac mysql 进程_Mac平台下启动MySQL到完全终止MySQL----终端八步走
查看>>
Mac OS 12.0.1 如何安装柯美287打印机驱动,刷卡打印
查看>>
MangoDB4.0版本的安装与配置
查看>>
Manjaro 24.1 “Xahea” 发布!具有 KDE Plasma 6.1.5、GNOME 46 和最新的内核增强功能
查看>>
mapping文件目录生成修改
查看>>
MapReduce程序依赖的jar包
查看>>
mariadb multi-source replication(mariadb多主复制)
查看>>
MariaDB的简单使用
查看>>
MaterialForm对tab页进行隐藏
查看>>
Member var and Static var.
查看>>
memcached高速缓存学习笔记001---memcached介绍和安装以及基本使用
查看>>
memcached高速缓存学习笔记003---利用JAVA程序操作memcached crud操作
查看>>
Memcached:Node.js 高性能缓存解决方案
查看>>