Thread 中讨论的其他器件:controlSUITE
工具/软件:Code Composer Studio
我正在尝试从安装在 PMSM 上的位置编码器计算速度。 我能够成功获得位置(以度为单位)。 我尝试执行速度=(new_position - old_position)/delta_t、但我在 DAC 中绘制结果、我在这两者之间得到随机的大峰值。 我无法确定问题是什么。
P.S. 我每400us 就会获得位置(与 PWM ISR 同步)、但速度功能仅以10ms 的间隔执行。
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.
工具/软件:Code Composer Studio
我正在尝试从安装在 PMSM 上的位置编码器计算速度。 我能够成功获得位置(以度为单位)。 我尝试执行速度=(new_position - old_position)/delta_t、但我在 DAC 中绘制结果、我在这两者之间得到随机的大峰值。 我无法确定问题是什么。
P.S. 我每400us 就会获得位置(与 PWM ISR 同步)、但速度功能仅以10ms 的间隔执行。
感谢您的回答。
实际上、我没有使用处理器的 QEP 模块来获取位置。 我使用的绝对编码器提供0-1023 (二进制)输出、即10位、我稍后将其转换为以度(或弧度)为单位的位置(因此、0对应于0度、1023对应于360度)。
现在、我只关注顺时针旋转的速度。 我无法使用滤波器、因为这会在反馈中引入延迟(我的项目是 PMSM 的闭环矢量控制)。 下面是随附的代码:
void get_speed (void)(空)
{
如果(theta_prev > theta_deg)/1旋转完成
{
speed1 =(theta_deg + 1023 - theta_prev)/speed_TS;
}
其他
{
speed1 =(theta_deg - theta_prev)/speed_TS;
}
Theta_prev = theta_deg;
速度= speed1*0.3515*(60.0/360);//in rpm
AD7305_CH_A =(int)(speed_255.255.0/500); //标准化- DAC 最大值对应于500rpm
}
此处1023相当于360度、因此1位变化对应于0.3515度变化。