直流无刷电机控制(一)六步换相(有感霍尔)附六步换相实现代码

直流无刷电机概述

直流无刷电机的转子为永磁铁,定子为换相线圈,有别于有刷电机通过电刷或者换向器换相,无刷电机通过控制器电子换相。

极对数

直流无刷电机采用永磁铁作为转子,一对NS磁极为一极对,为了使电机运转更加平滑,一般转子配有四极对或八极对的多极对。

槽数

直流无刷电机槽数一般指定子上的绕组线圈数,电机的线圈绕组通过嵌线工艺固定在定子槽中。因为直流无刷电机为三相电机,所以槽数一般为:

槽数 = 3 N 槽数=3N 槽数=3N

机械角度和电角度

机械角度为电机转子轴相对于定子旋转的角度;而电机中一个观测点磁极发生由N变化至S(亦或者由S变化至N)则记为电角度旋转180°。

所以可得:

电角度 = 机械角度 × 极对数 电角度=机械角度 \times 极对数 电角度=机械角度×极对数

定子磁场

可以通过右手螺旋定则确定定子线圈通电后产生的电磁场极性。

六步换相

六步换相是一种控制直流无刷电机的换相方法,通过控制定子中的电流,以实现电机转速和旋转方向上的控制。

六步换相有120°两相定子导通和180°三相定子导通两种导通模式,这里讨论的是更多场景下使用的120°导通模式。

下图定子磁场极性由右手螺旋定则确定。
在这里插入图片描述

六步换相并不是说必须有传感器估算电角度,只需要按照下述顺序(或反顺序)进行换相,在调制参数合适的情况下电机就有可能运转,区别只是在于运转的平滑性,带载丢步的概率或者说换相的成功概率。

为了提高电机换相的成功率,尤其是为了改善带载状态下的丢步问题,并使运转更加平滑,需要对电机转子电角度观测进行闭环换相(注意这里指的是换相闭环,并非电机控制中常见的电流环,速度环或位置环那样的控制器闭环)。

六步换向实际测量图示

如下图示CH1黄色为A,CH3蓝色为B,CH2粉色为C。测量结果为各相反电动势。

在这里插入图片描述

在这里插入图片描述

调制方法

电机PWM调制方法实则为功率器件桥臂开关策略。分为以下五种:

  1. PWM-ON型。在120°导通区间,各开关管前60°采用PWM调制,后60°则恒通。
  2. ON-PWM型。在120°导通区间,各开关管前60°恒通,后60°则采用PWM调制。
  3. H_PWM-L_ON型。在120°导通区间,上桥臂开关管采用PWM调制,下桥臂恒通。
  4. H_ON-L_PWM型。在120°导通区间,上桥臂开关管恒通,下桥臂采用PWM调制。
  5. H_PWM-L_PWM型。在120°导通区间,上、下桥臂均采用PWM调制。

在这里插入图片描述

下为采用H_PWM-L_PWM开关策略的换相代码

switch (phase)
    {
    case HALL_PHASE_B2A:{
        LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH1);
        LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH2N);
        LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH3);
        LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH3N);

        LL_TIM_DisableAllOutputs(TIMx);
        LL_TIM_DisableCounter(TIMx);
        

        LL_TIM_OC_SetCompareCH2(TIMx,global_pwm_duty);
        LL_TIM_OC_SetCompareCH1(TIMx,TIMx->ARR);

        LL_TIM_CC_EnableChannel(TIMx,LL_TIM_CHANNEL_CH2);
        LL_TIM_CC_EnableChannel(TIMx,LL_TIM_CHANNEL_CH1N);

        LL_TIM_EnableAllOutputs(TIMx);
        LL_TIM_EnableCounter(TIMx);

        break;
    }
    case HALL_PHASE_C2A:{
        LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH1);
        LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH2);
        LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH2N);
        LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH3N);
        
        LL_TIM_DisableAllOutputs(TIMx);
        LL_TIM_DisableCounter(TIMx);
        

        LL_TIM_OC_SetCompareCH3(TIMx,global_pwm_duty);
        LL_TIM_OC_SetCompareCH1(TIMx,TIMx->ARR);

        LL_TIM_CC_EnableChannel(TIMx,LL_TIM_CHANNEL_CH3);
        LL_TIM_CC_EnableChannel(TIMx,LL_TIM_CHANNEL_CH1N);

        LL_TIM_EnableAllOutputs(TIMx);
        LL_TIM_EnableCounter(TIMx);

        break;
    }
    case HALL_PHASE_C2B:{
        LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH1);
        LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH1N);
        LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH2);
        LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH3N);
        
        LL_TIM_DisableAllOutputs(TIMx);
        LL_TIM_DisableCounter(TIMx);
        

        LL_TIM_OC_SetCompareCH3(TIMx,global_pwm_duty);
        LL_TIM_OC_SetCompareCH2(TIMx,TIMx->ARR);

        LL_TIM_CC_EnableChannel(TIMx,LL_TIM_CHANNEL_CH3);
        LL_TIM_CC_EnableChannel(TIMx,LL_TIM_CHANNEL_CH2N);

        LL_TIM_EnableAllOutputs(TIMx);
        LL_TIM_EnableCounter(TIMx);

        break;
    }
    case HALL_PHASE_A2B:{
        LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH1N);
        LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH2);
        LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH3);
        LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH3N);
        
        LL_TIM_DisableAllOutputs(TIMx);
        LL_TIM_DisableCounter(TIMx);
        

        LL_TIM_OC_SetCompareCH1(TIMx,global_pwm_duty);
        LL_TIM_OC_SetCompareCH2(TIMx,TIMx->ARR);

        LL_TIM_CC_EnableChannel(TIMx,LL_TIM_CHANNEL_CH1);
        LL_TIM_CC_EnableChannel(TIMx,LL_TIM_CHANNEL_CH2N);

        LL_TIM_EnableAllOutputs(TIMx);
        LL_TIM_EnableCounter(TIMx);

        break;
    }
    case HALL_PHASE_A2C:{
        LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH1N);
        LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH2);
        LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH2N);
        LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH3);
        
        LL_TIM_DisableAllOutputs(TIMx);
        LL_TIM_DisableCounter(TIMx);
        

        LL_TIM_OC_SetCompareCH1(TIMx,global_pwm_duty);
        LL_TIM_OC_SetCompareCH3(TIMx,TIMx->ARR);

        LL_TIM_CC_EnableChannel(TIMx,LL_TIM_CHANNEL_CH1);
        LL_TIM_CC_EnableChannel(TIMx,LL_TIM_CHANNEL_CH3N);

        LL_TIM_EnableAllOutputs(TIMx);
        LL_TIM_EnableCounter(TIMx);

        break;
    }
    case HALL_PHASE_B2C:{
        LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH1);
        LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH1N);
        LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH2N);
        LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH3);

        
        LL_TIM_DisableAllOutputs(TIMx);
        LL_TIM_DisableCounter(TIMx);
        

        LL_TIM_OC_SetCompareCH2(TIMx,global_pwm_duty);
        LL_TIM_OC_SetCompareCH3(TIMx,TIMx->ARR);

        LL_TIM_CC_EnableChannel(TIMx,LL_TIM_CHANNEL_CH2);
        LL_TIM_CC_EnableChannel(TIMx,LL_TIM_CHANNEL_CH3N);

        LL_TIM_EnableAllOutputs(TIMx);
        LL_TIM_EnableCounter(TIMx);

        break;
    }
    default:
        break;
}

霍尔传感器

电机中的霍尔传感器为单极性霍尔传感器,即在靠近N磁极时表现为高电平,在靠近S磁极表现为低电平。

直流无刷电机的霍尔传感器布置方式为120°和60°两种,对应着两种控制序列。

120°布置

在这里插入图片描述

因为120°布置,所以传感器ABC之间有着 4 π 3 \frac{4\pi}{3} 34π的相位差

在这里插入图片描述

60°布置

在这里插入图片描述

因为60°布置,所以传感器ABC之间有着 2 π 3 \frac{2\pi}{3} 32π的相位差

在这里插入图片描述

直流无刷电机的无感控制是指在驱动无刷电机时不需要使用位置传感器(如霍尔或光电)来确定转子的位置。通常,无感控制只需要使用黄、绿、蓝三根粗线(U、V、W)来驱动电机,而不需要额外的与传感器有关的细线。这种控制方法使得电机的体积可以更小。 无感控制实现依赖于电机内部的自感现象和通过电流测量和PWM信号进行的控制。 通过测量电机的电流和PWM信号,可以确定转子的位置,并根据需要调整电机的相位和频率,从而控制电机的转速和扭矩。无感控制对于闭环速度控制来说是一种常见的控制策略。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【电机应用控制】——直流无刷电机&驱动原理&有感闭环控制&无感闭环控制](https://blog.csdn.net/weixin_51658186/article/details/130117088)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [BLDC直流无刷电动机的控制算法](https://download.csdn.net/download/weixin_38500734/14849480)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值