当前位置:   article > 正文

OpenMV输出PWM,实现对舵机控制_openmv4 h7 plus p9为什么不能使用pwm 控制舵机转到固定角度

openmv4 h7 plus p9为什么不能使用pwm 控制舵机转到固定角度

OpenMV的定时器官方函数介绍:Timer类 – 控制内部定时器

目录

OpenMV的PWM资源介绍

为什么要用OpenMV输出PWM

OpenMV的PWM资源分配

资源

注意 

建议

PWM输出代码

代码讲解

Timer

Timer.channel

tim.channel与Timer.channel区别

Timer.channel解析


OpenMV的PWM资源介绍

为什么要用OpenMV输出PWM

OpenMV有9个外接IO可以供我们使用,很多时候我们只是把OpenMV当成一个图像识别的工具,这样并没有充分利用他的资源

OpenMV的9个IO口中6个可以输出PWM,而且控制方法特别简单。在我们进行比赛过程中,可能要对物块进行颜色识别并且抓取,我比较推荐使用OpenMV做出颜色识别之后,控制机械臂抓取物体。这样减少了主控的负担,充分利用了资源。由于OpenMV的PWM输出极其简单,也减少了工作量

注意:我们这里只会讲解输出PWM的部分,关于OpenMV的定时器编码器模式,比较模式和捕获模式需要自行研究

OpenMV的PWM资源分配

资源

OpenMV的PWM资源如下

注意 

定时器1不能作为PWM输出口,在官方文档里面说了定时器(1)用于摄像头,所以不能动用定时器1

 如果我们动用了定时器1,会报错

建议

因为我们只能使用6个IO输出PWM,然后P4P5是要用于与主控进行串口通讯的。所以刚好可以使用4个PWM输出,正好可以使用四轴机械臂。如果机械臂多于4个舵机,慎用!!!

PWM输出代码

OpenMV其实就是一个STM32的单片机,相信绝大多数打比赛的人都是使用的STM32F103进行的入门学习。我们都知道,STM32可以进行硬件PWM的输出,他的1个定时器有4个通道。每个通道都能输出PWM。OpenMV亦是如此。

  1. # PWM 控制例子
  2. #
  3. # 这个例子展示了如何使用OpenMV的PWM
  4. import time
  5. from pyb import Pin, Timer
  6. tim = Timer(4, freq=50) #设置频率,初始化定时器4,将其设置为50HZ,也就是说一个PWM周期为20ms
  7. Tim = Timer(2, freq=50) #设置频率,初始化定时器2,将其设置为50HZ,也就是说一个PWM周期为20ms
  8. # 生成50HZ方波,使用TIM4,channels 123分别是 5% , 10% ,15占空比。
  9. tim.channel(1, Timer.PWM, pin=Pin("P7"), pulse_width_percent=5)
  10. tim.channel(2, Timer.PWM, pin=Pin("P8"), pulse_width_percent=10)
  11. tim.channel(3, Timer.PWM, pin=Pin("P9"), pulse_width_percent=15)
  12. # 生成50HZ方波,使用TIM2,channel 123分别是 20% , 25% ,30占空比。
  13. Tim.channel(1, Timer.PWM, pin=Pin("P6"), pulse_width_percent=20)
  14. Tim.channel(4, Timer.PWM, pin=Pin("P5"), pulse_width_percent=25)
  15. Tim.channel(3, Timer.PWM, pin=Pin("P4"), pulse_width_percent=30)
  16. while (True):
  17. time.sleep_ms(1000)

代码讲解

Timer

  1. tim = Timer(4, freq=50) #设置频率,初始化定时器4,将其设置为50HZ,也就是说一个PWM周期为20ms
  2. Tim = Timer(2, freq=50) #设置频率,初始化定时器2,将其设置为50HZ,也就是说一个PWM周期为20ms

(1)我们看这个代码很简单,就是说,现在定时器4的PWM输出频率为50HZ。

(2)什么是HZ,1HZ表示1S变化一次,如果是50HZ,表示1S变化50次,1/50s=20ms。那么现在一个PWM周期为20ms

(3)现在对tim的控制,就是对以50HZ跳变的定时器4控制。Tim是对以50HZ跳变的定时器2控制。

Timer.channel

tim.channel与Timer.channel区别

因为之前tim = Timer(4, freq=50),那么现在tim就是Timer类,通俗来说现在tim就是Timer。而tim.channel现在就可以理解为Timer.channel。同理Tim.channel可以理解为Timer.channel

Timer.channel解析

我们只讲PWM有关部分!

我们先看官方手册的解释:

 (1)这个表明,我们必须传入通道变量channel。这个值可以是如下:

  1. 1 //通道1
  2. 2 //通道2
  3. 3 //通道3

(2)之后还可以传入参数mode。 可选参数有多个,我只讲PWM部分!

  1. Timer.PWM // 配置PWM模式下的定时器(高电平有效)
  2. Timer.PWM_INVERTED //配置PWM模式下的定时器(低电平有效)

(3)callback ,这个是设置定时器中断里面的函数的。不用管他

与PWM无关,不解释。想了解的自行学习!

(4) pin ,设置PWM输出我引脚。比如我想让定时器2的通道3输出PWM,就写成pin=Pin("P4")。大写字母P

个人建议使用pulse_width_percent因为这样可以直观的设置占空比是多少。比如我们要设置占空比为50%,就可以写成pulse_width_percent=50;

  1. pulse_width //决定使用的初始脉宽值。
  2. pulse_width_percent //决定使用的初始脉宽值百分比。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/474103
推荐阅读
相关标签
  

闽ICP备14008679号