- 第一块电机驱动板的故事
- 设计思路 :最初,我设计电机驱动板是为了驱动一个直流电机,以满足一个电机工作项目的需求。我选择了H桥电路作为基本的驱动结构,因为H桥电路能够提供电机正反转的控制功能,这是直流电机驱动中常见的需求。为此,我选择了合适的MOSFET作为开关,设计了相应的驱动电路和逻辑控制电路,自己用一些旧的板子搭了一个电路出来,测试了一下直流电机的功能然而出现了蛮动不可控制的问题。随着项目的进展,我意识到使用无刷电机可能会更好地满足项目的需求。无刷电机具有更高的效率、更长的寿命和更低的噪音,这些特点使得它在许多应用中比直流电机更具优势。恰好,项目后续需要开发一个筋膜枪,考虑到无刷电机的性能和特点,我决定将电机驱动板的设计从直流电机转向无刷电机。
考虑点: 当时进行的时候当时就想,如果改用无刷电机的控制要电路可能就要复杂一些了,有可能需要用到MCU了,而且还要找无刷电机,还要找无刷电机的驱动电路等,好多需要考虑的,不能像驱动直流电机的电路那样了。
- 选择合适的无刷电机 :首先,我根据筋膜枪的性能需求,选择了适合的无刷电机型号。这包括考虑电机的功率、转速、扭矩等参数,以确保其能够满足筋膜枪的工作要求。
- 设计无刷电机驱动电路 :与直流电机不同,无刷电机需要更复杂的驱动电路。我选择了适当的电子调速器(ESC)作为无刷电机的驱动控制单元。ESC能够接收来自微控制器的PWM信号,通过内置的算法和电路来控制无刷电机的转速和方向。
- 设计逻辑控制电路 :为了与ESC进行通信并控制无刷电机的运行,我设计了相应的逻辑控制电路。这包括微控制器的选型、PWM信号的产生和传输、以及与ESC之间的接口设计等。
- 优化散热设计 :由于无刷电机在运行过程中会产生较高的热量,因此散热设计尤为重要。我通过增加散热片、优化散热布局和使用合适的散热材料来降低电机驱动板的温度,确保其在高温环境下能够稳定运行。
下面是直流电机的正反转原理图:
控制工作原理逻辑图:
MPS标准驱动MOS控制电路:
无刷电机的三相MOS控制电路是电机控制中非常关键的一部分,它使用多个沟道功率MOS管构成三相全桥,通过控制这六个MOS管的通断来完成电机的换相,从而驱动电机转动。而在无刷电机的运行过程中,对电流的检测是必不可少的,它有助于保护电机和控制器免受损坏,并提供对电机运行状态的监控。
三相直流无刷电机标准驱动:
- 参考的开源设计 :我查阅了一些开源的电机驱动板设计,参考L298N电机驱动板的设计,无刷电机电路参加了企业开源的无刷驱动设计。参考设计为我提供了很多有用的信息,驱动电路的布局、元件的选择和驱动电路的保护措施等。
- 遇到的电机驱动难题及处理方法
遇到问题 :在初次测试直流电机中,我发现电机启动时有较大的火花,且电机运行不稳定,而且根本没有办法控制转速。电流等。这主要是由于MOSFET的开关速度不匹配和驱动电路设计不合理导致的。所以后面果断更改为无刷电机的主要原因之一。
- 发烫 :当电机驱动板长时间工作时,因为电流过大和散热不良而发烫。当时我通过增加散热片、改善散热布局和限制电流大小来解决这个问题。另一个是当时画板时线路不够粗,引起电路发烫。还有一个就是取样电阻封装太小,温度超高引起发烫。
- 烧板 :烧板是由于当时的电路设计不合理、元件选型不当或不熟悉工作状况导致的。仔细检查电路设计,选择合适的元件,优划了走线从而解决烧板现象。
- 电磁干扰 :当时驱动电机工作时,电机产生的电磁干扰导致电机运行不稳定和影响电路器件工作异常。我通过增加滤波电路、优化电路布局和选择合适的元件来降低电磁干扰,最主要的是电机离板子的位置远了一些,解决了问题,当时是无意中发现是电机电磁干扰,实验时线用的稍微长一 点,板子工作正常,然而装到壳子里面就不行了,工作异常。
- 电机驱动电路设计风格
- 走大电流 :第一选择大电流的MOSFET,对于需要走大电流的电机驱动电路而言,并设计合适的散热布局,如果实在是达不到要求,就重新布线增加锡的面积,铜的宽度,同时,我会限制电流大小,以防止电路过载。
- 散热风格 :我的散热风格主要是通过在关键元件增加过孔,和铜的面积,给发热器件足够大的铜进行散热,另一个是给电机增加个小风叶,工作时,对电路板进行吹风,达到风冷的效果。
- 抗电磁干扰设计风格 :为了降低电磁干扰,我当时在电路设计中增加滤波电路,增加了EMI器件,调整电路设计,优化电路布局,和合适的元件。同时,注意接地和屏蔽等电磁兼容性设计。
- 使用过的电机驱动芯片或 MOSFET
-
电机驱动芯片 : * 我使用过MP6529、MP1924、EVQ6532、MP1922、MP6538、MP6501AGF 、 MP6530GR 等电机驱动芯片。选择这些芯片的原因主要是基于它们的性能和易用性,具有高效能、低噪声和低功耗的特点,非常适合用于需要高性能的电机驱动应用,特别是MP6530能驱动由6个高达60V N-通道功率MOSFET组成的三个半桥。它使用自举电容为高侧MOSFET驱动供电,内部涓流电流充电电路可以维持充足的栅极驱动电压,支持100%占空比工作。此外,MP6530还具有一些内部安全特性,如可编程过流保护、可调节死区时间控制、欠压锁定保护(ULVO)和过温保护。
-
MP6538是一款设计用于三相无刷直流电机驱动应用的栅极驱动IC。它能驱动由6个100V N-通道功率MOSFET组成的三个半桥。这款IC使用自举电容为高侧MOSFET驱动供电,如果需要长时间输出高电平,则由内部充电泵维持高侧栅极驱动电压。
-
MP6538具有全方位的保护特性,包括可编程过流保护(OCP)、可调节死区时间控制、欠压锁定保护(ULVO)和过温关断保护。它含有三个霍尔传感器输入,通信逻辑由3个间隔120°的霍尔元素输入决定。此外,PWM、DIR和nBRAKE输入用于控制电机速度、位置和转矩。
-
MP6538采用带散热焊盘的QFN-28 4mm×5mm封装,工作电压高达100V。这款栅极驱动IC在电机控制应用中广泛使用,如电动自行车、电动工具、机器人、无人机等。
-
MOSFET :我使用过如IRF3205、IXFH8N60P、HY1908、SM454AT9、JMTK3005等MOSFET。这些MOSFET具有低导通电阻、高开关速度和良好的散热性能。选择这些MOSFET的原因主要是基于它们的性能和价格考虑。在选择过程中,我会考虑MOSFET的耐压、耐流和开关速度、内阻等参数,以确保它们能够满足应用需求。同时,我还会注意MOSFET的散热性能和封装形式等因素。这些MOSFET的优势在于它们能够提供高效的电机驱动能力,同时具有良好的稳定性和可靠性。
当初实现的核心代码:
// 打开PWM通道A、B、C
PWM_AL_ON();
PWM_BL_ON();
PWM_CL_ON();
// 等待一段时间(假设delay_ms是一个延时函数,单位为毫秒)
delay_ms(50); // 延时50毫秒
// 关闭PWM通道A、B、C
PWM_AL_OFF();
PWM_BL_OFF();
PWM_CL_OFF();
DIin=0x500; //偏置电流设定
if(SampleData[2]>1117&&SempleData[2]<=1500)DIin=SempleData[2];
SempleVI(); //采集电压电流
Timeountkey=500; //更新显示
Menu = 1-Menu;
key_1 = 1;
if(Menu==0)
{
sprintf(temp_buff1,"Set :%4d RPM ",SetSpeed); //输出显示设定速度
sprintf(temp_buff,"Real:%4d RPM ",RealSee); //显示电机实时转速
}
else
{
sprintf(temp_buff1,"Vbus :%d.%d V ",CanshuV/10,CanshuV%10); //输出显示占空比
sprintf(temp_buff,"I(MA):%d ",CanshuI); //显示电机转速
}
TimeCountkey=0;
if(Menu==0)
{
sprintf(temp_buff1,"Set :%4d RPM ",SetSpeed); //输出显示占空比
sprintf(temp_buff,"Real:%4d RPM ",RealS); //显示电机转速
}
else
{
sprintf(temp_buff1,"Vbus :%d.%d V ",CanshuV/10,CanshuV%10); //输出显示占空比
sprintf(temp_buff,"I(MA):%d ",CanshuI); //显示电机转速
}
/* HSI使能并校准,48MHz/6=8MHz */
RCC_HSI_Enable(RCC_HSIOSC_DIV6);
/* 设置HCLK和PCLK的分频系数 */
RCC_HCLKPRS_Config(RCC_HCLK_DIV1);
RCC_PCLKPRS_Config(RCC_PCLK_DIV1);
/* 使能PLL,通过PLL实现8倍频到8MHz*8=64MHz */
RCC_PLL_Enable(RCC_PLLSOURCE_HSI, 8000000, 8);
/* RCC_PLL_OUT(); // PC13输出PLL时钟,这一行被注释掉了 */
/* 设置FLASH读等待周期 */
__RCC_FLASH_CLK_ENABLE(); // 使能FLASH时钟
FLASH_SetLatency(FLASH_Latency_3); // 设置FLASH读等待周期为3 cycle
/* 时钟切换到PLL */
RCC_SysClk_Switch(RCC_SYSCLKSRC_PLL);
RCC_SystemCoreClockUpdate(64000000); // 更新系统核心时钟频率为64MHz
#else // 这是一个条件编译的else分支
RCC_HSI_Enable(RCC_HSIOSC_DIV6); // HSI被重复使能,这里可能是个错误
__RCC_FLASH_CLK_ENABLE(); // 使能FLASH时钟
FLASH_SetLatency(FLASH_Latency_3); // 设置FLASH读等待周期为3 cycle
RCC_HSI_Enable(RCC_HSIOSC_DIV1); // HSI再次被使能,且配置为不分频,这会导致逻辑错误
借一个图,讲一下无刷电机的工作原理:
上下线圈的绕向相反,则通电时极性相同。
三相无刷电机的三个线圈确实是彼此独立的,但在实际应用中,为了提高线圈的利用率和电机的效率,通常不会单独依次导通每个线圈,而是采用星形(Y型)或三角形(Δ型)连接方式来同时导通两相或三相线圈。
在星形连接方式中,三相电动机的三个绕组的一端连接在一起,形成一个公共点,即中性点。这种连接方式下,电动机的每个绕组所承受的电压是相电压,即电源相线与中性点之间的电压。星形连接的特点是电压较低、电流较大,并且有一个中性点可以引出,可以方便地实现四线制供电,满足某些特定需求。
当采用星形连接一次导通两相或三相时,可以通过控制器依次给不同的线圈对通电,产生旋转磁场,从而驱动电机转动。在第一阶段,可以给AB两相通电,使A极线圈和B极线圈产生磁感线,并产生合力;在第二阶段,可以给AC两相通电,改变磁感线的方向和合力;以此类推,不断改变通电的线圈对,就可以实现电机的连续旋转。
三相变流器的基本电压矢量定义与空间分布:
取样电阻增粗:
PCB电源线与电流采集线路加粗:
当时打板出来的一个PCB照片,无刷电机的空PCB:
以上就是我个人对电机当初的理解,与现在的一些经验。