有刷电机开发过程以及遇到的问题分享

本文详细探讨了有刷电机的PWM频率选择、H桥驱动模式(受限单极、单极、双极模式)以及电机调试中遇到的实际问题,包括电机防线判断、电流采样、编码器测速、运动规划和力矩模式反转等问题,并分享了在不同场景下的解决方案和经验总结。
摘要由CSDN通过智能技术生成

有刷电机开发过程以及遇到的问题分享

                                                                                                                                                                                                                                      

目录

前言

一、关于有刷电机PWM频率问题总结

二、直流电机H桥驱动模式

2.1.受限单极模式

2.2.单极模式

2.3.双极模式

2.4.刹车可行性分析

三、电机调试实际问题

3.1.电机防线判断条件

3.2.控制周期和电流采样点的选择

3.3.ADC采集策略

3.3.1.硬石开发板

3.3.2.自制驱动板

3.4.编码器测速问题导致电机在运动过程中抖动

3.4.1获取速度方式两种:

3.5.运动规划

3.6.力矩模式不能反转问题分析

3.7.一阶速度滤波算法的不足

 


 

前言

对于有刷电机驱动硬件部分直接使用PMSM驱动板来做有刷电机的兼容,已经完成包括三环,速度位置力矩模式以及运动规划以及通讯CANopen以及modbus,不是电机专业毕业做起来还是有些困难

一、关于有刷电机PWM频率问题总结

直流电机最佳PWM频率的选择,经过查阅各种资料,有的这样说:“PWM 控制的基本电路与 ON/OFF 控制相同,电路构成也很简单,施加在电机上的 PWM 信号一般为几千赫至几十千赫 有的这样说:“PWM 控制对频率的要求一般不是太高。从 50Hz 1000Hz 的频段,电机都可以正常工作。有的这样说:“6-16k之间为好。太低了,电机的振动比较大,太高了,开关损耗比较大,电磁噪声也比较明显一个H桥控制方案选择”那要看实际做什么电机!做伺服50HZ开玩笑吗?

查阅资料给对于PWM频率选择更加的困难,查阅直流电机最佳PWM频率选择公式:2πfL≫R  ,前者远远大于后者的10倍以上最佳,根据此式,PWM频率越大越好,而实际情况是PWM并不是越大越好,将电机的PWM频率调至很高(50K左右),占空比调至50%,电机基本处于不转的状态。

来分析原因:由于电机存在电感,电流无法突变,其感抗与频率成正比,所以施加过高频率的PWM,由于感抗电流很小而电机的力矩产生于磁场作用,而磁场的强弱与电流成正比,所以过小的电流将大大降低磁力,从而导致电机无力。这就像十字路口的红绿灯,假设各方向占 50%的通行时间,如果所设间隔恰当,就能保证最佳的通行效果,如果一味缩短周期,直到小于汽车的启步时间,即使仍保持 50%的比例,那路口也将完全无法通行。这和电机上施加过高频率的电压应该是一样的。(抄的)

后来又尝试过低的PWM频率,1K左右,发现电机震动很大并且伴有电流噪声,50HZ左右电机出现正转反转交替出现的现象,最终通过实验、调试和他人经验,将PWM频率确定为10KHZ电机的控制效果达到的一个比较好的状态,在稳定性、噪声以及电流方面都比较可靠。

这里记录一种别人的看法:过低的pwm频率会导致电枢回路中电流断续,产生转矩波动,如果需要低频率下工作,一般都做法是在主回路中串联一个平波电抗器,具体内容可参见陈伯时先生编著的运动控制系统一书。在实际使用中一般会采用较高的pwm频率,例如10kHz以上,这样做有几个好处,减小了每个周期的电枢电流波动,从而减小转矩脉动,较小的pwm延迟还能提高系统动态特性,但是pwm频率不能无限高,它受制于功率开关管的开关损耗,在较高的pwm下,开关损耗增加,会引起器件发热,能量浪费等一系列问题。

二、直流电机H桥驱动模式

简单的开关串联电机只能控制有刷直流电机的启停,要同时控制正反转和转速就要引入H桥式控制电路。对4个开关管的控制采用PWM,调节占空比可以实现调速。PWM频率一般在10KHz20KHz之间,频率太低会导致电机转速过低,噪声较大。频率太高,会因为MOS管的开关损耗而降低效率。根据对桥臂上MOS的PWM控制方式不同,分为三种控制模式:受限单极模式、单极模式、双极模式。

2.1.受限单极模式

电机电枢驱动电压极性是单一的。需要对一个MOS控制PWM控制。优点:控制方式简单,MOS开关损耗低。缺点:能刹车,但往往会对器件造成损伤,不能能耗制动,在负载超过设定速度时不能提供反向力矩。调速静差大,调速性能差,稳定性也不好。把电机切换到反向运行状态,但是这种方法是有很大的隐患的,往往会造成器件损坏。不过话又说回来了,那种受限单极PWM调制方法,只能使用这1种刹车或减速模式,既没有好的效果,又容易损伤器件。

 

电机电枢驱动电压极性是单一的。需要对一个MOS控制PWM控制。

优点:控制方式简单,MOS开关损耗低。

缺点:能刹车,但往往会对器件造成损伤,不能能耗制动,在负载超过设定速度时不能提供反向力矩。调速静差大,调速性能差,稳定性也不好。把电机切换到反向运行状态,但是这种方法是有很大的隐患的,往往会造成器件损坏。

不过话又说回来了,那种受限单极PWM调制方法,只能使用这1种刹车或减速模式,既没有好的效果,又容易损伤器件。

2.2.单极模式

 


电机电枢驱动电压极性是单一的。需要对同一侧桥臂的两个MOS进行互补PWM控制。要使用高级定时器的互补通道进行控制。

优点:启动快,能加速,刹车,能耗制动,能量反馈,调速性能不如双极模式好,但是相差不多,电机特性也比较好。在负载超速时也能提供反向力矩。

缺点:刹车时,理论上不能减速到0,速度接近0时没有制动力,实际电机由于摩擦力也会停止。动态性能不好,调速静差稍大。

控制过程:MOS管1和2由一对互补PWM进行控制,当1为高电平时,由VCC-1-Motor-4-GND形成通路,电机电流上升。当1为低电平时,2变为高电平,根据楞次定律,当不再给电机供电,线圈中存在自感电动势,电流继续往同一方向流动,于是由2-Motor-4形成通路,给线圈电流继续提供通路。

2.3.双极模式

(抄,就是玩儿)

电枢电压极性是正负交替的。需要两组互补PWM同时对4个MOS管进行控制。    

优点:能正反转运行,启动快,调速精度高,动态性能好,调速静差小,调速范围大,能加速,减速,刹车,倒转,能在负载超过设定速度时提供反向力矩,能克服电机轴承的静态摩擦力,产生非常低的转速。

缺点:控制电机复杂,在工作期间,4个MOS管都处于开关状态,功耗大。

控制过程:1和4同时处于PWM的高电平,于是由VCC-1-Motor-4-GND形成通路,电流上升。当1和4同时变为低电平,2和3相应变为高电平,因为楞次定律,线圈上的电流方向不变,于是由GND-2-Motor-3-VCC形成通路,虽然存在反向的供电电压,但是电机的线圈电流更大,于是电流仍然向VCC流动,同时电流下降的更快,线圈电流波动也更大。

这里可能会存在一个问题:就是1和4关断之后2和3打开,"如果电机自感电动势小于12V,那么电流会流向12V电源么?没想明白电流怎么会从电机两端的低电势流向12V电源?"电流为什么会从GND流向VCC?

这里做一下说明,续流的电压不取决于电机, 而是外面的回路, 也就是说, 回路电压有多高, 反电势就有多高所以上面的如果的假设不成立。

实际尝试双极模式:只是初期进行的简单的测试放弃了这种控制方法,经过测试电机发热比较严重由于正反交变电流的影响,并且在50%的占空比电机抖动不能静止不动,控制方法没搞明白,调试ELMO、MAXON驱动器发现他们的直流电机电流是存在正反电流的!具体什么原因没做分析!需求单极模式足够

2.4.刹车可行性分析

如果想得到有刹车的功能,就必须使用一个与PWM信号互补的PWM信号。这个信号在PWM关断期间,为电机提供一个续流通道,相当于开关电源的同步续流吧,也有称之为同步整流。按道理,那个二极管也能提供续流通道如图中的Q1,但是用MOS管作为续流通道有2个好处:

第一,导通压降低,比二极管发热更少,效率更高

第二,二极管上不能产生反向电流,而MOS管可以通过反向电流

其实二极管的反向电流对于MOS管来讲是正向电流,

电机反电动势在PWM关断时间的伏秒数 大于 电源电压在PWM开通时间加在电机上的伏秒数,小于,那么电机会产生反向电流,使电机产生反向力矩,因为直流永磁电机的力矩是正比例于电流的,反向电流就会产生反向力矩。视这个电流的大小,电机就能减速或者刹车了。而且电机上的这个反向电流还会在PWM开通时间回馈到电源中去,做到了能量回馈。如果电源是二次电池,那么这是有好处的,如果不是电池的话,会使母线电压升高,要做一些能量消耗的措施。

    (1) 缓减速:  说白了,就是你的PWM占空比就能控制电机的转速,电机的转速会跟随的你PWM占空比变化,你的占空比加大,电机就会加速,你的占空比减小,电机就会减速

    (2) 中减速:  但是如果你的占空比突然减到0,就相当于把电机短路了,这是急刹车,会不会损坏要看电机的内阻,功率,惯性,还要看功率管的过载能力。当然还考验电机的机械强度,因为这种刹车从表面上看,就好像直接用硬物把电机卡住的效果差不多,发出的声响也是十分巨大的金属声。

   (3) 暴力速:把电机切换到反向运行状态,但是这种方法是有很大的隐患的,往往会造成器件损坏。

    不过话又说回来了,那种受限单极PWM调制方法,只能使用这1种刹车或减速模式,既没有好的效果,又容易损伤器件。

所以如果需要电机带刹车的话,尽量使用单极调制或双极调制,不要使用受限单极调制模式。

双极模式,只有H桥一种接法,而且4只管子同时工作。

控制:当PWM占空比为50%时,电机保持静止状态,当PWM占空比大于50%时,电机正转,当PWM占空比小于50%时,电机反转。其实当占空比为50%时,电机并不是静止的,而是在原地抖动,电机通电但是未线圈未实现极性反转。因为电机上的电流也是一个交流的,这个抖动能有效克服电机的静摩擦,使电机能快速启动,迅速反应,适用与需要动态性能好的场合。 当然了,单极和双极调制也可以把4只管子都关断,使电机自由减速,而不是靠方向力矩来进行减速。

三、电机调试实际问题

3.1.电机防线判断条件

起初通过使用PID计算得出的值做为方向判断的条件,由于H桥的控制是受限单极性方法,比如速度在设定值附近时,PWM有正有负,在开光管的表现为:CW两路Q1和Q4打开,CCW两路Q 2和Q3打开,频繁的出现正反导通的结果,在电机的表现为在加速过程中电机运行平稳,在达到目标速度之后点机会发生抖动情况,后来通过两者的偏差值来判断方向,得到的效果和用PWM来判断方向结果是一致的,在方向一致的情况由高速降至低速时,现象更为明显,分析具体原因:

根据电机运行方向和PID输出可以得出结论:在同方向减速时,比如当前电机在朝着CW方向运行,条件:给定一个同方向且比当前速度小的速度值,受限单极模式控制方法就相当于直接给电机通入反向电流,相当于一个急刹车的作用,电流结果:由于电机线圈的电流方向不会突变,所以电流先正向减小为零,再反向增加,再反向减小为零,再正向增加回到正常状态。

作用在电机的现象:电机由当前速度值减速为零并且有反转的趋势,然后再正向加速到设定值。最终通过速度的设定值来判断电机需要打开哪一路MOS管,再在内部判断处理PID输出值与当前状态相反的情况,从而避免正向运动时反向MOS管打开造成电机抖动的情况,该问题局限性也就是本文开始提出的控制模式,由于使用的是受限单极模式,只能通过反向电流来制动,如果是大功率电机对于电机和器件的伤害较大。

(这图什么意思呢?当时简单画了下,我想想。。。。。还是抄图的图香,自己搞的图emmmmm,是上面说的电流结果)

3.2.控制周期和电流采样点的选择

开始控制周期为10K,PWM频率为21K,电流采样为连续转换一直采集,时序性可以说是全乱,并且研究了一段时间ADC采集不准确的问题,而且由于驱动板AD采样偏置电压收到了板子5V转3.3V的影响,偏置电压不稳定存在波动,浪费了一段时间。所以要保证硬件好的情况的下,先测硬件好坏再调试软件。AD采样不准确有两个方面的因素第一是:板子偏置电压存在波动。第二是:采样点为一直采。这两方面的原因导致ADC采样很差,并且电流环跑不起来。

通过了解,单片机工作时序问题严重影响控制效果,必须严格把控各个中断之间的时序问题,并且注意电机控制电流采样点的选择。图中黄色(第一条)为电流波形,蓝色(第二条)为PWM时序,也就是管子开通时间,红色(第三条)为AD采样点的时序,通过查阅资料STM32F407的内部中断响应时间是ns级别的,这跟代码的复杂程度和其他中断有关,但是实测有1到2uS的响应时间,具体原因没有分析,2us的响应时间不影响AD采样,资料显示,内部终端和外部中断的响应时间有所差别,内部中断的响应时间是us级别,而外部中断的响应时间是ns级别,但需要确保在100us内能完成AD采样和控制周期内的计算。

文章是2月份写的,三月份整理,这里的2us的延迟时间时由于测试代码写的是PWM控制LED的反转,LED翻转的过程为2.8us就解释了这里的2us的时间误差。而且上图的定时器计数方式为向上计数,ADC触发方式为TIM1CCR3触发,这里每调节一次PWM脉宽,就将CCR3的值设置为PWM脉宽值的一半,是为了保证每次都能在PWM高电平中心点,也就是MOS打开的中心点进行采样,ADC的触发点就随PWM脉宽的改变而改变。后来将PWM改为中心对齐模式将CCR3的值设置为固定的值这样PID控制周期固定,AD采样点固定电流环效果达到理想的状态。

图中红色为斩波周期50us,黄色为ADC采样点距离控制周期3.3us,计算ADC的采样时间为1.9us,所以3.3us足够ADC完成采样转换,浅蓝色为PWM脉宽,绿色为电机相电流。经过图可以看出AD采样和控制周期绝对固定这样就保证了ADC的采样准确性和控制周期一直性。在低速情况下PWM占空比较小时,AD采样收到影响,因为AD 采样时间1.9us左右,MOS开通的时间可能很短,采样的电流值为0。

更新:上文提到的3.3us可以尽可能缩短,因为在进入ADC中断的时候ADC数据已经采集完成了,所以不需要给ADC再预留采样时间了。

3.3.ADC采集策略

3.3.1.硬石开发板

 

ADC采用ADC3_CH4和ADC3_CH3两个通道进行下管电流采样,ADC采集方案有两种:一种是两个通道同时采样,将ADC配置为连续扫描模式单次中断模式,单次中断模式就是每个通道转换结束都产生中断在中断当中判断是哪个通道转换完成将数据如何处理。另一中方案是正转采集一路,反转采集一路,每次方向反转都要更改ADC采样通道。

由于图中续流二极管的作用,Q1管关闭的时候的电流如第二幅图所示,这种情况下会影响另一路电流采样点,导致另一路电流采样不准确,所以选择上述第二种方法,只采集需要的通路电流值,另一路不采集。

3.3.2.自制驱动板

(蓝色箭头为采样电阻所在位置)

采样点在电机相线上,这样设置采样点只需要一个采样通道就能完成正反转的采样,正转采样点电压大于1.65V,反转时采样点电压小于1.65V在代码当中就会出现负电流在软件处理的时候需要注意,这样的方法减少了一个ADC通道的使用。

3.4.编码器测速问题导致电机在运动过程中抖动

3.4.1获取速度方式两种:

第一种:

Enc.CaptureNumber = (int32_t) __HAL_TIM_GET_COUNTER(&htimx_Encoder)+(int32_t)(Enc.OverflowCount*65536) ;			
Enc.Speed = Enc.CaptureNumber - Enc.Last_CapNum; 
Last_CapNum = CaptureNumber;

这种方式需要开中断!那就肯定有不用中断的方式,如果开了中断就会存在优先级的问题。由于中断优先级嵌套的问题,编码器溢出中断可能会被打断,导致如果用溢出的次数进行测速计算会产生一次65536的滞后。导致Error值过大,PID输出过大出现抖动。通过改变优先级可以解决。

第二种:

void GetMotorSpeedAndLocation()
{
    EncoderTIM3.CaptureNumber = (int32_t) __HAL_TIM_GET_COUNTER(&htimx_Encoder);
    EncoderTIM3.Speed = EncoderTIM3.CaptureNumber - EncoderTIM3.Last_CapNum; //获取速度值
    EncoderTIM3.Last_CapNum = EncoderTIM3.CaptureNumber;

    if(EncoderTIM3.Speed < -32768)
    {
        EncoderTIM3.Speed += 65536;
    }
    else  if(EncoderTIM3.Speed > 32768)
    {
        EncoderTIM3.Speed -= 65536;
    }
    EncoderTIM3.Speed = FirstOrderFilter(Last_Value,EncoderTIM3.Speed);//一阶滤波器
    EncoderTIM3.MainPos += EncoderTIM3.Speed;
}

该种方式直接放在电机控制周期当中!就可以关闭编码器溢出中断了。收益很大,注意使用周期

3.5.运动规划

需要将运动规划当中的时间,理论的固定的时间电机会走相应的路程,但是实际情况下t时间内不一定能走相应的距离,通过时间判断会不准确,速度加速将理论离散化,固定周期内增加加速度,位置规划通过位置来判断,位置又包括电机运行的相对位置和绝对位置,输入的参数是绝对位置,而S型的位置规划是两点之间的相对位置,其中有一点可以简略就是电机运行的方向,在位置规划当中速度增加和速度的减小都用标量来实现,通过位置来判断电机运行的方向。

(软件:JScope图中紫色为目标位置值绿色为参考速度红色为实际速度黄色为当前位置值,可见红色实际速度绿色目标速度梯形反向,小BUG已经修改,符号没处理好)

注意:归一化处理将速度单位规定为(counts/control period)、加速度、减速度都规定为(counts/control period* control period),其中在参考速度处理当中将图中SetPoint当作标量来处理,所以图中第二个参考速度和实际速度对称,并不影响实际运行

3.6.力矩模式不能反转问题分析

具体没有分析!电工之家参考

但是EMLO、MAXION、IPSO支持反转,我试过反转能转动,不知道为什么我的反转需要很大的力不知道什么原因没有深究,遇到了再研究。

3.7.一阶速度滤波算法的不足

总结

占空比为:D=t/T×100%,则电机平均速度为:Vd=Vmax×D,D的变化范围是0≤D≤1。改变D得到不同的电机平均速度,从而调节速度。

这里或许有人会产生疑问:1、当D不为1时,在一个周期内,信号总是断断续续,桥臂上下开关管切换导通,电机是否会来回旋转,造成电机抖动?2、实际运行速度如何?

答:1、电机控制的PWM信号频率是比较高的,开关频率很高,不会出现来回旋转的现象;而且由于电机绕组是电感,在开关管关断时,电感中电流方向不会发生突变,不会引起电机抖动。

2、电机实际速度取决于电机两端电压Um的大小,Um=Ce*Ø*N+I*R,Um=Udc×(D1-D2)。Ce为电极常数,Ø为电机气隙磁通,I为绕组电流,R为电机电阻,Udc为电源电压,D1为Q1的占空比,D2为Q2的占空比。由于电机存在最小启动电压(堵转电压),当Um小于启动电压时,电机不会旋转,且电机长时间工作在此状态下容易烧毁。

1、有刷直流电机应用电磁感应定律,控制原理简单。采用H桥整流电路控制电机的旋转方向和速度。一般情况下,H桥桥臂上下开关管互补开通,且存在死区防止上下管直通烧坏。

2、在实际电路中,为减小电机发热,防止电流反向,提高电流利用率,采用方向信号控制,使桥臂上管开通时,下管始终关闭,电流方向始终与电机旋转方向一致。

3、速度环、位置环采用PID控制,可实现无静差跟踪,控制方法灵活,响应速度快,跟踪效果好。PID控制器的参数选取必须兼顾动态与静态性能指标要求,只有适当调整KP、Ki和KD参数,才能获得满意的控制性能。

4、积分限幅不能太大。例如:电机正转进行正转积分,速度跟随情况比较好,然后电机进行反转,因为正向积分太深,速度跟随会很慢。原因是:PID控制器的输出由于积分作用的不断累加而加大,从而导致执行机构达到极限位置,若控制器输出U(k)继续增大,执行器开度不可能再增大,此时计算机输出控制量超出了正常运行范围而进入饱和区。一旦系统出现反向偏差,u(k)逐渐从饱和区退出。进入饱和区越深则退出饱和区时间越长。在这段时间里,执行机构仍然停留在极限位置而不随偏差反向而立即做出相应的改变,这时系统就像失控一样,造成控制性能恶化,这种现象称为积分饱和现象或积分失控现象。

自己调试写代码过程当中遇到过很多的问题,这里讲比较重要的做一下记录,可能有不对的地方包容!

 


  • 13
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值