TMC222步进控制器,电机忙功能

2024-10-01 17:35:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在研究一个必须穿越迷宫的机器人。 对于机器人,我使用的是TMC222步进控制器,软件是用Python编写的。在

我需要一个功能,可以告诉我什么时候电机是繁忙的,这样机器人将抓住所有其他活动,而电机运行。在

我的想法是检查马达的当前位置,并将其与目标位置进行比较,但我还没有让它工作。在

我当前的尝试:

        def isRunning(self):
        print("IS RUNNING TEST")

        fullstatus=self.getFullStatus2()

        #print("FULL STATUS: " + str(fullstatus[0]) + " 2 " + str(fullstatus[1]))

        actLeft=fullstatus[0][1]<<8 | fullstatus[0][2]<<0
        actRight=fullstatus[1][1]<<8 | fullstatus[1][2]<<0

        tarLeft=fullstatus[0][3]<<8 | fullstatus[0][4]<<0
        tarRight=fullstatus[1][3]<<8 | fullstatus[1][4]<<0

        value = (actLeft==tarLeft) and (actRight==tarRight)

        value = not value
#       print("isbusy="+str(value))
        print 'ActPos = ' + str(actLeft)
        print 'TarPos = ' + str(tarLeft)

        return value

Tags: self软件value机器人控制器电机print迷宫
1条回答
网友
1楼 · 发布于 2024-10-01 17:35:04

{1}如果你不清楚你的多维代码的话。在

一般来说,您可以从两个8位字节组成一个16位的“字”,就像您所拥有的那样:

Word = HB << 8 | LB << 0

其中,HB和LB是高位(位15-8)和低位(位7-0)字节。在

也就是说,有多种方法可以检测电机失速。理想的方法是一个外部压力开关,当它撞到墙上时关闭。另一种方法是监测电动机的电流,当电动机遇到阻力(加速或失速时),电流就会上升。在

因为看起来这两种方法都不可能实现,所以我将使用一种不同的方法,随着时间的推移监控电机的位置(大概是从某种编码器)。在

假设您有一个函数get_position(),它返回一个无符号16位整数。你应该能够写一些东西,比如:

^{pr2}$

请注意,这假设您轮询编码器的速度足够快并且频率一致。在

然后,您可以监视平均增量(从get_average_delta())并且如果它下降到某个值以下,您就认为电机失速。在

假设:

  • This是您正在使用的控制器的数据表
  • 您的I²C代码工作正常

相关问题 更多 >

    热门问题