MC33035在直流无刷电机控制系统中的应用
作者:王陆林,刘贵如1 MC33035功能介绍 MC33035是安森美公司推出的第二代无刷直流电机控制专用集成电路,主要组成部分包括转子位置传感器译码电路、带温度补偿的内部基准电源、频率可设定的锯齿波振荡器、误差放大器、脉宽调制(PWM)比较器、输出驱动电路、欠压封锁保护、芯片过热保护等故障输出电路和限流电路等。MC33035的典型控制功能包括PWM速度控制、使能控制(启动或停止)、正反转控制、相位选择和制动控制等。 芯片功能引脚定义如表1所列。 SA、SB、SC为霍尔信号输入端,内部上拉20 kΩ电阻,外接霍尔传感器即可。Fwd/Rew、Brake、Output Enable和60°/120°Select分别为方向、制动、使能和霍尔相位控制端口,内部上拉40 kΩ电阻,MCU控制端只要通过光耦或者三极管开漏接地即可进行控制。 如果不采用IC内置的硬件速度环,则将PIN12、13短接,通过PIN11端口输入PWM即可对电机进行调节控制。如果采用IC内置的硬件速度环则将PIN12、13通过R、C连接,通过PIN11端口输入PWM进行电机控制,HALL换向反馈信号通过PIN12端口输入。2 基于MC33035的直流无刷电机控制驱动电路设计 在本设计中主控制器以Freescale公司的基于PowerPC构架的32位处理器MPC5604P为例,MPC5604P控制端口通过比较器和MC33035接口,设计了基于MC33035直流无刷电机控制驱动电路。 传统的直流无刷电机控制驱动电路采用MPC5604P、预驱动IC和MOSFET实现,其中包括电压泵即自举电路。本设计是基于直流无刷电机控制芯片MC33035实现的,MC33035实现预驱动和电子自动换向功能,采用MC33035实现直流无刷电机的控制驱动电路,既简化了电路设计,同时也减轻了MPC5604P的运算量。MPC5604P和MC33035之间通过光耦或者比较器实现电平转换。本设计采用LM339比较器开漏输出实现MPC5604P对MC33035的开关控制,电路设计原理包括4部分。其中基于MC33035的直流无刷电机驱动控制电路原理图。电流采集芯片AD8210可使反馈的电流模拟信号直接输入MPC5604P的A/D引脚,其中R2为3 W/5 mΩ的电流采样电阻,R1和C1组成了MC33035的外部时钟输入电路。可以通过调节R和C的值来设定RC振荡器频率。MC33035的Reternce Output提供约6.25 V的输出电压,可以为霍尔传感器供电。SA、SB、SC为霍尔输入信号,内部已经连接20 kΩ上拉电阻,所以只需外接霍尔传感器即可。电平转换电路。一路霍尔信号HALL_A经过比较器LM339转换为0~5 V的脉冲信号到MPC5604P,用于电机故障自检和电机转速计算;另外,MC33035的方向和使能控制端由MPC5604P通过比较器LM339进行隔离和控制。DIRMCU和ENABLEMCU的I/O输出电平与4.5 V的参考电平比较,实现对MC33035的DIR和ENABLE端口的开漏控制。 MC33035、LM339、ADS210YRZ和MPC5604P的连接电路。MPC5604P通过PWM输出控制MC33035下背管控制端占空比,从而实现对电机的转速和输出扭矩的控制。MPC5604P通过28引脚A/D端口输入的电流反馈信号计算电机实际电流,进而和目标电流比较实现电流环的PI调节。3 基于M033035的电机驱动控制程序设计 本设计使用了MPC5604P的4个信号引脚,开发和编译环境为CodeWarrior for MPC55xx V2.3,涮试下载工具为USB PowerPC Nexus Mul tilink调试器。3.1 控制引脚初始化 ENABLE_MCU和DIR_MCU控制引脚的初始化,通过配置SIU.PCR[5]、SIU.PCR[9]寄存器将PIN8、PIN94引脚配置为I/O输出引脚,即SI U.PCR[5].R=0x0202和SIU.PCR[9].R=0x0202。通过赋值操作SIU.GPDO[5].R=0/1和SIU.GPDO[9].R=0/1,即可使对应的控制引脚输出高/低电平。3.2 PWM初始化配置 PWM输出引脚的初始化配置,第一步通过配置PSMI寄存器将flexpwm0 A[0]分配到PIN53引脚,配置如下: SIU.PSMI[20].B.PADSEL=1; 第二步通过SIU.PCR寄存器的配置将PINS3多功能引脚配置为PWM输出,配置如下: SIU.PCR[58].R=0x0600;//PIN53引脚的交互模式1 FL 下面为flexpwmx模块的初始化: 通过调用函数FlexPWM_Init(0)即可将本设计中使用的flexpwm0模块初始化。接下来使能PWMA,B输出配
置如下: 在控制程序中通过以下函数调用、配置数据重载、PWM输出和MC33035使能即可按设定的方向和占空比驱动电机。 3.3 A/D初始化 首先通过SIU.PCR[33].R=0x2400操作将PIN28引脚配置为A/D输入引脚,通过AD8210输出的模拟信号CURRENT间接算出通过电机的电流。本设计中使用了MPC5604P片内ADC0模块的AN[2]通道,初始化配置如下: 在本设计中通过ADC1的1路硬件监控电路对每次A/D采集的值和预先设置的值进行比较,当采集的值超出通过ADC_0.THRHLR0.R设定的上下限时将产生中断,通过中断服务程序将MOTOR_CON输出低电平使驱动IC进入Sleep模式即可实现过流保护。初始化和中断服务函数注册如下: 在SIR服务函数中,通过“SIU.GPDO[44].R=0”语句即可关闭驱动IC。接下来通过发送A/D通道转换命令并查询状态标志位,当转换完毕即可通过读取ADC_0.CDR[0].B.CDATA寄存器得到采集的电压值,并通过公式IL=Vout/20/R15计算得到通过电机的电流,从而实现电机的电流闭环控制。 3.4 eTimer的初始化 首先进行赋值操作SIU.PSMI[8].R=0和SIU.PCR[44].R=0x0900;将eTimer0 ECT[5]分配到PIN56引脚,并配置为eTimer输入功能。然后将eTimer0 ECT[5]初始化为输入计数功能,分别为周期法和频率法并配合PIT定时计数器实现电机转速的计算和自检。 频率法计数初始化代码如下: 频率法计数需要借助于PIT定时器,通过在设定时间内读取脉冲数计算电机转速。该方法适用于电机空载时电机转速计算。周期法计数初始化代码如下: 其中周期法对应计数通道中断初始化代码如下: INTC_InstallINTCInterruptHandler(ISR_Pulse_Count,162,6); 当一个脉冲周期中断发生时读取脉冲周期定时器计数值即可计算出电机转速。该方法适用于电机负载时电机转速计算。结语 本文介绍了基于MC33035的直流无刷电机控制驱动电路典型设计,外同电路少,无需采用单片机实现电机换向,既简化了电路设计、又减轻了MPC5604P运算负担,也不需要预驱动电路和电压泵自举电路。该电路具有设计简单、控制方便等优点而得到广泛应用。