我正在用H桥控制电机速度来制造洗衣机.H桥MOSFET的信号由微控制器Picaxe14M2控制.
电机与发电机和承担负载的水桶耦合。拖欠关税周期为25%。在50%的电机停止和大于50%时,电机的旋转发生变化。
现在,我想做的是,当负载增加到桶中时,电机应该保持它的速度,为了保持速度,我想控制占空比。
因此,如果负载增加,对电机的电阻就会增加,这意味着铲斗应该减速,使发电机产生较少的电压。
现在,我需要增加占空比,这样电机就可以加快速度,赶上默认值。
不幸的是,我无法执行闭环功能。有人能帮帮我吗..。
PS。我用的是两台12V直流电动机。其中一台作为马达转动水桶(它也与其他电机耦合),另一台作为发电机来获得反馈。
谢谢。
我使用以下代码:
setfreq M32 ' 100 kHz Frequency
main:
if pinB.5 = 1 then goto Closeloop
goto main
***************************************************************************
Closeloop:
symbol duty = b2
let duty = 79
gosub closeloop1
closeloop1:
for b11 = 1 to 100
hpwm 1,0,0,79,duty
readadc C.4, b22 ` Read generated voltage from pin C.4
IF b22 > 204 then gosub stepdown 'if Generated voltage > 4 V , stepdown the duty cycle
IF b22 < 153 then gosub stepup 'if V< 3 V, stepup the duty cycle
stepup: ` Increase the duty (So speed is increased) if gernerated voltage is less than 3V
duty = duty - 5
goto closeloop1
stepdown: ` Decrease the duty (So speed is reduced) if gernerated voltage is more than 4V
duty = duty + 5
goto closeloop1
next b11发布于 2016-05-28 20:32:12
在我们看您的控制算法之前,有一些问题需要用PICAXE基本代码来修复。您gosub到一个标签,这是程序的下一行;您使用goto跳出for循环;使用gosub调用子例程,然后使用goto跳转到其他地方,而不是return从子例程返回。这些可能不会导致错误,但它们表明您还没有清楚地考虑到您想要的程序流是什么。
如果您的for循环没有被那些goto的中断,它将执行100次,然后完成,在此之后,pwm输出将继续在您设置的最后职责,但程序将不再做任何事情。循环中没有pause或其他时间延迟,所以这将在毫秒内发生。为什么要循环100次,在最后一次循环之后想要发生什么?
最后,您要增加或降低负载系数,以尝试加速或减慢电机,但您没有检查是否将其降到低于0或高于您希望它获得的最大值--如果一个字节变量为0,并且您将它减少1,它将被包装为255,依此类推。如果您查看hpwm文档,您将看到工作因子值实际上介于0到1023之间,因此您需要使用一个单词变量,而不是一个字节。
在我看来,你试图稳定速度的方式并不是最好的方法,但它应该在某种程度上起作用--如果你在循环中加入了适当的时间延迟--所以试着让你的代码做它应该做的事情,然后看看它在实践中是如何工作的,以及你是否可以改进它。
我认为这是一项教育任务,所以您应该自己开发,而不是在这个站点上为您编写解决方案,但是如果您对该项目的硬件或软件有进一步的疑问,您可能会在PICAXE论坛上得到更好的答案,或者在EE堆栈交换上得到更好的答案。准备张贴你的硬件的电路图,并具体解释你尝试了什么和发生了什么。
https://stackoverflow.com/questions/37486642
复制相似问题