星瞳实验室APP,快速收到回复
  • 我们只解决官方正版的OpenMV的问题(STM32),其他的分支有很多兼容问题,我们无法解决。
  • 如果有产品硬件故障问题,比如无法开机,论坛很难解决。可以直接找售后维修
  • 发帖子之前,请确认看过所有的视频教程,https://singtown.com/learn/ 和所有的上手教程http://book.openmv.cc/
  • 每一个新的提问,单独发一个新帖子
  • 帖子需要目的,你要做什么?
  • 如果涉及代码,需要报错提示全部代码文本,请注意不要贴代码图片
  • 必看:玩转星瞳论坛了解一下图片上传,代码格式等问题。
  • OpenMV控制小车运动中的舵机转向问题



    • from pyb import Pin, Timer
      # Servo Control Example
      #
      # This example shows how to use your OpenMV Cam to control servos.
      
      import time
      from pyb import Servo
      s1 = Servo(3) # P9
      
      while (True) :
          s1.angle(3)
      

      上述代码可以正常通过P9口来控制舵机转向。

      from pyb import Pin, Timer
      # Servo Control Example
      #
      # This example shows how to use your OpenMV Cam to control servos.
      inverse_left=False  #change it to True to inverse left wheel
      inverse_right=False #change it to True to inverse right wheel
      
      ain1 =  Pin('P0', Pin.OUT_PP)
      ain2 =  Pin('P1', Pin.OUT_PP)
      bin1 =  Pin('P2', Pin.OUT_PP)
      bin2 =  Pin('P3', Pin.OUT_PP)
      ain1.low()
      ain2.low()
      bin1.low()
      bin2.low()
      pwma = Pin('P7')
      pwmb = Pin('P8')
      tim = Timer(4, freq=10000)
      ch1 = tim.channel(1, Timer.PWM, pin=pwma)
      ch2 = tim.channel(2, Timer.PWM, pin=pwmb)
      ch1.pulse_width_percent(0)
      ch2.pulse_width_percent(0)
      
      
      
      
      def run(left_speed, right_speed):
          if inverse_left==True:
              left_speed=(-left_speed)
          if inverse_right==True:
              right_speed=(-right_speed)
      
          if left_speed < 0:
              ain1.low()
              ain2.high()
          else:
              ain1.high()
              ain2.low()
          ch1.pulse_width_percent(abs(left_speed))
      
          if right_speed < 0:
              bin1.low()
              bin2.high()
          else:
              bin1.high()
              bin2.low()
          ch2.pulse_width_percent(abs(right_speed))
      
      while (True) :
          run(25,25)
      

      上述代码可通过TB622A16612FNG芯片来控制小车电机转速。(P7P8两口来输出PWM)
      一但讲上述两段代码组合到一起,仍可通过run()函数控制电机转速,但无法控制舵机转向。组合后的代码如下:

      from pyb import Pin, Timer
      # Servo Control Example
      #
      # This example shows how to use your OpenMV Cam to control servos.
      
      import time
      from pyb import Servo
      s1 = Servo(3) # P7
      
      
      
      
      inverse_left=False  #change it to True to inverse left wheel
      inverse_right=False #change it to True to inverse right wheel
      
      ain1 =  Pin('P0', Pin.OUT_PP)
      ain2 =  Pin('P1', Pin.OUT_PP)
      bin1 =  Pin('P2', Pin.OUT_PP)
      bin2 =  Pin('P3', Pin.OUT_PP)
      ain1.low()
      ain2.low()
      bin1.low()
      bin2.low()
      pwma = Pin('P7')
      pwmb = Pin('P8')
      tim = Timer(4, freq=10000)
      ch1 = tim.channel(1, Timer.PWM, pin=pwma)
      ch2 = tim.channel(2, Timer.PWM, pin=pwmb)
      ch1.pulse_width_percent(0)
      ch2.pulse_width_percent(0)
      
      
      
      
      def run(left_speed, right_speed):
          if inverse_left==True:
              left_speed=(-left_speed)
          if inverse_right==True:
              right_speed=(-right_speed)
      
          if left_speed < 0:
              ain1.low()
              ain2.high()
          else:
              ain1.high()
              ain2.low()
          ch1.pulse_width_percent(abs(left_speed))
      
          if right_speed < 0:
              bin1.low()
              bin2.high()
          else:
              bin1.high()
              bin2.low()
          ch2.pulse_width_percent(abs(right_speed))
      
      while (True) :
          run(50,50)
          s1.angle(30)
      

      求解答



    • s1 = Servo(3) # P7

      pwma = Pin('P7')

      引脚冲突了



    • 好像没有,我是注释写错了,s1=Servo(3)对应的是P9口吧