• micropython与电机舵机(给初学者)


    本来这应该是个很大的课题,毕竟电机舵机型号繁多,驱动方式各不相同,这里之讲讲最最基础的。
    因为我是半路出家的,所以对电子学基础可以说极差,有一些基础的概念都不太懂,只能给初学者讲讲,难一些的就没资格说啦。
    先说电机,大致分为直流电机和步进电机,有关步进电机,需要编码做驱动,比如用常见的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)
    
    • 1
    • 2
    • 3
    • 4

    是的,就是这么朴实无华,给引脚和想要的角度就转了,如果是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)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    **如果是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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    Python接口自动化测试之post请求详解
    AOC新特性发布会之事件中心
    [Leetcode] 0058. 最后一个单词的长度
    线性回归详解(代码实现+理论证明)
    服务器数据恢复—VMware虚拟化下误操作导致服务器崩溃的数据恢复案例
    JL杰理sop8蓝牙芯片ble型号KT6368A的功能简介以及应用于香薰机
    Java设计模式-单列模式
    Java服务启动报Unsupported record version Unknown-0.0
    计算机网络之运输层和应用层 学习笔记
    【开发应该了解的Web文件下载】
  • 原文地址:https://blog.csdn.net/jd3096/article/details/126436589