This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于motorware例程中电机参数实时更新的问题

Other Parts Discussed in Thread: MOTORWARE

motorware 所有例程里面主循环中都会执行这样一个更新全局变量的函数,以lab5b为例,如下:

其中Rr_Ohm  Rs_Ohm  Lsd_H  Lsq_H Flux_VpHz,分别为转子电阻,定子电阻,d轴电感, q轴电感,额定磁通量,根据上图的程序可知,这些变量都是由观测器函数得到的。但是在user.h中,这些电机参数都是作为常量存储的。

我的疑问如下:

1.如果电机的这些参数如上图函数一样作为变量并通过观测器函数实时更新的话,就不需要在user.h中存储这些电机参数了。反过来,如果user.h中有这些电机参数,又何必要在这里通过观测器函数实时更新电机参数?

 2.我在运行lab5b时,发现Rs_Ohm 定子电阻 ,Lsd_H 直轴电感 ,Lsq_H 交轴电感,这几个全局变量值竟然和user.h中设定的定子电阻、直轴电感、交轴电感的值是一样的,那我的问题是 Rr_Ohm  Rs_Ohm  Lsd_H  Lsq_H Flux_VpHz 这几个全局变量的值到底是等于观测器实时检测到的值还是头文件中的值?

 3.我又做了实验,当我改变user.h的值时,并且把这些值改的明显不正确时,Rs_OhmLsd_HLsq_H这些全局变量也会跟随user.h中的值一起改变,而且电机依然能够正常启动和运行,非常不可思议,求解!

  • 此处的这段代码确实是回采观测器所使用的电机参数,而观测器所使用的电机参数有两种来源:

    1,用户在user.h中设定的参数。这样此处回采的大部分参数自然会是和user.h中的参数一模一样,除了Rs. 和 Flux。因为这两个参数会在每次电机运行阶段再次由算法估算更新(如果把相应的估算使能的话,如 RsCaliberation enable),所以这种情况下回采参数可以理解为让用户确认验证估算器所使用的参数确实是客户希望的。自己自行更新的参数为何值;

    2,用户进入参数辨识模式,算法自动辨识电机参数,那么这些回采值就向客户现实算法辨识的参数结果。

    我理解到您的问题是不是将InstaSpin的参数辨识理解为在线辨识了,也就是在电机正常运转的过程用即控制了电机也在做参数辨识。

    其实InstaSpin只有几个参数可以在线辨识,如上面提到的Rs和Flux,其他参数都需要专门进入辨识模式才能辨识。所以,是一种离线辨识算法。

    当不进入辨识模式,而进入正常运行模式时,观测器是不进行参数识别的,直接用user.h中的电机参数进行角度速度估算。

  • 我现在想做的是将lab2a和lab5b整合在一起,即lab2a运行以后,得到的参数怎样自动写入user.h中,然后可以直接启动lab5b的程序进行电机的控制。我这里已经有eeprom,我是把user.h直接复制到eeprom里面去吗?还是应该怎么做啊?

  • 您应该清楚,C语言中.h文件的内容是以宏的形式出现,在编译时直接用宏内容替代宏名字才与编译的,所以在实际执行中是无法在线修改.h中的内容并使之生效的。

    如果希望在线的修改电机参数,需要调用相应的函数接口。

    你可以查找user.h中电机参数的宏赋值到哪些变量中,这些变量又是被那些函数接口调用赋值给估算器的,直接调用估算器参数设置函数接口,可以直接修改估算器使用的电机参数。

    估算器相关的函数接口都是以“EST_xxxxx()” 为开头的相关函数,可以去est.h中查找,都在里面。

  • 请问一下老师 应该怎么做才能依靠他自己的识别函数而不是user.h ?是打开Flag_MotorIdentified吗?因为我使用了Flag_enableRsRecal后Rs值好像还是差不多的