G9006によるCPU間通信で、PCL6046を遠隔制御する(ソフトウェアサンプル)

概要

G9006はひとつのLSIで複数のMotionnetアドレスを保有することができます。
これにより4バイト単位のI/O通信を 保有するアドレス分だけ占有でき、最大で32バイトのデータの送受信をサイクリック通信だけで行えます。
これを利用し、PCL6046に対する簡単な遠隔制御を実施します。


本資料は、Raspberry Pi財団のRP2040を搭載した開発基板「Raspberry Pi PICO」※1によってG9006を制御し、小規模のデータの送受信を行い、PCL6046の制御を行うものですが、RP2040によるPCL6046の制御は別の資料「PCL6046をRaspberry Pi PICOから制御する」に記載があることから、ここでは省略します。

※1 Raspberry Pi は Raspberry Pi Ltd の商標です 。“Raspberry Pi is a trademark of Raspberry Pi Ltd”

要件/開発環境

ソフトウェア

開発は、OSとしてWindows10 Pro を使用

ARM GCC Compiler コンパイラ
CMake ビルド自動化ツール
Visual Studio Code エディタ
Build Tools for Visual Studio ビルドツール
Python 3.9 Pythonの実行環境
Git for Windows GitHubからSDKをダウンロードするツール

各ツール類の入手先やインストール手順に関しては、この資料での解説は省略します。

ハードウェア

Raspberry Pi Pico ボード (秋月電子通商)
G9006評価基板 (日本パルスモーター)
G9001A-EV (Motionnetスターターキット) (日本パルスモーター)
PCL6046ピッチ変換基板
(PCL6045BLピッチ変換基板でも可)
(日本パルスモーター)
(日本パルスモーター)
AD1431 (ドライバ)
 (TB67S249FTGドライバモジュール」でも可)
(日本パルスモーター)
(秋月電子通商)
PFC30-24V4 (ステッピングモーター)
(バイポーラ駆動なら他社製品でも可)
(日本パルスモーター)

動作概要

本サンプルは、G9006を介してローカル側に接続されているPCL6046を制御するものです。
ここでG9006は、G9004Aと違ってバスのエミュレーションを行うものではありません。

このため、G9001A側のCPUに、ローカル側のPCLを直接制御するようなプログラムを実装するわけではありません。
G9006の役割は、G9001A側のCPUからのデータを、G9006側のCPUへ引き渡すことにあります。

よって本サンプルでは、G9001A側CPUから、G9006側CPUへ、PCL6046の動作に関する指示を送信します。
指示を受け取ったG9006側CPUは、指示内容に相当する動作を実行することで、PCL6046を制御します。

つまり、PCL6046の制御プログラムは G9006側のCPUに実装されます。


本サンプルでは次のような動作を行います。
  • PCL6046でX-Yテーブルを制御します。
  • G9001A側のCPU(PC)からは、X-Yテーブルの座標データがサイクリック通信で送信されます。
  • Raspberry Pi PICOは、G9006が受信したサイクリックデータに変化があると、これを取り込みます。
  • 取り込んだデータをX-Yテーブルの目標位置とし、PCL6046を制御します。
  • Raspberry Pi PICOは、常にPCL6046のX軸、Y軸の現在位置カウンタを読み出します。
  • 読み出した現在位置カウンタデータは、G9006の所定のアドレスへ書き込みます。
  • G9006へ書き込まれた現在位置カウンタデータは、サイクリック通信でG9001Aへ返送されます。


G9006は、Motionnetアドレスを3つ保有させているので、12バイト(4ポート×3)のデータをG9001Aと共有しています。
データの送受信は全てサイクリック通信で行われるため、G9004Aでの制御では必須なデータ通信に関する制御は不要です。

このためG9001A側CPUのソフトウェアは大幅に簡略化することができます。

接続情報

ソフトウェアサンプル

ファイル構成

main.c メインとなる動作のシーケンスを記載。
main.h 各種レジスタの定数を記載。
pcl_access.c パラレルバスアクセス関数を記載。
pcl_access.h パラレルバスアクセス関数の宣言を記載。
PCLのアドレス、書き込みデータを分割する際に使用する構造体を定義。
g9006_access.c SPIアクセス関数を記載。
g9006_access.h SPIアクセス関数の宣言を記載。
parallel_bus_module.pio パラレルバスアクセスの機能を記載。
spi_module.pio SPIアクセスの機能を記載。
CmakeLists.txt コンパイルの定義。
pico_sdk_import.cmake コンパイルの定義。
stdafx.c Raspberry Pi PICO用のソース。
stdafx.h Raspberry Pi PICO用のソース。

資料