我想用pid算法控制电机,我这里编码器用外部中断记录脉冲数,测速用定时中断(进中断后记录脉冲数)把这个脉冲数当成速度,带到pid里面,然后返回值给占空比,这里面有什么问题吗?我的电机现在不转了,不知道哪里出了问题,求指导
现在的情况是不加Pid函数,电机就转,我那个测速也正常(先不考虑,外部中断的信号毛刺,和测速公式,因为我的就是简单地用脉冲数除了1ms当速度了,没去考虑编码器那个比例)。
总之就是我的速度是粗测出来的,然后后面有的问题,我实在想不出来了,求帮助
参考GPT和自己的思路:
根据你提供的信息,我能找到一些潜在的问题。
首先,你需要确保你的pid算法实现正确。同时,你也需要检查你的定时中断是否按照你的期望进行。另一个需要考虑的问题是,电机驱动电路是否正确连接。最后,你还需要检查编码器的输出是否正确。
为了更好地排查问题,你可以通过以下方式进行调试:
1.检查你的pid算法中是否有错误。你可以手动设置一个固定的占空比,看看电机是否会启动。
2.检查你的定时中断是否正常工作。你可以打开示波器,查看定时器触发的时间是否正确。
3.检查电机驱动电路。确保电机的电源和控制信号都正确连接。
4.检查编码器的输出是否正确。你可以手动旋转电机,观察编码器的输出是否符合你的期望。
希望以上信息对你有所帮助,并能解决你的问题。
该回答引用GPTᴼᴾᴱᴺᴬᴵ
你的算法流程基本上是正确的,使用编码器记录脉冲数作为位置反馈,使用定时器记录时间并计算速度,将速度作为PID控制的反馈信号,最后通过计算输出占空比来控制电机转速。但是,这里有几个可能导致电机不转的问题:
PID控制参数的选择。你需要根据实际情况调整PID参数,以确保控制器的稳定性和响应速度。如果参数设置不当,可能会导致电机无法启动或无法跟踪设定的速度。
PWM输出的频率和占空比。你需要确定适当的PWM输出频率和占空比,以确保电机能够正常工作。如果PWM频率太低,电机可能会出现噪声或震动,而如果占空比太低,则电机可能无法启动。
编码器的接线和工作原理。你需要确保编码器的输出信号正确连接到MCU的外部中断输入引脚,同时了解编码器的工作原理,以便正确地解码脉冲信号。
定时器的设置。你需要正确设置定时器的时钟源、计数模式和分频系数,以确保可以准确地测量速度。如果定时器设置不当,可能会导致速度测量出现误差。
在诊断问题时,你可以逐一检查上述因素,看看哪些可能是导致电机不转的原因。另外,你可以使用调试器来跟踪代码执行,以确定哪个部分出现了问题。