步进闭环控制、速度控制(张大头Emm_V4.2驱动器)速度控制——Arduino


前言

        步进电机的精准控制是一个比较麻烦的事,要是不想深入学习电机控制而且又有精准控制的需求的话,可以在某宝搜买闭环驱动器,这里我使用的是张大头42步进电机闭环控制器,“可恶”的是up主没有在他的例程中提供函数,然后自己写了一个,供大家参考,也望大家批评指正。


一、接线

这个支撑多个电机挂在一个usart上面,只需要手动设置电机的地址就可以了,十分的方便

二、代码

这里直接给出了代码,代码也先当简单,不会看对象的话直接调用下面void loop中的那些函数就行。

因为其中有几处讲解的地方就是lastControlBytes,为了防止arduino一直在循环里给步进电机控制器一直发送消息,就做了数据更新的判断,所以大家大胆的在循环中调用set_speed()。

这里只做了速度的控制,还可以进行位置的控制,因为这次没用到,下次用到的时候再写给大家。

#include <Arduino.h>

class StepperMotorControl {
  private:
    byte controlBytes[6] = {0x00, 0xF6, 0x14, 0xFF, 0x00, 0x6B};
    byte lastControlBytes[6] = {0x00, 0xF6, 0x14, 0xFF, 0x00, 0x6B};
    Stream *serialPort;

    bool hasChanged() {
      for (byte i = 0; i < 6; i++) {
        if (controlBytes[i] != lastControlBytes[i]) {
          return true;
        }
      }
      return false;
    }

    void updateLastControlBytes() {
      for (byte i = 0; i < 6; i++) {
        lastControlBytes[i] = controlBytes[i];
      }
    }    

    void sendCommand() {
      if (hasChanged()) {
        serialPort->write(controlBytes, 6);
        updateLastControlBytes();
      }
    }

  public:

    StepperMotorControl(byte address, Stream *_serialPort) {
      controlBytes[0] = address; // 在构造函数中设置电机地址
      serialPort = _serialPort;
    }    

    void set_speed(bool direction, uint16_t speed) {
      if (direction) {
        controlBytes[2] = (0x10) | ((speed >> 8) & 0x0F); // 逆时针方向
      } else {
        controlBytes[2] = (0x00) | ((speed >> 8) & 0x0F); // 顺时针方向
      }
      controlBytes[3] = speed & 0xFF;
      sendCommand();
    }

    void set_acceleration(uint16_t acceleration)
    {
      controlBytes[4] = acceleration;
      sendCommand();
    }
};

// 设置步进电机使用的串口
StepperMotorControl stepper(0x01,&Serial);

void setup() {
  // 初始化串口
  Serial.begin(115200);
}

void loop() {
  // 设置电机为逆时针方向,速度为0x4FF
  stepper.set_speed(1, 0x4FF);
  delay(5000); // 等待5秒

  // 设置电机为顺时针方向,速度为0x4FF
  stepper.set_speed(0, 0x4FF);
  delay(5000); // 等待5秒
}


  • 4
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在STM32步进电机的闭环控制中,可以使用以下函数进行设置和初始化: 1. 设置加速度:使用函数`void set_acceleration(StepperMotorControl *control, uint16_t acceleration);`来设置步进电机的加速度。\[1\] 2. 初始化角度模式:使用函数`void StepperMotorControl_init_location(StepperMotorControl_location *control, uint8_t address);`来初始化步进电机的角度模式。\[1\] 3. 设置角度:使用函数`void set_angle_control_location(StepperMotorControl_location *control, float target_angle_num);`来设置步进电机的目标角度。\[2\] 在主函数中,可以按照以下步骤进行步进电机的初始化和控制: 1. 初始化底盘电机:使用函数`StepperMotorControl_init`来初始化底盘电机,可以根据需要初始化多个电机。例如:`StepperMotorControl_init(&moto1,0x01);`\[3\] 2. 初始化云台电机:使用函数`StepperMotorControl_init_location`来初始化云台电机,可以根据需要初始化多个电机。例如:`StepperMotorControl_init_location(&moto_9,0x09);`\[3\] 3. 设置云台电机角度:使用函数`set_angle_control_location`来设置云台电机的目标角度。例如:`set_angle_control_location(&moto_8,-900);`\[3\] 4. 设置电机速度:使用函数`set_speed`来设置电机的速度。例如:`set_speed(&moto1,1,200);`表示电机正转且速度为200。\[3\] 综上所述,以上是关于STM32步进电机闭环控制的一些函数和初始化操作。 #### 引用[.reference_title] - *1* *2* *3* [STM32步进闭环控制速度控制张大Emm_V4.2驱动器速度控制 角度控制 位置控制](https://blog.csdn.net/qq_59953808/article/details/130695602)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值