最近在学习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 */
}

执行效果如下:

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

【STM32学习】(19)STM32实现直流电机测转速(霍尔传感器)相关推荐

  1. linux直流电机测试,带霍尔传感器编码器的直流减速电机测速原理讲解(附源码)...

    查看: 14294|回复: 83 带霍尔传感器编码器的直流减速电机测速原理讲解(附源码) 高级会员, 积分 891, 距离下一级还需 109 积分 积分金钱891 注册时间2019-4-22 在线时间 ...

  2. STM32学习笔记(七) ADC模数转换测电平(普通和DMA模式)

    嵌入式系统在微控制领域(温度,湿度,压力检测,四轴飞行器)中占据着重要地位,这些功能的实现是由微处理器cpu(如stm32)和传感器以及控制器共同完成的,而连接他们,使它们能够互相正常交流的正是本小节 ...

  3. 【STM32学习 自制STM32游戏机】

    2020年科协招新需要出训练题,让新生了解一下单片机,所以我这边打算出一道游戏机的题,让新生用单片机实现一个游戏机,共3个游戏可选,分别为:贪吃蛇,打地鼠和推箱子,由于是针对于0基础新生,所以在指标上 ...

  4. 用直流电机测转速——测速发电机标定实验

    测速发电机标定实验 文章目录 测速发电机标定实验 1 测速发电机原理和应用 1.1 原理 1.2 应用 2 硬件搭建 3 实验数据 4 总结 1 测速发电机原理和应用 1.1 原理 直流电机同时也是一 ...

  5. 【stm32学习】stm32最小系统和程序下载方式

    文章目录 前言 一.程序下载 1.USB下载方式 2.J-LINK下载方式 前言 stm32学习过程,是从正点原子的开发板开始的,但是正点原子的开发板实在是太大了,而且不便宜,不适合一些实际项目制作, ...

  6. stm32学习笔记-6TIM定时器

    6 TIM定时器 文章目录 6 TIM定时器 6.1 TIM定时中断原理 6.2 TIM定时中断相关实验 6.2.1 实验:定时器定时中断-内部时钟 6.2.2 实验:定时器定时中断-外部时钟 6.3 ...

  7. STM32学习笔记(六)丨TIM定时器及其应用(输入捕获丨测量PWM波形的频率和占空比)

    本篇文章包含的内容 一.输入捕获 1.1 输入捕获简介 1.2 输入捕获通道的工作原理 1.3 输入捕获的主从触发模式 1.4 输入捕获和PWMI结构 二.频率的测量方法 2.1 测频法 2.2 测周 ...

  8. STM32学习笔记(八)丨ADC模数转换器(ADC单、双通道转换)

    本篇文章包含的内容 一.ADC 模数转换器 1.1 ADC简介 1.2 逐次逼近型ADC工作原理 1.3 STM32中的ADC基本结构 1.4 STM32中ADC的输入通道 1.5 STM32中的AD ...

  9. STM32学习笔记(三)丨中断系统丨EXTI外部中断(对射式红外传感器计次、旋转编码器计次)

    本篇文章包含的内容 一.中断系统 1.1 中断的定义 1.2 中断优先级 1.3 中断的嵌套 1.4 STM32中的中断系统 1.4.1 STM32的中断资源 1.4.2 嵌套中断向量控制器 NVIC ...

最新文章

  1. ORACLE 修改SID
  2. 比特币在贬值但是不会出局
  3. SAP簇表BSEG取数优化的方法
  4. CPU VS GPU笔记
  5. 记一次转不过弯的递归
  6. RTT的线程同步篇——互斥量
  7. 【线程安全的List】CopyOnWriteArrayList的原理及使用
  8. 【Oracle】手工建库
  9. 测试驱动开发心得体会
  10. 【GBT28181开发:SIP协议实践】之设备状态查询
  11. 【喜报】利用COOC又发表了多篇一区SCI、SSCI、CSSCI
  12. TTML(IMSC)字幕
  13. 33 | 解读TPU:设计和拆解一块ASIC芯片
  14. 开源组件安全漏洞检测主流工具对比
  15. 7月份火爆Github的热门Python项目
  16. 最全长文详述“数字人民币简史”,揭开数字人民币神秘面纱
  17. h3cminia51使用手册_关于H3C mini A51的管理IP问题?
  18. java中输出语句println()和print()的区别
  19. sql脚本语言中的循环语句介绍
  20. vs2013(所有版本)-产品密钥

热门文章

  1. 中国海底电缆行业发展前景及投资风险预测分析报告
  2. Java实现微信支付之Native模式
  3. 谱半径一定大于0_图的无符号拉普拉斯谱半径与最大度
  4. Android 如何进入Android工程模式
  5. 应用交付厂商F5与微软联合解决方案怎么样?有什么作用,效果如何?
  6. Spring Integration学习笔记:简介
  7. windows系统打印机无法共享报错0x000006cc......
  8. 重庆微企获5000万元风投-平板电脑和手机菜单系统-家庭智能信息终端
  9. QT使用多国语言及linguist工具使用
  10. 30个单片机常见问题及解决办法!