我正在用H桥控制电机的速度来做洗衣机。h桥mosfet的信号由picaxe 14m2微控制器控制。
电机与发电机和承担负载的铲斗耦合默认占空比为25%。当50%电机停止且大于50%时,电机的旋转改变。
现在,我想做的是,当负载加到铲斗上时,马达应该保持其速度,为了保持速度,我想控制占空比。
因此,如果负载增加,对电机的电阻增加,这意味着铲斗应该减速,使发电机产生更少的电压。
现在,我需要增加占空比,所以电机增加速度,以赶上默认值。
不幸的是,我无法执行闭环功能。有人能帮帮我吗。。。。
另外,我用的是两台12伏直流电动机。一个作为电机旋转铲斗(也与其他电机耦合),另一个作为发电机获取反馈
谢谢。
我使用以下代码:

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

最佳答案

在查看您的控制算法之前,有一些问题需要用PICAXE基本代码来修复。不管怎样,你都要跳出一个标签,它是程序的下一行;你用gosub跳出一个goto循环;你用for调用一个子程序,然后gosub跳转到别的地方,而不是从子程序返回这些可能不会导致错误,但它们表明您还没有清楚地考虑到您希望的程序流是什么。
如果您的goto循环没有被那些return中断,它将执行100次,然后完成,在此之后,pwm输出将在您设置的最后一个占空比继续,但程序将不再执行任何操作循环中没有for或其他时间延迟,因此这将在几毫秒内发生。为什么你要循环100次,在最后一次循环之后你想发生什么?
最后,你要么增加或减少占空比,试图加速或减速电机,但你没有检查你没有降低它低于0或以上的最大值,你想它采取-如果一个字节变量是0,你减少了1,它会包装到255,等等。如果您查看documentation for hpwm您将看到占空比值实际上在0到1023之间,因此您无论如何都要为此使用一个word变量,而不是一个字节。
在我看来,你试图稳定速度的方法并不是最好的方法,但它应该以一种方式工作——如果你在循环中设置了适当的时间延迟——所以试着让你的代码做它应该做的事情,然后看看它在实践中是如何工作的,以及你是否可以改进它。
我假设这是一个教育性的任务,所以你应该自己开发它,而不是在这个网站上为你写一个解决方案,但是如果你对这个项目的硬件或软件有进一步的问题,你可能会在PICAXE forumEE Stack Exchange上得到更好的答案。不过,要准备好张贴硬件电路图,并具体解释你尝试过什么和发生了什么。

关于algorithm - 如何通过PICAXE 14M2控制占空比来保持直流电动机速度(闭环反馈),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37486642/

10-10 18:30