【STM32学习】(19)STM32实现直流电机测转速(霍尔传感器)
最近在学习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实现直流电机测转速(霍尔传感器)相关推荐
- linux直流电机测试,带霍尔传感器编码器的直流减速电机测速原理讲解(附源码)...
查看: 14294|回复: 83 带霍尔传感器编码器的直流减速电机测速原理讲解(附源码) 高级会员, 积分 891, 距离下一级还需 109 积分 积分金钱891 注册时间2019-4-22 在线时间 ...
- STM32学习笔记(七) ADC模数转换测电平(普通和DMA模式)
嵌入式系统在微控制领域(温度,湿度,压力检测,四轴飞行器)中占据着重要地位,这些功能的实现是由微处理器cpu(如stm32)和传感器以及控制器共同完成的,而连接他们,使它们能够互相正常交流的正是本小节 ...
- 【STM32学习 自制STM32游戏机】
2020年科协招新需要出训练题,让新生了解一下单片机,所以我这边打算出一道游戏机的题,让新生用单片机实现一个游戏机,共3个游戏可选,分别为:贪吃蛇,打地鼠和推箱子,由于是针对于0基础新生,所以在指标上 ...
- 用直流电机测转速——测速发电机标定实验
测速发电机标定实验 文章目录 测速发电机标定实验 1 测速发电机原理和应用 1.1 原理 1.2 应用 2 硬件搭建 3 实验数据 4 总结 1 测速发电机原理和应用 1.1 原理 直流电机同时也是一 ...
- 【stm32学习】stm32最小系统和程序下载方式
文章目录 前言 一.程序下载 1.USB下载方式 2.J-LINK下载方式 前言 stm32学习过程,是从正点原子的开发板开始的,但是正点原子的开发板实在是太大了,而且不便宜,不适合一些实际项目制作, ...
- stm32学习笔记-6TIM定时器
6 TIM定时器 文章目录 6 TIM定时器 6.1 TIM定时中断原理 6.2 TIM定时中断相关实验 6.2.1 实验:定时器定时中断-内部时钟 6.2.2 实验:定时器定时中断-外部时钟 6.3 ...
- STM32学习笔记(六)丨TIM定时器及其应用(输入捕获丨测量PWM波形的频率和占空比)
本篇文章包含的内容 一.输入捕获 1.1 输入捕获简介 1.2 输入捕获通道的工作原理 1.3 输入捕获的主从触发模式 1.4 输入捕获和PWMI结构 二.频率的测量方法 2.1 测频法 2.2 测周 ...
- STM32学习笔记(八)丨ADC模数转换器(ADC单、双通道转换)
本篇文章包含的内容 一.ADC 模数转换器 1.1 ADC简介 1.2 逐次逼近型ADC工作原理 1.3 STM32中的ADC基本结构 1.4 STM32中ADC的输入通道 1.5 STM32中的AD ...
- STM32学习笔记(三)丨中断系统丨EXTI外部中断(对射式红外传感器计次、旋转编码器计次)
本篇文章包含的内容 一.中断系统 1.1 中断的定义 1.2 中断优先级 1.3 中断的嵌套 1.4 STM32中的中断系统 1.4.1 STM32的中断资源 1.4.2 嵌套中断向量控制器 NVIC ...
最新文章
- ORACLE 修改SID
- 比特币在贬值但是不会出局
- SAP簇表BSEG取数优化的方法
- CPU VS GPU笔记
- 记一次转不过弯的递归
- RTT的线程同步篇——互斥量
- 【线程安全的List】CopyOnWriteArrayList的原理及使用
- 【Oracle】手工建库
- 测试驱动开发心得体会
- 【GBT28181开发:SIP协议实践】之设备状态查询
- 【喜报】利用COOC又发表了多篇一区SCI、SSCI、CSSCI
- TTML(IMSC)字幕
- 33 | 解读TPU:设计和拆解一块ASIC芯片
- 开源组件安全漏洞检测主流工具对比
- 7月份火爆Github的热门Python项目
- 最全长文详述“数字人民币简史”,揭开数字人民币神秘面纱
- h3cminia51使用手册_关于H3C mini A51的管理IP问题?
- java中输出语句println()和print()的区别
- sql脚本语言中的循环语句介绍
- vs2013(所有版本)-产品密钥
热门文章
- 中国海底电缆行业发展前景及投资风险预测分析报告
- Java实现微信支付之Native模式
- 谱半径一定大于0_图的无符号拉普拉斯谱半径与最大度
- Android 如何进入Android工程模式
- 应用交付厂商F5与微软联合解决方案怎么样?有什么作用,效果如何?
- Spring Integration学习笔记:简介
- windows系统打印机无法共享报错0x000006cc......
- 重庆微企获5000万元风投-平板电脑和手机菜单系统-家庭智能信息终端
- QT使用多国语言及linguist工具使用
- 30个单片机常见问题及解决办法!