You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Earlphilhower Arduino-Pico时,Pico RP2040无法初始化AS5601的I2C引脚

解决RP2040(Arduino-Pico框架)下AS5601的I2C初始化问题

问题根源

你直接修改AS5601库文件的I2C初始化代码,会和sketch中的Wire.begin()产生重复初始化冲突,导致引脚配置混乱,甚至影响开发板的USB识别。正确做法是在自己的sketch中控制I2C初始化流程,不要修改库文件。

正确解决方案

1. 恢复AS5601库原始代码

将你修改过的AS5601.h文件还原,删除添加的wireChannel->setSCL(5);、wireChannel->setSDA(4);和wireChannel->begin();代码,避免库与sketch的I2C初始化冲突。

2. 修改sketch代码

在setup()函数中先设置I2C引脚,再初始化Wire,确保顺序正确。RP2040默认I2C0对应引脚为GP4(SDA)和GP5(SCL),修改后的完整代码如下:

#include "Arduino.h"
#include "AS5601.h"

AS5601 Sensor;

void setup()
{
    // 先配置I2C引脚,再启动Wire
    Wire.setSDA(4);  // 指定SDA引脚为GP4
    Wire.setSCL(5);  // 指定SCL引脚为GP5
    Wire.begin();
    
    delay(1000);
    Serial.begin(115200);
    Serial.println(F("Angle Measurement with AS5601"));
}

void loop()
{
    Serial.print(F("Magnitude: "));
    Serial.print(Sensor.getMagnitude());

    Serial.print(F(" | Raw angle: "));
    Serial.print(Sensor.getRawAngle());

    Serial.print(F(" | Clean angle: "));
    Serial.print(Sensor.getAngle());

    if (Serial.read() == '0')
    {
        Sensor.setZeroPosition();
        Serial.print(F(" | Zero position set!"));
    }

    Serial.println();
    delay(50);
}

3. 硬件连接确认

确保AS5601接线正确:

  • AS5601的VCC接RP2040的3.3V(禁止接5V,AS5601是3.3V器件)
  • AS5601的GND接RP2040的GND
  • AS5601的SDA接RP2040的GP4
  • AS5601的SCL接RP2040的GP5

4. 可选:使用I2C1通道

如果需要使用I2C1,对应引脚为GP6(SDA)和GP7(SCL),代码修改如下:

// 替换原Wire相关代码
Wire1.setSDA(6);
Wire1.setSCL(7);
Wire1.begin();
// 初始化Sensor时指定Wire1对象
AS5601 Sensor(&Wire1);

关键注意事项

  • Arduino-Pico框架中,Wire.setSDA()和Wire.setSCL()必须在Wire.begin()之前调用,否则设置无效。
  • 不要在库文件中修改全局Wire对象的初始化,避免与sketch代码产生冲突。

内容的提问来源于stack exchange,提问作者Ashfaque Ahmed Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 04:20:02