首页 > 其他分享 >关于bldc的学习笔记(三)无刷测速原理

关于bldc的学习笔记(三)无刷测速原理

时间:2024-09-22 23:49:14浏览次数:3  
标签:PIN bldc motor1 TIM 无刷 GPIO 测速 hall

第一步:可以看出当只有一对级时,旋转一圈霍尔输出一个完整脉冲(一N一S)

第二步:计算其中高电平的持续时间,即:t = C / Ft   (其中Ft是计数频率,C为计数次数

第三步:所以旋转一圈,需要的总时间为T = 2*C/Ft

所得出的结果就为:s/圈 ,倒数就为:圈/s ,转化为RPM即:Ft/(2*C) *60 即可

值得注意的是,转子由N到S,就是经历了电角度180度,这个是关键,在根据上文说到的公式:
电角度 = 机械角度 * 极对数

可以知道,一极对下,电机转一圈霍尔信号就是一高一低(一次高电平,一次低电平为一个周期,此时刚好转一圈)因为此时电角度等于机械角度。
由此,我们可以推导出,在n极对数下,电机转一圈霍尔信号就是n高n低,一圈机械角度为360度,那么电角度 = n*360

在代码实现上,我们重点关注一个霍尔信号即可,通过这个信号告诉mcu此时霍尔信号跳变情况。

/**
 * @brief       获取霍尔传感器引脚状态
 * @param       motor_id :无刷接口编号
 * @retval      霍尔传感器引脚状态
 */
u32 hallsensor_get_state(u8 motor_id)
{
	__IO static u32 state;
    state  = 0;
    if(motor_id == MOTOR_1)
    {
        if(HAL_GPIO_ReadPin(HALL1_TIM_CH1_GPIO,HALL1_TIM_CH1_PIN) != GPIO_PIN_RESET)  /* 霍尔传感器状态获取 */
        {
            state |= 0x01U;
        }
        if(HAL_GPIO_ReadPin(HALL1_TIM_CH2_GPIO,HALL1_TIM_CH2_PIN) != GPIO_PIN_RESET)  /* 霍尔传感器状态获取 */
        {
            state |= 0x02U;
        }
        if(HAL_GPIO_ReadPin(HALL1_TIM_CH3_GPIO,HALL1_TIM_CH3_PIN) != GPIO_PIN_RESET)  /* 霍尔传感器状态获取 */
        {
            state |= 0x04U;
			g_bldc_motor1.hall_single_sta = 1; //检测单次霍尔电平信号,做速度计算
        }
		else g_bldc_motor1.hall_single_sta = 0;
    }
    else if(motor_id == MOTOR_2)
    {
        if(HAL_GPIO_ReadPin(HALL2_TIM_CH1_GPIO,HALL2_TIM_CH1_PIN) != GPIO_PIN_RESET)  /* 霍尔传感器状态获取 */
        {
            state |= 0x01U;
        }
        if(HAL_GPIO_ReadPin(HALL2_TIM_CH2_GPIO,HALL2_TIM_CH2_PIN) != GPIO_PIN_RESET)  /* 霍尔传感器状态获取 */
        {
            state |= 0x02U;
        }
        if(HAL_GPIO_ReadPin(HALL2_TIM_CH3_GPIO,HALL2_TIM_CH3_PIN) != GPIO_PIN_RESET)  /* 霍尔传感器状态获取 */
        {
            state |= 0x04U;
        }
    }
    return state;
}
/**
 * @brief       检测输入信号是否发生变化
 * @param       val :输入信号
 * @note        测量速度使用,获取输入信号状态翻转情况,计算速度
 * @retval      0:计算高电平时间,1:计算低电平时间,2:信号未改变
 */
u8 uemf_edge(u8 val)
{
	static u8 old_val;
	if(old_val != val)
	{
		old_val = val;
		if(val == 1) return 0; //上升沿
		else return 1; //下降沿
	}
	return 2;
}
            /******************************* 速度计算 *******************************/
			g_bldc_motor1.count_tim++; /* 计算速度专用计数值,也就是"C",计算定时器计数次数 */
			g_bldc_motor1.hall_sta_edge = uemf_edge(g_bldc_motor1.hall_single_sta); //输入第三个霍尔信号的电平状态
			if(g_bldc_motor1.hall_sta_edge == 0) //上升沿
			{
				/*计算速度*/
				if(g_bldc_motor1.dir == CW)//顺时针旋转
				{
					temp_speed = (SPEED_COEFF / g_bldc_motor1.count_tim);
				}
				else
				{
					temp_speed = -(SPEED_COEFF / g_bldc_motor1.count_tim);
				}
				FirstOrderRC_LPF(g_bldc_motor1.speed,temp_speed,0.2379f);   /* 一阶滤波 */
				
				g_bldc_motor1.hall_no_single_time = 0;
				g_bldc_motor1.count_tim = 0;
			}
			if(g_bldc_motor1.hall_sta_edge == 1) //下降沿
			{
				g_bldc_motor1.hall_no_single_time = 0;
				g_bldc_motor1.count_tim = 0;
			}
			if(g_bldc_motor1.hall_sta_edge == 2) //电平无变化,即电机停止工作
			{
				g_bldc_motor1.hall_no_single_time++; /* 不换相时间累计 超时则判定速度为0 */
				if(g_bldc_motor1.hall_no_single_time > 800) //800ms
				{
					g_bldc_motor1.hall_no_single_time = 0;
					g_bldc_motor1.speed = 0;        /* 超时换向 判定为停止 速度为0 */
				}
			}		

标签:PIN,bldc,motor1,TIM,无刷,GPIO,测速,hall
From: https://blog.csdn.net/m0_74424600/article/details/142347229

相关文章

  • 无刷电机FOC控制(一)
    前言无刷电机是一种典型的机电一体化产品,它以电子换向取代了传统有刷电机的机械换向,具有众多显著优势。从结构上看,无刷电机主要由定子和转子组成。定子包含绕组等部件,转子通常由永磁体构成。无刷电机的工作原理是通过特定的电子控制器,按照一定的顺序切换定子绕组中的电流,从而......
  • 洛谷 P11021 [LAOI-6] 区间测速 题解
    题目传送门使用multisetmultiset可以看成一个序列,支持插入一个数或删除一个数,时间复杂度均为\(O(\logn)\),且能始终保证序列中的数是有序的,而且序列中可以存在重复的数(而set容器要求两两不同,且不保证有序)。一个基本事实:速度最大的时刻必然出现在两个相邻点之间。例如从......
  • 告别繁琐,IsMyHdOK硬盘测速,即刻享受科技便利
    快节奏的生活因科技而精彩纷呈,它赋予我们超越时空的能力,让工作与家庭的天平在忙碌中依然保持平衡——而面对数据爆炸的时代,硬盘作为数据存储与交换的核心部件,其性能直接影响到我们的工作效率和体验。正是在这样的背景下,一款能够精准评估硬盘性能的工具——IsMyHdOK应运而生。......
  • STM32 TIM编码器接口测速(最详细的编码器接口笔记)
    编码器接口简单介绍方波的频率其实就代表了速度编码器接口测速原理TIM编码器测速本质上就是测频法,在指定时间内,对高电平信号进行计次编码器接口的设计逻辑就是,首先把A相和B项的所有边沿作为计数器的计数时钟,出现边沿信号的时候,就自增或者自减,如何判断自增还是自减?当出现......
  • 无刷电机控制算法的演变
    一,无刷电机可控制方式的演变1.霍尔有感六步换相不管是方波控制还是正弦波控制,六步换相驱动方法都是最简单的无刷电机驱动方式,驱动原理同有刷电机的驱动方式,只是普通无刷电机为3相六相位,普通有刷电机为单相两相位。只需要在合适的时间使能对应的相位矢量,电机便能正常运转。只要换......
  • 镭速UDP测速集成动态库或者静态库测速篇
    1. 下载镭速UDP集成库首先下载镭速UDP集成压缩包,解压后能在解压目录找到三个依赖库RaySync.lib、RaySync-Multi-Proxy-Client-Plus.lib、RaySync-Proxy-Server-Lib.lib。三个依赖头文件TyphoonMultiSocks.h、TyphoonProduct.h、TyphoonServer.h。2. 代码集成接口函数调用顺序:1. ......
  • 机械电气电机杂谈杯 第一届 电机电磁仿真设计大赛--直流无刷电机
    大家好,我是博主,夏目关注的朋友大部分是做机械,电机方面的,经常有朋友问我,有没有可以实战电磁仿真的,很遗憾,没有,举办这个电机电磁仿真设计大赛的目的是促进粉丝之间的沟通,交流碰撞思想,意在模仿市面上已经量产的产品,对其分析,提出自己的见解,可能你会说,我刚入门,可以参加么?没问题,关......
  • PbootCMS使用Ajax无刷新提交留言及表单
    留言表单<formonsubmit="returnsubmsg(this);">联系人<inputtype="text"name="contacts"requiredid="contacts">手机<inputtype="text"name="mobile"requiredid="mobile"......
  • 无刷电机驱动技术有哪些技术难点?
    无刷电机驱动涉及多个技术难点,主要包括以下几个方面:1.位置检测与控制:无刷电机需要精确地检测转子位置以进行换相控制。常见的方法包括使用霍尔传感器或采用无传感器技术。无传感器控制在低速时尤其具有挑战性,因为反电动势信号较弱且容易受到噪声干扰。2.换相控制:换相时序......
  • 《安富莱嵌入式周报》第341期:Stack Overflow调查报告分享开发者年薪情况,开源USB高速分
    周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104视频版:https://www.bilibili.com/video/BV1Gw4m1k7jw目录:1、开源多功能USB2.0高速分析仪2、开源100W微型无刷伺服电机控制器3、MicroChip新款DSC系单片机集成40Msps12bitAD......