我在外网发了这个帖子 大家感兴趣可以一起看下
Susan Yang:我在您的微信公众号上也看到了这个文章,谢谢分享!
我在外网发了这个帖子 大家感兴趣可以一起看下
user78960159:
回复 Susan Yang:
感谢您的关注
这个问题可能会使初次调试HVBLDC的人感到困惑,加之还要理解驱动库的工作方式,可能会耗费比较多的时间,希望写在这里对大家有所帮助。
对于这条语句pwm1.DutyFunc =(int16)_IQtoIQ15(pid1_idc.Out);
当控制饱和时,pwm1.DutyFunc的值将会是-32768,导致后续占空比计算错误;调试时可能想到会是强制类型转换的问题,但是由于pwm1.DutyFunc的数据类型是int16,所以即便去掉(int16)问题依然如故;pid1_idc.Out在控制器饱和时的数值哪怕是16,777,215(比2的24次方)小1,代码的执行就不会有问题。
这条语句本身很简单,应该不会有人怀疑标准库函数_IQtoIQ15,它的执行也确实没问题;对于熟悉C的人来讲这样的数据转换错误不难被发现。
一个数据转换语句的问题,导致霍尔闭环后电机转速一旦归0,电机就再也无法启动了,想想看还是个挺有意思的现象