This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MCF8316A:无 GUI 编程

Guru**** 2468570 points
Other Parts Discussed in Thread: MCF8316A

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/1270177/mcf8316a-programming-without-gui

器件型号:MCF8316A

大家好、我拥有专为 ESP32设计的硬件、用于控制 MCF8316A 电机驱动器。 编程是在 Arduino IDE 中完成的。问题是、无法通过硬件访问使用在线 GUI 将参数放入电机驱动程序。 它需要通过 esp32中的 I2C 来完成。

我聘请了一个程序员,并请几个更多的程序员寻求帮助。 到目前为止没有运气。

现在我们尝试了几种不同的方法、这里是当前状态下的测试代码。 有人能帮忙吗、应该进行哪些修复来允许读取/写入 MCF8316A? 或者、是否有人可以为旋转电机提供类似的测试代码、以便我的程序员弄清这一点?

谢谢!

(在下一条消息中编码本身)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    很抱歉此帖子的格式不正确。 我发布的代码中注释掉了//行,所以这里是没有//删除行的代码。

    #include <Wire.h>
    
    #define BRAKE 5
    #define DIR 17
    #define SPEED 16
    
    const int deviceAddress = 0x01;
    #define CRC_POLYNOMIAL 0x07
    
    void setup() {
      Wire.begin();
      Serial.begin(115200);
      Serial.println("Starting");
      pinMode(BRAKE, OUTPUT);
      pinMode(DIR, OUTPUT);
      pinMode(SPEED, OUTPUT);
      digitalWrite(BRAKE, HIGH);
      digitalWrite(DIR, HIGH);
      digitalWrite(SPEED, LOW);
    
      uint8_t data[] = {0x02, 0x50, 0x00, 0xA4, 0x01, 0x00, 0x00, 0x00};
      uint8_t crc = calculateCRC(data, sizeof(data));
      Wire.beginTransmission(deviceAddress);
      Wire.write((uint8_t)(0x02));  // Start Byte
      delay(100);
      Wire.write((uint8_t)(0x50));  // control Word 0
      delay(100);
      Wire.write((uint8_t)(0x00));  // Control word 1
      delay(100);
      Wire.write((uint8_t)(0xA4)); // Control word 2
      delay(100);
      Wire.write((uint8_t)(0x01));  // Data Bytes 0
      delay(100);
      Wire.write((uint8_t)(0x00)); // Data Bytes 1
      delay(100);
      Wire.write((uint8_t)(0x00)); // Data Bytes 2
      delay(100);
      Wire.write((uint8_t)(0x00)); // Data Bytes 3
      delay(100);
      Wire.write(crc); // Data Bytes 3
      delay(100);
      Wire.endTransmission();
      delay(1000);
    }
    
    void loop() {
      Serial.println("Motor should start");
      analogWrite(SPEED, 128);
      digitalWrite(BRAKE, LOW);
      delay(5000);
      Serial.println("Speed increase");
      analogWrite(SPEED, 200);
      delay(3000);
      digitalWrite(BRAKE, HIGH);
      Serial.println("Motor Stops");
      delay(2000);
      digitalWrite(DIR, LOW);
      analogWrite(SPEED, 128);
      digitalWrite(BRAKE, LOW);
      Serial.println("Motor should start in reverse direction");
      delay(5000);
      analogWrite(SPEED, 200);
      Serial.println("Speed increase");
      delay(3000);
      digitalWrite(BRAKE, HIGH);
      Serial.println("Motor Stops");
      delay(2000);
      digitalWrite(DIR, HIGH);
    }
    
    uint8_t calculateCRC(uint8_t* data, uint8_t length) {
      uint8_t crc = 0xFF; // Initial CRC value
    
      for (uint8_t i = 0; i < length; i++) {
        crc ^= data[i]; // XOR the CRC with the current data byte
    
        for (uint8_t j = 0; j < 8; j++) {
          if (crc & 0x80) { // Check if the most significant bit is set (bit 7)
            crc = (crc << 1) ^ CRC_POLYNOMIAL; // Shift left and XOR with the polynomial
          } else {
            crc <<= 1; // Just shift left
          }
        }
      }
      return crc;
    }
    


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Jonne:

    我们有一个 常见问题解答、介绍了如何使用 MSP430 launchpad 通过 I2C 对 Mcx BLDC 电机驱动器进行编程 、该 Launchpad 提供了用于写入目标器件寄存器的示例代码。

     在 根据电机参数更改电阻设置之前、请查看 MCF8316A 调优指南的第3.1节中的默认寄存器配置、了解推荐的起始寄存器设置。

    此致、

    约书亚