Baumkuchen’s Workshop

バイオリンと電子工作、DIY、ジョギングなど。

作りかけの自作CNCを完成させます#2-制御基板

まず、制御基板&コントローラソフトから着手します。

 

baum-kuchen.hatenablog.com 

システム構成

方針を受けて、もう少し具体化します。全体のシステムブロックを書くとこんな感じです。Aruduinoの代わりにPICを使っただけだろうって言えばそれまですが。

 

f:id:Baum_kuchen:20210812111552p:plain

ドライバボードの整理

作りかけのドライバボードは、機能をシンプルに、

  • コントローラからのSTEP/DIRコマンドに対応
  • リミットスイッチが入ったらコントローラに出力
  • マニュアルでのExtend/Retract機能は残す

とし、一部回路、ソフトを改修しました。(細部割愛)

コントロールボード製作

USB PICの選定

Controller用として、USBの使えるPICは幾つかありますが、最も基本的な(というか使ったことのある)PIC18F14K50を使うことにします。IOピンが足りるか、ピン割り付けを最初に考えましたが、なんとかギリギリで行けそうです。ちなみに、DIP28のPIC18F2455の方がIO数多いはずですが、ピン数増加に対し使えるIO数があまり増えないのと、余分なIOがあってもあまり用途が思いつかないので、最小構成で行くことにしました。

f:id:Baum_kuchen:20210812112151p:plain

 回路図

f:id:Baum_kuchen:20210812112611p:plain

基板設計&製作

例によって、小型のユニバーサル基板上に回路をレイアウトしました。f:id:Baum_kuchen:20210812113004p:plain

実際に製作した基板です。

f:id:Baum_kuchen:20210812153033j:plain

コントロールソフト製作

USB CDCデバイス構築

以前、データロガーを作ったときと同じく、MLA(Michrochip Libraries for Aapplication)の中から、CDC(Communication Device Class)のSerial Emulatorのサンプルコードを使って、USB→シリアルの部分を実装します。実際には、シリアル出力する代わりに、そこにGrblをベースとしたコントローラソフトに出力するつもり。  

baum-kuchen.hatenablog.com

MLAの最新バージョンは、v2018-11-26ですが、 今回使うのは、v2017_03_06版です。フレームワークとして、framework/usbフォルダ以下の次のファイルを、プロジェクトに登録(コピーは不要)。

  • src/usb_device.c
  • src/usb_device_cdc.c
  • inc/usb_device_cdc.h

 また、apps/usb/device/cdc_serial_emulator/framework/demo_src/フォルダのサンプルプログラムから、下記をコピーしてプロジェクトに登録。これで、一旦は、Buildが通るはず。 

  • app_device_cdc_to_uart.c - Grbl実装に合わせ修正予定
  • app_device_cdc_to_uart.h - 基本変更なし
  • usb_config.h - 基本変更なし
  • usb_descriptors.c - 基本変更なし
  • usb_events.c - 基本変更なし

 でしたが、今回、はまったのはxc8コンパイラーをv2.10にバージョンアップしていたことによるものです*1

以前通っていたプロジェクトのビルドも、Framework部分で次のようなエラーが出てコンパイルが通りません。

f:id:Baum_kuchen:20210812164815p:plain

結局、コンパイルオプション(C standard)をC90としないといけませんでした。xc8のデフォルトはC99になっていました*2。MLAは、C90対応だったみたいです。

原因が分かって、ビルドは通りましたが、Program spaceの使用率が54.8%とUSB部だけでかなり行ってます。Grblは、Aruduinoに使われているATmega328Pのメモリ(16Kbyte)の大半を占めるようですので、かなり無理筋のように思えてきました。

f:id:Baum_kuchen:20210812164552p:plain

Grblの実装の課題はありますが、まずはテスト。ビルドが通ったら、あとは簡単。USBをつなぐと、PCから無事COMポートとして認識されました。

f:id:Baum_kuchen:20210812183716j:plain

f:id:Baum_kuchen:20210812183154p:plain

今後について

まずは、GrblのPICへのポーティング*3を進めます。懸念としては、PICのメモリ容量をオーバするかもしれませんが、どこまでコードを削減できるか分かりませんが、試行を続けます。

 

*1:パソコンを更新し、最新版をインストールしてました。ちなみに、現時点での最新版は、v2.32

*2:正確に言えばMPLAB Xがプロジェクトを作るとき、デフォルトでC99設定としている

*3:ネットで探したけど、あまり例が無さそうでした