豊橋技術科学大学情報・知能工学課程に所属するhoriです。
私は、「豊橋技術科学大学ロボコン同好会」に所属しており、主にロボットのための回路設計や配線などを担当する「回路班」としての役割を担っています。
今回は、産業用フィールドバス規格である「EtherCAT」のマスタとして動作する基板をJLCPCBで発注・動作確認をしてみました。
基板について
EtherCATマスタというと、なにか特殊なICが必要なのかと思うかもしれませんが、ハードウェア的には普通のEthernet基板で動いてくれます。
カテゴリ | IC名 |
---|---|
MCU | STM32H743VGT6 |
EthernetPHY | DP83826E |
PDController | CH224K |
JLCPCBへの発注の流れ
JLCPCBのURL >>> https://jlcpcb.com/
発注の流れに関しては、弊部の先輩であるForestさんのQiita記事にて詳しく解説していますので、是非そちらをご覧ください。
https://qiita.com/Forest1717/items/ae2914ec7ff8c6206441
基板到着・ファームウェアの実装
届いた基板がこちらです。
MouserやDigikey,秋月等の電子パーツショップでは、取り扱いがなかったり、在庫切れ中だったりするパーツも割と手に入ったりするので、JLCPCBのPCBAssemblyサービスには本当に助かってます。(チップ部品の実装の手間も省ける!!!)
実装後
特に実装不良もなく正常に動いてくれました。PCBAssemblyが便利すぎて今後も使っていきたいと思いました。
ファームウェアに関しては、STM32CubeIDEを用いて開発しました。ここでは簡単に、使用した技術について紹介したいと思います。
今回は、雑にHALのEthernet送信・受信関数及び構造体を直接使いましたが、産業用Ethernetという特性上、FreeRTOSを用いてタスク管理したほうがいいのかなと思いました。(ロボコンの使い道なら多分要らない)
CubeIDEの自動生成ツールで楽に導入できるlwipの中にEtherType(UDP,TCPとか)などを自己定義できる構造体などが用意されてようなので、それを使っていけばきれいにかけそうです。
int EthWrPacket(uint8_t *pBuff, uint16_t Len)
{
struct pbuf *p;
p = pbuf_alloc(PBUF_TRANSPORT,Len,PBUF_RAM);
p->tot_len = Len;
p->len = Len;
p->payload = pBuff;
p->next = NULL;
uint32_t i = 0U;
struct pbuf *q;
ETH_BufferTypeDef Txbuffer[ETH_TX_DESC_CNT] = {0};
memset(Txbuffer, 0, ETH_TX_DESC_CNT * sizeof(ETH_BufferTypeDef));
for (q = p; q != NULL; q = q->next)
{
Txbuffer[i].buffer = (uint8_t*)q->payload;
Txbuffer[i].len = q->len;
if (i > 0)
{
Txbuffer[i - 1].next = &Txbuffer[i];
}
if (q->next == NULL)
{
Txbuffer[i].next = NULL;
}
i++;
}
TxConfig.Length = p->tot_len;
TxConfig.TxBuffer = Txbuffer;
TxConfig.pData = p;
SCB_CleanInvalidateDCache();
HAL_ETH_Transmit(&heth, &TxConfig, p->tot_len);
pbuf_free(p);
HAL_Delay(1);
return Len;
}
int EthRdPacket(uint8_t* pBuff)
{
int Len;
HAL_StatusTypeDef state;
struct pbuf *p = NULL;
state = HAL_ETH_ReadData(&heth, (void **)&p);
Len = heth.RxDescList.RxDataLength;
memcpy(pBuff,( uint8_t * )(p->payload),Len);
pbuf_free(p);
return Len;
}
ちなみに、EtherCatマスタの実装は、OpenEtherCATSocietyのSOEMを使わせて頂きました。
動作確認
Wiresharkというネットワークアナライザを用いてEtherCatマスタ基板から流れてくるパケットを監視してみました。
今回はデバッグのため、PCを接続しているのでEtherCATスレーブと通信している様子は確認できませんが、ハードウェア面では、しっかり動いてそう。
おわりに
今回は、JLCPCBでEtherCATマスタ基板を発注してみた所感について書いてみました。
リーズナブルにサクッとPCBAssemblyを試してみたい方にはとてもおすすめです。
初めてBlogを書いているので、読みにくい・分かりにくいところがあるかと思いますが、ご容赦ください。