• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

【DigiKey年度宠粉】+ M5Stack Unit Roller485 深度体验报告

一、购买经历:从技术种草到开箱惊喜

人品大爆炸,非常荣幸地被电源网选上了宠粉活动。😍作为机器人开发爱好者,我在M5Stack官网看到Unit Roller485的技术参数后立即被吸引。这款集成FOC控制、485/2C双通信、滑环设计的旋转执行器,完美契合我的项目需求。通过官网授权经销商下单后,1周天便收到包裹。

 

- 工业级黑色包装内含防震泡沫

- 配件齐全(含HT3.96R-4P插头、双Grove线、M3螺丝包等)

- 主体采用CNC铝合金外壳,表面喷砂工艺触感细腻

- OLED屏幕保护膜贴心预贴

 二、产品体验:工业设计与智能控制的完美融合

外观细节

- 立方体造型(40x40x40mm),顶部/底部均有LEGO兼容孔

- 背部集成0.66英寸OLED屏实时显示参数

- 两侧分布PWR485接口(6-16V)与Grove插座

- 隐藏式RGB灯带环绕主体,动态指示工作状态

 硬件性能测试

- 供电兼容性:同时支持5V Grove供电(70mA待机)和16V高压输入(32mA待机),自动切换模式

- 负载表现:测试16V供电下,500g负载稳定运行(转速560rpm),无明显发热

- 滑环黑科技:360°旋转时Grove接口持续供电,成功驱动旋转摄像头模块

- 噪音控制:空载运行仅48dB,优于同类产品

控制模式实战

我打算用M5Stack U182来制作一个360度慢速旋转展示台。这个展示台将能够精确控制旋转速度,我可以用来展示各种产品参加活动的产品。

通过Arduino库实现多模式控制:

// Copyright (c) 2025 misetteichan
// Licensed under the MIT License. See LICENSE file for details.
#include "M5Dial.h"
#include <M5Unified.h>
#include <Avatar.h>
#include <unit_rolleri2c.hpp>

static UnitRollerI2C roller;
int32_t origin = 0;
m5avatar::Avatar avatar;
int mode = 0;

void apply_angle()
{
  auto curr = -(origin - roller.getPosReadback()) / 100.f;
  curr = std::fmod(curr, 360.0f);
  if (curr < 0)
  {
    curr += 360.f;
  }
  printf("angle: %f\n", curr);
  avatar.setRotation(curr);
}

bool judge_mode()
{
  M5Dial.update();
  if (!M5.BtnA.wasClicked())
  {
    return false;
  }
  // 修改为三模式循环
  mode = (mode + 1) % 3; // 0->1->2->0...
  // mode = 1 - mode;
  printf("mode: %d\n", mode);

  roller.setPos(roller.getPosReadback());

  auto cp = avatar.getColorPalette();
  switch (mode)
  {
  case 0:
    roller.setOutput(0);
    cp.set(COLOR_PRIMARY, WHITE);
    break;
  case 1:
    roller.setOutput(1);
    cp.set(COLOR_PRIMARY, YELLOW);
    break;
  case 2: // 新增模式2颜色标识
    // roller.setOutput(0);
    cp.set(COLOR_PRIMARY, GREEN);
    break;
  }
  avatar.setColorPalette(cp);
  return true;
}

bool move(float deg)
{
  if (judge_mode())
  {
    return false;
  }
  roller.setPos(roller.getPos() + static_cast<int32_t>(deg * 100.f));
  M5.delay(1);
  apply_angle();
  return true;
}

void setup()
{
  auto cfg = M5.config();
  M5Dial.begin(cfg, true, false);

  const auto sda = M5.getPin(m5::pin_name_t::port_a_sda);
  const auto scl = M5.getPin(m5::pin_name_t::port_a_scl);
  while (!roller.begin(&Wire, 0x64, sda, scl, 400000))
  {
    M5.delay(1000);
  }
  roller.setOutput(0);
  roller.setMode(ROLLER_MODE_POSITION);
  roller.setPosMaxCurrent(100000);
  origin = roller.getPos();

  const auto r = avatar.getFace()->getBoundingRect();
  const auto scale = std::min(
      M5.Display.width() / (float)r->getWidth(),
      M5.Display.height() / (float)r->getHeight());
  avatar.setScale(scale);
  const auto offs_x = (r->getWidth() - M5.Display.width()) / 2;
  const auto offs_y = (r->getHeight() - M5.Display.height()) / 2;
  avatar.setPosition(-offs_y, -offs_x);
  avatar.init();
}

void loop()
{
  const auto d = .5f;
  static long lastPosition = 0; // 用于存储上次的 newPosition
  static long newPosition =0;
  judge_mode();
  switch (mode)
  {
  case 0:    
    apply_angle();
    break;
  case 1:
    newPosition = M5Dial.Encoder.read();

    // 判断旋转方向
    if (newPosition > lastPosition)
    {
      while (roller.getPos() < origin + newPosition * 100 * 3)
      {
        if (!move(d))
        {
          return;
        }
      }
    }
    else if (newPosition < lastPosition)
    {
      while (roller.getPos() > origin + newPosition * 100 * 3)
      {
        if (!move(-d))
        {
          return;
        }
      }
    }

    lastPosition = newPosition;
    break;
  case 2:
    // if (judge_mode())
    // { // 检测模式切换
    //   return;
    // }
    // 持续慢速顺时针旋转(每次增加0.2度)
    // roller.setPos(roller.getPos() + static_cast<int32_t>(0.2f * 100.f));
    // 持续慢速顺时针旋转(每次增加0.2度)
    if (!move(0.10f)) // 传递较小的角度值
    {
      return;
    }
    M5.delay(1); // 增大延时降低速度
  }
}

B站演示链接

- 位置模式:±0.1°精度,配合磁编码器实现精准定位

- 速度模式:2100rpm空载转速,PID算法动态调整

- 电流模式:0.5A持续电流输出,过载保护灵敏

 

 五、总结:工业级旋转控制的标杆产品

M5Stack Unit Roller485重新定义了小型旋转执行器的标准,其集成度、控制精度和扩展性在同类产品中脱颖而出。无论是工业自动化设备,还是艺术创作装置,这款产品都能提供可靠的动力支持。对于追求高效开发与稳定运行的工程师来说,Unit Roller485无疑是理想之选。

> 购买建议:推荐搭配CoreS3开发板使用,通过I2C接口可实现即插即用。建议多备滑环模块,扩展旋转外设应用场景。

项目完整代码:pio项目

diialMoter.zip

全部回复(0)
正序查看
倒序查看
现在还没有回复呢,说说你的想法