当前位置:编程学习 > VB >>

求大神教我VB,反馈控制,并进行补偿纠正


我打算控制一个电机的位置,但反馈补偿部分我不太会,求大神指导
我的要求是:我给电机设定一个值a,但电机运行后,我用传感器检测为b(a不等于b),由于存在偏差,我希望通过程序就行纠正,知道电机运行的值等于设定值a --------------------编程问答-------------------- ctrl<------->motor
a0------------>|
|<----------- b0
a1 = a0-b0---> |
|<----------- b1                  
a2=a1-b1-----> |

一般反馈控制,大概就是这个样子。

多退少补而已。

  --------------------编程问答-------------------- 谢谢,whales大神,如果能用VB表现出来就更好了 --------------------编程问答-------------------- 楼主想要表达的意思是,给电机10000个脉冲,理论上电机应该运动到A点停止,但是,由于步进电机运动存在脉冲丢失的情况,所以,通常情况下,10000个脉冲,电机只能运行到B点(B点比A点距起始点近)。是否是这个意思?
如果是这个意思,最好的办法就是在电机的转轴上加一个编码器,用它来检测脉冲数,也就是说,电机转一圈如果必须1000个脉冲的话,编码器就肯定计数为1000,但发出的控制脉冲肯定是大于等于1000的。
从设计思路上说,你的这个问题应该不是程序的问题,而是电气设计的问题,增加一个检测回馈装置,问题将很容易坚决。 --------------------编程问答-------------------- 具体的办法就是给电机发送一个很大的驱动脉冲,使电机运动,用编码器计数电机运动过程中实际有效的脉冲数,当脉冲数到达想要控制的脉冲数后(也就是电机运动到了要到的位置),立马停止给电机发送的驱动脉冲。 --------------------编程问答-------------------- @贝隆 :
1、对于你说到的这个问题,电机的检测一般是用Timer循环扫描的,为了能实时显示(看的清楚),一般时间比较长,如果电机转速高的话,会超过设定值的。
2、我的其实是想做成类似于数控机床那样的设备,电机这边有500线的编码器,精度可以满足,但是那个负载由于传动齿轮间隙什么的,不一定在电机达到位置时,能够达到想要的位置。所以才需要进行那种反馈的 --------------------编程问答-------------------- 这种事情通常由下位机来做的,上位机通常把任务或阶段性任务传给下位机后,就不用管控制那一块了,最多做个状态回显,实时采集与精度控制该由下位机来做,这样才能保证精度。 --------------------编程问答-------------------- 以我的经验来看,楼主的想法是无法实现的。通常控制电机都是用脉冲输出办卡或这PLC模块来控制。至于编码器的读数也是如此。PC想要跟上这个速度,是不现实的。 --------------------编程问答-------------------- @贝隆
电机是私服电机,有私服驱动器作为下位机,进行驱动控制。我用VB主要是检测外部负载的位置,根据外部负载的实际位置和设置位置的差值来继续控制电机运行。把上一步的差值加到下一次的电机运行中 --------------------编程问答-------------------- 这都是自动化控制的设计问题. 跟VB有啥关系?
关键是你自己得了解这个闭环控制的逻辑流程, 至于反馈补偿量, 可以慢慢调节.直到合适为止. --------------------编程问答-------------------- 楼主的这些问题都是伺服电机完成的,对于上位机而言,也就是发一个命令,告诉脉冲输出单元(或者模块,或者板卡)发脉冲和控制信号就是。说白了,上位机的工作原理是不可能实现你的要求。建议楼主可以了解以下伺服电机的工作原理,你只要明白了伺服电机的工作原理,我想你的问题就不是问题了。
此外伺服电机驱动器本来就是带有脉冲信号回馈的,我前面所说的编码器就不需要了。现在的伺服电机做得很强大,这些功能都是很基本的功能。原理也是很简单的。

还有一种方法,如果你的电机每次都是运动到同一个指定位置停止,那么建议你在这个位置安装一个光电开关用于定位,每次当电机运行到这个位置就停止发脉冲即可,就不需要脉冲回馈补偿什么的了。 --------------------编程问答--------------------
引用 10 楼 Veron_04 的回复:
还有一种方法,如果你的电机每次都是运动到同一个指定位置停止,那么建议你在这个位置安装一个光电开关用于定位,每次当电机运行到这个位置就停止发脉冲即可,就不需要脉冲回馈补偿什么的了。

+1 --------------------编程问答-------------------- @妞妞他爹
这个问题有见解,谢谢哈 --------------------编程问答-------------------- @贝隆 人类
有机会给你们讲讲数控机床的知识。光电开关就是一个继电器而已,它只是切断电源,高度电机就算切断电源,在大的转动惯量下还是会运行一会儿的。不是立马就停的。
感谢你们为我提供的建议,谢谢哈 --------------------编程问答-------------------- 数控机床不单是什么软件或电子电路的问题,还有机械问题,还有,如果要加光电开关,肯定要在机械设计上考虑过缓冲速度放在合适的位置,不是乱放的。而且,在处理电机停转的过程中,不是停止供电就完事的,而是要进行反转或电磁拉紧的操作。这样才会减少缓冲造成的问题。所以,这种问题不是单纯从软件考虑的,还要冲电子、机械进行整体设计的。当然,如果你没有条件在硬件上加刹车系统,就只有靠软件来解决这种误差,不过相对来说,精度总是不够的。 --------------------编程问答--------------------
引用 13 楼 u011546874 的回复:
@贝隆 人类
有机会给你们讲讲数控机床的知识。光电开关就是一个继电器而已,它只是切断电源,高度电机就算切断电源,在大的转动惯量下还是会运行一会儿的。不是立马就停的。
感谢你们为我提供的建议,谢谢哈

光电开关,不是继电器,准确的说它是一个提供DI信号的器件。此外就你说的电机转动惯性的问题,这其实很容易解决,而且在实际的工作中我也经常处理这样的问题。解释如下:

你给伺服电机驱动器一个很高频率的脉冲,那么伺服电机就将以很高的速度运行,当你的电机以最高速度运动一定脉冲数时(这个脉冲数可以在调试的过程中定,比如总的脉冲数的90%,或者运动到距离光电开关合适的距离是的脉冲数),你就减小脉冲的输出频率,降低频率后,电机的运动速度就会减慢,慢到你认为合适的速度(这个速度你可通过调试获取),慢速运动到光电开关的位置,电机很容易就停止运行了,根本没有你所说的惯性问题。
PS:无论是脉冲输出卡还是PLC模块,都是有加速或者减速的函数的,也就是说,电机速度增加和降低都不是台阶式的,而是有上升或下降曲线的。这个你可具体去参阅资料。 --------------------编程问答-------------------- 多一句嘴,脉冲数的多少,决定了你的工件运行的距离远近。 --------------------编程问答-------------------- 提醒:小心空回误差。
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,