1、前言
永磁同步电机(PMSM)位置、速度、电流三闭环矢量控制(FOC)软件(以下简称“软件”)是为学习矢量控制算法而编写的,针对的是永磁同步电机,BLDC也可用,但是淘宝上面的电机大多数都是BLDC,传感器都是霍尔的(如果BLDC用FOC控制的话,扭矩是要比方波六步换相稍微低一些,但是声音会小很多而且扭矩平稳,所以我最喜欢玩霍尔BLDC的FOC控制),PMSM要比BLDC贵一些,理论上ABZ编码器foc最简单,hall_foc次之,无感foc转起来简单,控制得好比较难,当确认硬件板子没问题后,所有的电机控制都是参数问题了(建议一边学foc,一边理解这些参数)。
我有一套驱控(双驱,还顺便放了一个有刷控制接口和舵机控制接口)准备有偿提供,它既可以ABZ编码器控制,也可以BLDC方波控制,又可以BLDC霍尔FOC控制,又可以无感FOC控制 ,整套硬件采用模块化设计,驱控分离,预留多个冗余接口,单个驱动12个大mos管(单个 85V 160A),带有定时器BKE刹车和泄放电阻,最大可以支持功率为2KW的电机稳定运行(如果功率差距太大,采样电阻最好改一下),如果你不想管FOC的底层原理,只要求拿来就可调可用还有人指导,那这个再合适不过了,如果需要的朋友可以私信我,看最近是否有时间,本人有点考虑提供一对一的代码梳理服务。
首先说明,出此教程的目的,是为了让广大初学者可以挣脱淘宝CSDN海量教程的毒害,因为经常看到一些初学者搞了一堆资料,学了大半年,结果连程序都看不懂,实践的时候最多也就是按照教程接好线,通电看电机转一转,浪费的大量的时间和金钱,很多细节问题不清楚,没有解决问题的能力。
所以,我想以一套完整的、成熟的PMSM的FOC控制方案为例,从各个方面详细讲解了FOC的原理、实现方法等知识,几乎是逐条的分析了程序,又兼顾程序的系统层面,目的是让初学者看完我的资料,可以对FOC控制有一个类似游戏里面的“大地图”的概念,能达到这个目的,我就很满足了。知识是个触类旁通的东西,相信大家学完这个FOC算法后,肯定会对电机控制有一个更深的认识,其实也就是那么回事儿。
2、软件功能设计
软件通过RS422总线与上位机实时通讯交互,在主循环中采用查询的方式接收上位机发送的系统工作模式、伺服指令,并将系统相关状态监测量实时反馈给上位机;为了保障系统安全,软件对输入指令进行了限幅,避免指令超限。
2.1功能
软件的具体功能及实现需求如下:
a)在控制电源上电后,完成各功能模块初始化;
b)通过串口与上位机通讯。通过查询方式接收上位机数据,并进行解析;
c)利用TI最新的SVPWM算法,产生占空比,驱动功率板;
d)通过DSP内部自带ADC采集母线电压信号、相电流信号;
e)完成位置闭环、速度闭环、电流闭环调节;
f)系统状态监测、故障诊断与处理(工业应用中故障诊断、系统检测是很复杂的,为了突出本教程重点,故程序仅保留过压、欠压、过流保护功能);
控制软件全部功能描述见表1和表2所示 。
序号 |
功能名称 |
说明 |
1 |
初始化功能 |
控制电源上电后对DSP相关硬件配置及变量进行初始化 |
2 |
SCI通信功能 |
与上位机通过RS422串口线进行实时通信 |
3 |
定时器功能 |
通过配置EPWM1获取125us周期定时,通过分频获取250us、1ms、10ms等周期定时 |
4 |
位置、速度、电流闭闭调节 |
完成电机位置闭环、速度闭环、电流的闭环调节 |
5 |
状态监测与故障诊断 |
对系统工作状态,故障状态实时监测 |
表2 软件性能描述
序号 |
性能名称 |
说明 |
1 |
串口数据发送周期 |
通过串口向上位机发送数据的周期为1ms。 |
2 |
脉宽调制信号 |
PWM波载波频率为8kHz,死区时间为2us |
3 |
MainPwmISR()中断程序执行时间 |
中断执行一次时间不能超过总中断时间的80%,即不超过100us。 |
2.2主要接口
与FOC控制软件相关的硬件接口,包括RS422串口,片内ADC,外设I/O,数字I/O等,连接关系见图1。
2.3安全性
a)所有中断服务程序严格禁止嵌套,软件中仅启动一个中断;
b)软件设计时要注意避免潜在的死循环。在软件模块设计过程中,不允许出现无法跳出的情况;
c)不使用的中断源要进行屏蔽,屏蔽措施包括设置中断屏蔽寄存器和编写空中断返回处理语句;
- 对采集到的信号应进行适当滤波处理,防止异常值影响软件性能。
3、软件结构设计
3.1 软件平台
软件运行的硬件平台资源:
- 处理器:TMS320F28335,晶振频率30MHz,工作主频150MHz;
- 存储器:TMS320F28335内部资源模块寄存器,片内18K×16位SARAM存储器,64K×16位Flash存储器;
- 中断源:PWM1中断,8kHz;
软件的构成如图2所示。
图2 软件结构图
3.2 各模块功能介绍
(1)系统初始化模块
名称:系统初始化模块
标识符:InitDevice(DSP28_PLLCR,DSP28_DIVSEL);
功能:配置看门狗电路,配置系统时钟,打开ePWM、SCI、SPI、ADC等用到的硬件资源的时钟信号,关闭不用的硬件的时钟信号。这个是标准的模块,用户不用自己编写,复制来按自己的需求配置即可。
(2)参数初始化模块
名称:参数初始化模块
标识符:ParaInit();
功能:软件第一次被调用时,初始化用于闭环的主要控制参数。调节PID的参数时,就是在这个函数里进行更改的。
(3)定时器模块
名称:定时器定时模块
标识符:void SchTimer(void)
功能:设置成125us-500ms多种计时器,作为流程分配的时间基准,注意定时器的时间基准是PWM的中断周期,而不是用的常规的定时器;
(4)与上位机数据交换和通讯模块
名称:串口通讯模块
标识符:void Communication()
功能:使用RS422串口与上位机进行数据交互,对接收到的数据包进行解析,同时对发送的数据包进行编码,以实现消息互通。
(5)指示灯模块
名称:指示灯模块
标识符:LED
功能:系统正常运行时,指示灯每500ms翻转一次。
(6)片内AD采集处理模块
名称:信号采集处理模块
标识符:DriverDspAdcInit()
功能:通过DSP内部自带ADC采集1路母线电压信号、2路相电流信号。
3.3 执行方案
DSP上电后,软件执行初始化模块的初始化功能。在使能中断后,软件在中断中执行数据采集、闭环控制、PWM信号输出。软件执行流程如图4所示。