三相永磁同步无刷电机驱动电路形式有几种,其中比较高效的是上三下三六路输出形式。 下图为其中一种一相的驱动电,其它二路与之相同。其中CH1为高电平导通,CH1N为低电平导通,这样做是为了避免单片机在复位时,驱动引脚同时为相同电平,导致上下管同时导通,导致损坏开关管。 关于三相六路驱动无刷电机的时序,可以自行百度,本文只讨论如何用STM32的高级定时器产生控制时序。 1.设定定时器的输出引脚,用STM32CubeMX。用这个软件可以不关注芯片型号,可移植性很强。配置如下图. 在引脚配置图中设定输出引脚后,首先要设定引脚的GPIO状态。需设定为全部输出管为截止状态,这样就保证驱动开关管在上电复位至配置好GPIO期都不会导通。接下来要配置PWM输出,这是驱动时序的重点。Stm32的高级定时器功能很多,使用起来比一般的定时器配置要复杂。用作产生控制无刷电机的六步换相时序,需要用到其中的三个模块:时基产生模块,PWM信号生成模块和三路互补输出模块。时基产生模块与PWM模块与其它单机的定时器区别不大,也很容易设置。三路互补输出比较复杂,这里依照我的理解写出来供参考。先看下输出电路框图输出电路控制位有好几位,只有使用好它们的组合控制功能,才能输出想要的时序。 1.DBTR->MOE 主输出使能位。当为0时,定时器断开。引脚状态为GPIO设定的状态。 设为1时,输出才会接入输出引脚。这时的引脚输出状态由比较器的输出模式,CCER相应位的值,以及OSSI位的值决定。还有一种情况是,DBTR->OSSR为1时,PWM信号已经输出(电机已经启动),这时MOE由1变0(等同输入刹车信号),这时先输出一个死区时间,在死区时间的电平为GPIO配置,然后各输出引脚电平等同CR2的OSIx,OSIxN位的设置。 2.在MOE=1时,pwm输出连至输出引脚,CCRM1和CCRM2中的OCMx[2:0]设定四种输出模式(强制高,强制低,PWM模式1,PWM模式2),CCER中的CCxP,CCxNP设定每一相中上下开关管的驱动输出极性。CCxE,CCxNE为输出允许位,设1接到定时器输出,设0为GPIO设定的状态。如果DBTR->OSSI位为1时,当CCxE,CCxNE为0时,引脚输出为“低电平”经过CCxP,CCxNP相位选择后的电平。OSSI在一般情况下设为0。例如:需要在A相的上开关管输出PWM,C相的下开关管导通,各输出寄存器配置: CCMR1=0x0060,CCMR2=0x0040,CCER=0X0401.接着MOE位置1。
3.三相同时换相,使能换相预装载位(设定CR2->CCPC位为1),然后预先设定好下相的输出信号。在要换相时,设EGR->COMG位为1,三相导通状态可按预先设定的同时转换。
|