这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 开源硬件 » BPI-PicoW-S3PWM控制舵机[CircuitPython]

共1条 1/1 1 跳转至

BPI-PicoW-S3PWM控制舵机[CircuitPython]

菜鸟
2022-11-14 09:28:32     打赏


img

BPI-Pico-S3 与 Raspberry Pi Pico 板尺寸相同,搭载ESP32S3芯片,8M flash,4层PCB,电镀半孔工艺,陶瓷天线,支持 2.4 GHz Wi-Fi 和 Bluetooth® LE 双模无线通信,是一款专为物联网开发和Maker DIY设计的开发板。

出厂内置 tinyUF2 + CircuitPython,推荐使用Mu编辑器上手CircuitPython开发。

BiliBili视频

https://www.bilibili.com/video/BV1CD4y1t79b/?share_source=copy_web&vd_source=fe857309245dbfd6ed5125b959d43261

硬件接口示意图

img

PWM控制舵机

img

以MG90S舵机为例,其他各种舵机参考其对应的使用手册,在以下代码中修改相应的参数。

  1. MG90S舵机关键参数:

    1. 控制角度,0° ~ 180°

    2. PWM 占空时长控制,500us ~ 2500us 对应 0° ~ 180°

    3. 工作电压:4.8V 至 6V(典型值为 5V)

    4. 失速扭矩:1.8 kg/cm (4.8V)

    5. 最大失速扭矩:2.2 kg/cm (6V)

    6. 工作速度为 0.1s/60° (4.8V)

  1. 求取任意一个旋转角度所需的占空时长的表达式为:

 设y为占空时长,x为旋转角度
y=(2500-500)/180*x+500
y=(100*x+4500)/9
  1. 根据参数,可以确定舵机角度由PWM波的高电平持续时长所控制,且由于舵机的控制必须由周期性的PWM波形控制,所以一个周期时长必须超过控制此舵机达到180°所需的占空时长,即超过2500us,则PWM频率要低于400hz。

  1. 设定PWM频率为200hz,则周期时长为5000us,对应控制此舵机旋转 0° ~ 180°的占空比为10% ~ 50% 。

  1. CircuitPython的PWM占空比控制精度为16bit,100%占空比在 2进制中表达为 1111 1111 1111 1111,16进制表达为 FFFF,10进制表达为 65535。

  1. 求取任意一个旋转角度所需的占空比的表达式为:

设y为占空比,x为旋转角度
y=((50-10)/180*x+10)/100*65535
y=(4369*x+196605)/30
  1. MG90S舵机与BPI-PicoW-S3的接线方式:

BPI-PicoW-S3的VBUS引脚可输出+5V;除GP0以外,所有GP引脚都可以用于输出PWM,仅需在程序中修改到对应引脚即可。

MG90SBPI-PicoW-S3



GND 棕色GND
+5V 红色VBUS
PWM 橙色GP0
  1. 根据以上表达式与参数设计一个可以任意控制此舵机旋转角度的程序:

import board
import pwmio
import time
servo_1 = pwmio.PWMOut(board.GP0, frequency=200, duty_cycle=0)#200hz, one cycle 5000us

def get_duty_cycle(x):
   return int((4369*x+196605)/30)

servo_1.duty_cycle = get_duty_cycle(90)# 90 degrees
  1. 通过一个逻辑分析仪可以读出此程序所控制输出的PWM占空时长,与计算的数值应当相符。

img

img

  1. 使用列表设计一套连续的舵机动作:

import board
import pwmio
import time
servo_1 = pwmio.PWMOut(board.GP0, frequency=200, duty_cycle=0)#200hz, one cycle 5000us

def get_duty_cycle(x):
   return int((4369*x+196605)/30)

action_list1 = [0,45,90,135,180,0,180,45,135,90]

while True:
   for i in action_list1:
       servo_1.duty_cycle = get_duty_cycle(i)
       time.sleep(0.5)

BPI-PicoW-S3 + CircuitPython 教程聚合链接https://forum.banana-pi.org.cn/t/topic/3986?u=wind_


BPI-PicoW-S3 wiki 页面https://wiki.banana-pi.org/BPI-PicoW-S3

购买BPI-PicoW-S3:

  • 比派科技官方速卖通店铺https://www.aliexpress.com/item/1005004775634442.html

  • SinoVoip 官方速卖通店铺https://www.aliexpress.com/item/1005004775859077.html

  • 官方淘宝店铺https://item.taobao.com/item.htm?spm=a2126o.success.0.0.25b04831CHV1Nc&id=684134360199

  • OEM&OEM 定制服务: sales@banana-pi.com




共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]