测速——霍尔编码器电机原理与调度方法

01-编码器原理

1-基本组成

2-测量转动方向

3-测速

02-CubeMX配置

1-编码器模式

2-图形化配置

03-代码编写


01-编码器原理

跟着这位up学的,up讲的好棒

【7分钟让你彻底搞懂编码电机的原理和玩法】 https://www.bilibili.com/video/BV1wN4y1D7LR/?share_source=copy_web&vd_source=985ed259d2e2be1d81c218c58be165b9

1-基本组成

由转子和两个霍尔原件(那两个小黑东西)组成,转子内部由N组电磁铁组成,分为N极与S极。在转动过程中,当N极经过霍尔元件时,产生高电平,当S极经过霍尔元件时,产生低电平。两个霍尔元件之间刚好差90度。

所以,在转动过程中会形成方波,两个元件产生的方波会有1/4周期的相位差。

2-测量转动方向

在某一极性下,若正转A相领先,则反转B相领先,通过这个方式便能检测出转动方向了

3-测速

已知编码器转子与电机原始轴相连。

电机大多配有减速比,即原始轴转N圈,实际轴(轮子连的轴)转一圈。减速比为N:1.

若霍尔编码器内部有13块电磁铁,则原始轴转一圈,每一相产生13个方波,即为13线霍尔编码器。

测量在时间周期T内某一相位上升沿数目(或下降沿)Num,之后与减速比P,N线,车轮周长C相结合,便能计算出速度。

综上,有速度计算公式 v =  ( Num / N )  / P * C

02-CubeMX配置

1-编码器模式

STM32单片机自带正交解码函数,采用定时器的编码器模式,所以一个电机需要采用两个定时器通道来采集A、B相信号。

2-图形化配置

编码器配置

03-代码编写

首先初始化

    HAL_TIM_Encoder_Start(&htim2, TIM_CHANNEL_ALL);//开启编码器模式的定时器
    HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);
    HAL_TIM_Base_Start_IT(&htim4);//开启用于测速中断的定时器

然后在主函数main.c编写相关检测速度函数
getTIMx_DetaCnt 函数用于从计时器中获取差值计数,
Get_Motor_Speed 函数用于获取电机速度。使用回调函数,HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim),在
计时器周期结束时被触发。

/* USER CODE BEGIN 4 */
int getTIMx_DetaCnt(TIM_HandleTypeDef *htim)
{
    int cnt;
    cnt = htim->Instance->CNT - 0x7FFF;
    htim->Instance->CNT = 0x7FFF;
    return cnt;
}

void Get_Motor_Speed(int *leftSpeed, int *rightSpeed)
{
    *leftSpeed = getTIMx_DetaCnt(&htim2);
    *rightSpeed = getTIMx_DetaCnt(&htim4);
}

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if (htim == &htim6)
    {
        Get_Motor_Speed(&leftSpeed, &rightSpeed);
    }
}
/* USER CODE END 4 */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值