本帖最后由 dvacos 于 2024-8-31 18:24 编辑
一、电机控制算法
目前比较主流的控制算法有三种,FOC,BLDC(BLDC其实是特指一类电机,但是都会把它默认为六部方波控制法),DTC(用于交流电机),其中FOC 与 BLDC非常常见,DTC很少见,目前就知道ABB有在用这种控制算法。
1、矢量控制(Vector Control)
矢量控制算法,也称为场定向控制(FOC),是一种广泛应用于交流电机(尤其是感应电机和永磁同步电机)的控制策略。它的主要目标是实现对电机的精确控制,使其具有与直流电机相似的控制特性。
工作原理:
坐标变换:矢量控制通过将电机的三相电流转换到与电机磁场同步旋转的两个正交坐标系(通常为直轴d轴和交轴q轴)来实现电机旋转控制。
电流分解:在d-q坐标系中,电流被分解为两个分量,d轴电流控制磁通,q轴电流控制转矩。
控制环路:通过闭环控制,调整电流分量以实现对电机速度和位置的精确控制。
特点:
提供良好的动态响应和稳态性能、可以实现平滑的启动和制动、适用于需要高精度控制的应用。
2、直接转矩控制(Direct Torque Control, DTC)
直接转矩控制是一种用于交流电机(尤其是感应电机)的控制策略,它通过直接控制电机的转矩和磁通来实现快速响应。
工作原理:
转矩和磁通的直接控制:DTC不依赖于电流的间接控制,而是直接通过控制电机的电压来改变转矩和磁通。
电压状态选择:DTC通过选择不同的电压状态来改变电机的电压,从而直接控制转矩和磁通。
开关频率固定:DTC通常使用固定的开关频率,这简化了控制算法的实现。
特点:
快速响应:由于直接控制转矩和磁通,DTC具有非常快的响应时间。
简单实现:DTC算法相对简单,易于实现。
高效率:由于减少了电流控制的复杂性,DTC可以提高电机的效率。
转矩纹波:由于直接控制,可能会产生较高的转矩纹波,这可能需要额外的滤波或控制策略来减少。
3、六步控制
也称为梯形波控制或六拍控制,是无刷直流电机(BLDC)中常用的一种控制策略。这种控制方法因其简单性和易于实现而在许多应用中得到广泛应用,尤其是在成本和复杂性要求较低的场合。
六步控制的工作原理:
电流方向:在任何给定时间,只有两个相位的绕组被通电,第三个绕组则处于断电状态。这导致电流在三个相位之间循环,形成六个不同的电流状态,因此得名“六步”,按照六步去控制电流方向,现成电磁场,与固定磁场的定子互斥,从而旋转。
控制顺序:电流状态的切换顺序决定了电机的旋转方向和速度。通常,电流状态按照一定的顺序(例如U-V, V-W, W-U等)进行切换,形成连续的旋转磁场。
控制步骤:
步骤1:相位U上桥通电,相位V和W下桥断电。
步骤2:相位V上桥通电,相位U和W下桥断电。
步骤3:相位W上桥通电,相位U和V下桥断电。
步骤4:相位U上桥通电,相位W和V下桥断电。
步骤5:相位V上桥通电,相位U和W下桥断电。
步骤6:相位W上桥通电,相位V和U下桥断电。
但是实际的电机转动的时候不是按照这个顺序,读取到的霍尔传感器值不是1->6 和 6->1的,霍尔值与霍尔安装的角度有关系。
特点:
简单性:六步控制算法相对简单,易于实现,适合低成本应用。
可靠性:由于没有机械换向器,电机的可靠性和寿命得到提高。
效率:虽然不如正弦波控制高效,但六步控制在许多应用中仍能提供足够的效率。
二 、NUCLEO-G431KB环境验证
快速的过一遍。
打开 Cube Mx后直接选择对应开发板,生成对应的工程
板载LED 与 连接ST-Link的USART2已经初始化完毕
按需配置工程为Keil等
打开工程添加闪灯 与 串口打印代码
三 、实现BLDC
要实现BLDC,最基本需要 IO输出(控制MOS的下桥),IO输入(读取Hall值),PWM输出(控制MOS的上桥),ADC做母线电流保护。
大部分MOS的下桥也是用PWM去做的,但是实际上没必要,下桥的作用就是打开MOS形成回路,调整电压的功能其实是上桥在做,所以直接用GPIO就可以了。下面就开始一项一项的验证。
1、引脚功能分配
如上文所写,BLDC需要6个IO 与 3个PWM(定时器引脚),下图是开发板的引脚定义。
经过一番抉择,IO分配如下
突出一个,排排坐,按顺序。
具体引脚分配如图:
2、相关外设初始化
GPIO配置:
霍尔输入GPIO配置为输入、上拉
MOS下桥GPIO配置为输出、上拉、高速模式
PWM配置:
目前主频是170M Hz
分频:1 700 000 / (8500-1) = 200HZ 定时器的自动重装载值填(1000-1)就是20K
占空比默认是0
3 、初始化配置
由于电机操作硬件比较频繁,所以都会尽可能的使用寄存器配置,这样代码会更快、更加美观。所以目前的GPIO读取 与 GPIO的高低电平都是直接控制寄存器。
PWM初始化
配置50%占空比
Main函数中添加PWM使能
HAL_TIM_PWM_Start( &htim1, TIM_CHANNEL_1 );
GPIO寄存器读 与 写
GPIO 相关的寄存器如下,需要关心的寄存是IDR(输入) 与 ODR(输出),但是这颗比较新的G4系列控制输出电平的高低寄存器有多个,下面会提到。
霍尔是PA4 PA5 PA6,连续的三位,并且GPIO输入电平寄存器是GPIOA->IDR。
所以霍尔读取代码是:
( GPIOA->IDR >> 4 ) & 7
这样就可以读取到3个IO的值了,是不是比调用API快、简洁、美观。
MOS下桥输出(GPIO寄存器写)
以往都是控制ODR寄存器可读可写:既能控制管脚为高电平,也能控制管脚为低电平,ODR寄存器是一个可读可写的寄存器,对相应位写1,对应引脚输出高电平,对相应位写0,对应引脚输出低电平。
但是发现,HAL_GPIO_WritePin 这个API操作的是不是ODR这个寄存器。
以往操作ODR寄存器,为了避免改动其他IO,要先将指定Bit与,将指定Bit清零后,再或指定Bit,将对应Bit置一
查阅一番资料过后,发现:
BSRR 只写寄存器:可以控制管脚为高电平,也能控制管脚为低电平。写1可将对应端口置1,写0,无效果。
BRR 只能改变管脚状态为低电平,可用于改变管脚状态为低电平,对寄存器 管脚对于位写 1 相应管脚会为低电平。写 0 无动作。
这意味着,使用这俩个寄存器后,想要改动任意Bit,直接给指定Bit赋一即可,更快、更简单了。
拉低PB4 GPIOB->BSRR = 0x10; //拉高
拉高PB4 GPIOB->BRR = 0x10; //拉低
四、实验测试
PWM测试
单路PWM
三路PWM
霍尔读取测试
代码如下:
实验效果
霍尔读取+PWM上桥 +GPIO下桥组合控制逻辑
节选部分代码
实验结果
由于是PWM+GPIO 都是用于开关MOS管的,输入的电压与电流 分别是24V 5A(全功率、未限制时),稍有不注意就会损坏器件、芯片。所以先接上逻辑分析仪看波形是否正确。
以下的波形由绿色竖线分段,编号依次递增。约定:XH,如WH 指W的上桥打开。XL,如WL指W的下桥打开。默认高电平有效,实际需要配合硬件调整,如实际硬件中会使用N+P MOS,配合不同的预驱会有全高电平导通,一高一低导通等。
1、波形一
第一段 WH VL打开,电流由W上桥流入电机后由V下桥流出接地,形成回路,没有问题
第二段 UH UL打开,如果接入硬件,会导致U相将电源直接对地短路,损坏元器件,导致冒烟,着火等
所以改动后,再次抓取波形
2、波形二
第一段UH VL导通,没问题
.
.
.
第六段 UH WH UL导通,如果接入硬件,会导致U相将电源直接对地短路,要改
3、波形三
修改了占空比,波形上比较好看
波形三的1-6段的波形都是正常的,单一霍尔周期内没有上下桥导通,不会损坏元器件。完美!
这里要引入一个概念,死区。
电机是3相桥,六个MOS组成的驱动电路。每个桥的上半桥和下半桥是是绝对不能同时导通的,但高速的PWM驱动信号在达到功率元件的控制极时,往往会由于各种各样的原因产生延迟的效果,造成某个半桥元件在应该关断时没有关断,造成功率元件烧毁。
死区就是在上半桥关断后,延迟一段时间再打开下半桥或在下半桥关断后,延迟一段时间再打开上半桥,从而避免功率元件烧毁。这段延迟时间就是死区。
所以要在PWM或 GPIO打开的时候都需要延时打开。
高级定时器都会有这个死区调节功能,只需要在初始化的时候配置一下,定时器就会每次输出PWM的时候都会自动插入死区。插入死区后就进一步保证了,不会上下桥同时导通烧毁元器件
以上就是BLDC最基本的六步法的所有流程,完后就可以画板子,将六路信号接到驱动板上,用于驱动电机了。