本来这应该是个很大的课题,毕竟电机舵机型号繁多,驱动方式各不相同,这里之讲讲最最基础的。
因为我是半路出家的,所以对电子学基础可以说极差,有一些基础的概念都不太懂,只能给初学者讲讲,难一些的就没资格说啦。
先说电机,大致分为直流电机和步进电机,有关步进电机,需要编码做驱动,比如用常见的l298n作为驱动板,这部分稍微复杂,网上资料很多,我就不讲了。
直流电机,就是我们小时候最常见的玩的那种,比如四驱车,小电扇等等,接到5号电池两端就可以转,但是这个东西怎么用esp32驱动呀,这个问题还真把我难住好一会儿,网上也没有很直接的答案,我发现直接接到esp32的vcc gnd就可以转,反接反转,但是用Io怎么不转呀,不管是高低点评还是pwm驱动,就是不转,我也很纳闷,这么简单的东西咋就不转,这里就暴漏我基础差了,划重点,驱动这类基础直流电机也用芯片的,最常见的可以考虑drv8833,因为单片机的io驱动能力很弱,也就是电流小,所以自然是带不动啦,这么简单的原理我搞了两年单片机才知道,也不怕被人笑话了。
drv8833基本是两个io驱动一个电机,原理也比较简单,核心的就是这个
在这里插入图片描述
说人话就是两个io电平相同就不转,一个0,一个1,就是正转或者反转,相同pwm驱动,只需一个io用pwm,另外一个高或者低都i可以,那么这个fast decay 和 slow decay是啥呢,我问了下团队的硬件,是快衰减和慢衰减的意思,实际项目中,快衰减动作快,但是瞬间功率也大,如果驱动电机发现esp32重启很可能是功率过大导致,可以尝试用慢衰减,同样的如果发现正转变反转,esp32重启,就在中间加个停止再换反向,也可能解决问题,这是实践的经验!!!
下面说说舵机,最常见的9g舵机之类的,基础不难,就是pwm控制,不说太多了,大家自己理解原理,核心就是duty不同对应不同角度,知道你们想要现成的代码,我直接上了,主要是数学的换算问题:
-90到90度的舵机方法:

def servo_write_angle(pin,angle):
    pwm=PWM(Pin(pin))
    pwm.duty(int(((angle+90)*2/180+0.5)/20*1023))
    pwm.freq(50)

是的,就是这么朴实无华,给引脚和想要的角度就转了,如果是0-180度呢,换算一下就好了。。。

def servo_write_angle(pin,angle):
    pwm=PWM(Pin(pin))
    anglereal=angle-90
    pwm.duty(int(((anglereal+90)*2/180+0.5)/20*1023))
    pwm.freq(50)

**如果是0-270度呢?**这种舵机比较冷们,但是确实有,比如乐高电机,我写好了测好了,拿去吧

def lego_servo_write_angle(pin,angle):
    pwm=PWM(Pin(pin))
    anglereal=angle-135
    pwm.duty(int(((anglereal+135 )*2/270+0.5)/20*1023))
    pwm.freq(50)
Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐