赞
踩
OpenMV的定时器官方函数介绍:Timer类 – 控制内部定时器
目录
OpenMV有9个外接IO可以供我们使用,很多时候我们只是把OpenMV当成一个图像识别的工具,这样并没有充分利用他的资源。
OpenMV的9个IO口中6个可以输出PWM,而且控制方法特别简单。在我们进行比赛过程中,可能要对物块进行颜色识别并且抓取,我比较推荐使用OpenMV做出颜色识别之后,控制机械臂抓取物体。这样减少了主控的负担,充分利用了资源。由于OpenMV的PWM输出极其简单,也减少了工作量。
注意:我们这里只会讲解输出PWM的部分,关于OpenMV的定时器编码器模式,比较模式和捕获模式需要自行研究。
OpenMV的PWM资源如下
定时器1不能作为PWM输出口,在官方文档里面说了定时器(1)用于摄像头,所以不能动用定时器1。
如果我们动用了定时器1,会报错
因为我们只能使用6个IO输出PWM,然后P4P5是要用于与主控进行串口通讯的。所以刚好可以使用4个PWM输出,正好可以使用四轴机械臂。如果机械臂多于4个舵机,慎用!!!
OpenMV其实就是一个STM32的单片机,相信绝大多数打比赛的人都是使用的STM32F103进行的入门学习。我们都知道,STM32可以进行硬件PWM的输出,他的1个定时器有4个通道。每个通道都能输出PWM。OpenMV亦是如此。
- # PWM 控制例子
- #
- # 这个例子展示了如何使用OpenMV的PWM
-
- import time
- from pyb import Pin, Timer
-
- tim = Timer(4, freq=50) #设置频率,初始化定时器4,将其设置为50HZ,也就是说一个PWM周期为20ms
- Tim = Timer(2, freq=50) #设置频率,初始化定时器2,将其设置为50HZ,也就是说一个PWM周期为20ms
-
- # 生成50HZ方波,使用TIM4,channels 1,2,3分别是 5% , 10% ,15占空比。
- tim.channel(1, Timer.PWM, pin=Pin("P7"), pulse_width_percent=5)
- tim.channel(2, Timer.PWM, pin=Pin("P8"), pulse_width_percent=10)
- tim.channel(3, Timer.PWM, pin=Pin("P9"), pulse_width_percent=15)
-
- # 生成50HZ方波,使用TIM2,channel 1,2,3分别是 20% , 25% ,30占空比。
- Tim.channel(1, Timer.PWM, pin=Pin("P6"), pulse_width_percent=20)
- Tim.channel(4, Timer.PWM, pin=Pin("P5"), pulse_width_percent=25)
- Tim.channel(3, Timer.PWM, pin=Pin("P4"), pulse_width_percent=30)
-
-
- while (True):
- time.sleep_ms(1000)
- tim = Timer(4, freq=50) #设置频率,初始化定时器4,将其设置为50HZ,也就是说一个PWM周期为20ms
- 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控制。
因为之前tim = Timer(4, freq=50),那么现在tim就是Timer类,通俗来说现在tim就是Timer。而tim.channel现在就可以理解为Timer.channel。同理Tim.channel可以理解为Timer.channel。
我们只讲PWM有关部分!
我们先看官方手册的解释:
(1)这个表明,我们必须传入通道变量channel。这个值可以是如下:
- 1 //通道1
- 2 //通道2
- 3 //通道3
(2)之后还可以传入参数mode。 可选参数有多个,我只讲PWM部分!
- Timer.PWM // 配置PWM模式下的定时器(高电平有效)
- 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;
- pulse_width //决定使用的初始脉宽值。
- pulse_width_percent //决定使用的初始脉宽值百分比。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。