DSP代码生成——异步电机每隔固定圈数会抖动一下、转速与转矩电流一起变大、失控

本文详细探讨了在矢量控制实验中,异步电机出现每隔固定圈数抖动的问题,问题根源在于转速计算时的数据溢出。通过分析QEP中断服务函数和磁链角度计算模块的执行顺序,揭示了datastorememory模块可能导致的保护机制失效。此外,还讨论了转速与转矩电流同时增大的异常现象,其由转速方向选择错误导致,错误修正后反而加剧问题,进一步解释了转速环和电流环的反馈机制。
摘要由CSDN通过智能技术生成

异步电机每隔固定圈数会抖动一下

做实验的时候(跑矢量控制)发现,异步电机每隔固定圈数会抖动一下,但是程序什么的都是对的。

刚好我保存了之前的版本(会抖动的版本)。

会抖动的版本,转速的代码生成程序是这样子的(如下图):

不会抖动的版本(对的,这个问题我已经解决了,只是在这里记录一下)是这样的(如下):

大体上相同是吧,没错,这两张图基本一样,只是将tmpg(data store memory)这个模块省略了,直接用线连接,然后问题就解决了。

可以看一下原来有问题的时候,tmpg、qposcnt、qdf这几个信号是什么样子的吧(如下图,不要看图上红色的字,不对的):

第一个是qposcnt信号、第二个是tmpg信号(tmpg=qposcnt(k)-qposcnt(k-1))、第三个是qdf信号。

第一个波形图是我将计数器最大值设置成了80000,并且是达到最大值复位模式,所以,在每次达到最大值复位的时候,如果不在程序中做保护,就会出现qposcnt(k)=100、qposcnt(k-1)=79000(数字随便给的,大致是这么个意思)这样的情况,导致tmpg为-70000多,这个时候去算转速肯定是算不准的,所以,我有保护的,就是这个部分(如下图):

qposcnt这个值总会加到最大值然后复位,所以这个保护部分的意思就是:

你正转的时候,这个时候如果tmpg的值如果不大于-70000(出现了达到最大值然后复位的情况,正常情况不可能不大于-70000),就给它补充一个80000。同理,你反转(qdf是0还是1你自己可以选,这个无所谓的)的时候,如果tmpg的值如果大于70000,就给它减去一个80000。很清楚叭,不清楚多看看。至于为什么要用70000,你用个75000也行。

回到前面那个问题,我之前的版本也是这样写的,只不过用的是data store memory模块,不是直接连线,为什么就会出现好像是保护没做好的这种情况呢。

我可能和data store memory模块有read和write两个部分有关,

大概是程序执行的时候先执行了磁链角度计算模块(在PWM中断里面),且在执行这个模块之前,QEP中断服务函数中的转速计算函数已经执行到算出tmpg了但是还没执行到保护这一块,所以就将没有被保护过的tmpg数值用去计算磁链角度,所以表现出来的样子就是电机每隔10圈左右会抽动一下。


然后还有一个问题:

转速与转矩电流一起变大

这个问题之前还有一个小问题是:程序一启动,电机就失控(这个问题的原因有太多种了,大多都和相序、正反转等有关系)

这里就是我将qdf这个东西正方向选反了,导致,我给它100rpm的转速指令,它也按照转速环的设定给了一个正的isq给定值,按照电流环的设定给了一个正的usq给定值,按道理这个时候,SVP算出IGBT的通断时间,执行之后就会让转速增加。

但是由于我正方向选反了,导致这个时候算出来的rpm值是朝着反方向增大的(负值),这个情况被转速环和电流环看见了,这还得了? 转速环和电流环直接加大转矩电流和转矩电压的输出,试图挽回反方向远走的rpm,但是越挽回走的越快。

这个时候我发现了这个现象,但是没察觉到是正方向选择错了的缘故造成的,我以为,既然rpm是负的,我将rpm的系数(speed_base)也变成负的不就挽回rpm(使rpm为正)了吗,但是我做了之后就出现了:转速与转矩电流一起变大这个问题。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值