1

我正在通过使用 H-Bridge 控制电机速度来制造洗衣机。H 桥 MOSFET 的信号由微控制器 PICAXE 14M2 控制。

电机与发电机和承受负载的铲斗耦合。默认占空比为 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

4

1 回答 1

0

在我们查看您的控制算法之前,有一些问题需要用您的 PICAXE Basic 代码修复。你gosub到一个标签,它是程序的下一行;你goto用来跳出for循环;并且您使用gosub调用子例程但随后goto跳转到其他地方而不是return从子例程返回。这些可能不会导致错误,但它们表明您还没有清楚地考虑到您想要的程序流程是什么。

如果您的for循环没有被那些gotos 中断,它将执行 100 次然后完成,之后 pwm 输出将继续执行您设置的最后一个任务,但程序将不再执行任何操作。循环中没有pause或其他时间延迟,因此这将在几毫秒内发生。你为什么要循环 100 次,在最后一次循环之后你想发生什么?

最后,您要么增加或减少占空比以尝试加速或减慢电机,但您没有检查是否将其降低到低于 0 或高于您希望它采用的最大值 - 如果byte 变量为 0 并且你将它减少 1 它将环绕到 255,依此类推。如果您查看hpwm 的文档,您会发现占空比值实际上介于 0 到 1023 之间,因此无论如何您都需要为此使用 word 变量,而不是字节。

在我看来,你试图稳定速度的方式并不是最好的方法,但它应该在一种时尚之后起作用——如果你在循环中放置一个合适的时间延迟——所以试着让你的代码做它应该做的事情应该是,然后看看它在实践中是如何工作的,以及你是否可以改进它。

我认为这是一项教育任务,因此您应该为自己开发它,而不是在此站点上为您编写解决方案,但如果您对该项目的硬件或软件有进一步的问题,您可能会变得更好PICAXE 论坛上的答案,或者可能在EE Stack Exchange上。不过,请准备好发布您的硬件电路图,并具体说明您尝试过的内容以及发生的情况。

于 2016-05-28T20:32:12.797 回答