Meridian Board LITEを有線LANとDynamixelに対応させる忘備録
ニナガワさんのMeridian計画のMeridian Board LITEを使って、有線LAN経由でDynamixelを回す改造の忘備録です。自分が最近作っているロボットが有線接続なので対応させてみました。
有線LANの対応のためにやること
- W5500のLANボードを使用
- W5500をMeridian Board LITEのSPIポートに接続
- esp32+W5500の組み合わせの場合、Ethernet.hではなく、Ethernet2.hをインポートする
- esp32はSPI接続ポートを3ch持っている、Meridian Board LITEの外に出ているポートはSPI3のためSPIからSPI3に対応させるようEthernet2.hのライブラリを一部編集
- udpのインスタンスをWIFIクラスからEthernetクラスに変更
- 地道にエラーを消していく
Dynamixelの対応のためにやること
- 回路的には一切手を加えなくてOK
- Dynamixel2Arduino.hをインポートする
- KONDOのモーターの動作を地道にDynamixelに置き換えていく
完成済みのものは下記のgithubに公開しています。
dreamdrive/Meridian_LITE
https://github.com/dreamdrive/Meridian_LITE
自分がハマったポイントを下記に記載します。
W5500のSPI接続
接続は下記の通りです。
とりあえず、esp32のレギュレータ的に、3.3Vを直接W5500の電源に使用しても問題なさそうです。
(他のマイコンを使用する時は、電流を確認して接続してください。)
Ethernet2のSPI3への変更
変更点は、ライブラリ内の「Ethernet2.h」「utility/w5500.c」の2ファイルです。
Ethernet2.hの変更点は以下の通り。
CSピン番号の変更(10番から5番へ)です。
public:
uint8_t w5500_cspin;
static uint8_t _state[MAX_SOCK_NUM];
static uint16_t _server_port[MAX_SOCK_NUM];
//EthernetClass() { _dhcp = NULL; w5500_cspin = 10; }
EthernetClass() { _dhcp = NULL; w5500_cspin = 5; } // 20240114編集
//void init(uint8_t _cspin = 10) { w5500_cspin = _cspin; }
void init(uint8_t _cspin = 5) { w5500_cspin = _cspin; } // 20240114編集
utility/w5500.cの変更点は以下の通り。
begin関数に与えるピン番号の明示的な変更です。
void W5500Class::init(uint8_t ss_pin)
{
SPI_CS = ss_pin;
delay(1000);
initSS();
//SPI.begin();
SPI.begin(18,19,23,5); // 20249114編集
w5500.swReset();
for (int i=0; i<MAX_SOCK_NUM; i++) {
uint8_t cntl_byte = (0x0C + (i<<5));
write( 0x1E, cntl_byte, 2); //0x1E - Sn_RXBUF_SIZE
write( 0x1F, cntl_byte, 2); //0x1F - Sn_TXBUF_SIZE
}
}
コメントを残す