1、使用的电机dmclib中的PID_GRANDO_CONTORLLER结构体函数时,程序中使用到控制两路电机,均使用双闭环控制(电流环和速度环),发现其中一个电流环计算结果完全错误(限幅为-1.0~2.0之间),计算结果却得到7.8,并且结构体中的常数c1、c2,初始化时将其置为0,在实时调试时却发现c1、c2的值都变成7.8,不知道有没有高手遇到过?
2、程序中使用c28x_fixedpoint_dsp_library_fpu32.lib库中的FIR16滤波函数进行滤波,定义两个滤波结构体和参数数组,在对同一个波形数据同时进行滤波运算时,其中的一路计算结果不正常。(注:两个结构体、数组均是双份的,所有的东西均相同,输入也完全相同。如果都单路进行运算,所得的结果一致)
Victor Zheng:
您好
这个函数在.h文件中有用宏定义写的源码。你可以直接定义一个函数用源码调试一下。
你定义两个个256的输入数组A和数组B。你是先初始化把数组A的256个都算完,再初始化,然后再计算数组B。的吗?
1、使用的电机dmclib中的PID_GRANDO_CONTORLLER结构体函数时,程序中使用到控制两路电机,均使用双闭环控制(电流环和速度环),发现其中一个电流环计算结果完全错误(限幅为-1.0~2.0之间),计算结果却得到7.8,并且结构体中的常数c1、c2,初始化时将其置为0,在实时调试时却发现c1、c2的值都变成7.8,不知道有没有高手遇到过?
2、程序中使用c28x_fixedpoint_dsp_library_fpu32.lib库中的FIR16滤波函数进行滤波,定义两个滤波结构体和参数数组,在对同一个波形数据同时进行滤波运算时,其中的一路计算结果不正常。(注:两个结构体、数组均是双份的,所有的东西均相同,输入也完全相同。如果都单路进行运算,所得的结果一致)
kai li1:
回复 Victor Zheng:
您好!
1、我们用的就是那个源代码,我们的程序中有6个PID,分为两组,每组3个,用的就是.h中的宏定义。程序暂时只用到4个PID,但是6个PID结构体在程序头都有定义声明(全局变量)。在调试过程中,两组中4个PID都进行计算时,查看这结构体内容时,有一个PID计算结果不对(结构体内部的值都相同)。如果将两组中的PID声明顺序进行调换,结果就可以计算正确。
2、我们关于这个函数的用法和上面PID用法是一样的,就相当于有两个FIR函数,所用的到的数组和变量都是在程序头(全局变量)定义了两套A、B(分别独立),用他们对同一个波形进行滤波处理,当程序进行计算时,先用A计算,然后用B计算,先计算的结果(A的结果)是对的,后计算的结果(B结果)错了。计算的输入都是相同的。