概要
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に実装されます。
本サンプルでは次のような動作を行います。
G9006は、Motionnetアドレスを3つ保有させているので、12バイト(4ポート×3)のデータをG9001Aと共有しています。
データの送受信は全てサイクリック通信で行われるため、G9004Aでの制御では必須なデータ通信に関する制御は不要です。
このためG9001A側CPUのソフトウェアは大幅に簡略化することができます。
ここで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用のソース。 |