电机控制程序中的RAMPGEN和RMPCNTL模块的作用
一, 这个程序是个开环控制,输入量主要有3个,定子电流的d,q轴以及速度给定量speedref,这3个量实质是通过一个电流ipark变换模块联系起来的,为什么这样说呢?
因为派克变换不但需要d,q轴的分量,同时也需要旋转坐标轴的实时角度theta,而Theta角在闭环的时候可以通过观测器或者传感器得到,但是在开环的条件下,这个角度又有他另外的作用和意义了,那就是要配合你的速度给定量,把你的速度给定量转化成的实时角度。
其实道理也不复杂,角速度和角度之间的转换无非是一个比例和累加的关系,那就是拿你的当前角度加上采样周期内角度的增量,而对于恒给定的系统来说也是个常量,这个常量就是采样周期乘上速度。
二, 下面说说子程序rmp_cntl.c的主要作用,该程序实际上是一个用阶梯波模拟正弦波的函数发生器,为什么要产生这个信号呢,这个信号的作用是什么呢?
我个人认为:这个阶梯波的发生器产生的是系统的输入信号,确切的说是速度给定信号,为什么要用这么一个波做为速度给定信号呢?不是已经给定了一个speedref了么?
我的理解是这样的:如果你仅仅把speedref作为给定而不做任何处理,那么这个程序就是一个开环调速的应用程序了,而本程序的作者的目的不是做一个一般的应用程序,而是一个测试程序,什么是测试程序呢,测试程序就要制造出各种输入信号而看看咱们设计的系统会有怎么样的表现,因此这个测试程序就要加上测试信号,测试信号的种类有很多,在电机控制系统中比较常见的就是正弦信号,通过给系统加上一个正弦信号,看看输出信号的幅度和相位会不会失真。(对于线形系统,这个输出信号也是三角函数波)
而我们给定的speedref在这时就变成了TargetValue,也就是阶梯波的最值.
三, 最后,着重说下子程序rampgen.c。这个程序就是个斜坡函数生成器,角度的作为输出实际上是一个斜坡信号,当你的角度增大到360度的时候又要从0开始循环,而不是从361度再继续,因为计算机的三角函数系统只有这360以内的数,就算查表也是这样的情况,不然要占用多大空间才足够呢!
下面的问题是,我每个中断周期斜坡信号要增大多少呢?这主要由3个因素决定:
1,给定的速度,本测试程序的速度是由rmp_cntl.c给的阶梯波信号;
2,中断周期的时间;
3,电机的基准频率:这个频率一般就是调速的上限了,再增大就要弱磁了。
后两个因素不是很直接,也没有很严格的数量关系,但是这个程序的作者为了让该程序能适应不同的电机和硬件,把这两个因素考虑了进来,如果别人想用其他型号的电机,只需要在某些头文件或者主程序里修改这些参数就不必在修改其他程序里相关的量了。
在该程序内,后两个量的乘积实际上就是系数StepAngleMax。他影响了斜坡信号在一个中断周期内增大的幅度。
|