パラレルポートは無くならない。。

勝手リンクします。ゴメンナサイ。。



PM-MPCIE1T3 MPCIE to 3x PCIEx1 変換アダプター

MiniPCI-EをPCI-Ex1スロット3本に変換するスロットです。

PCI-Eパラレルポートカードは市販されてるので、多分(自分で作動確認したわけではないので)つかえるのでは?と思います。

MiniPCI-Eだと、ノートパソコンにも搭載されている機種があるはず。

パラレルポートを使ったLinuxCNCやMach3を使えるようになります。

また、PCI-Ex1が3本もあるのでLinuxCNCに外部パルスジェネレータと、高速直交エンコーダ入力ができるようになる、Mesaカードも接続可能に。

元々半導体メーカーから、PCI PCI-EブリッジとゆうICが販売されてたので、PCI自体ブリッジICを噛ませればそのままPCI-Eに突っ込めるんだろうなぁ、と漠然とは思ってましたが、物理的なコネクタとか、、基板を起こす能力も無いので、、^^;

こうゆうアダプタの類はチョット高価なので、NCマシン制御用には今中古で出ている事務で使われたリース落ちのパラレルポートの付いたPCを調達するのが一番安いのかも。。

チョット新し目の事務用PCだと、もうパラレルポートすらないものもあるので。
国内の会社からパラレルポートカードを買うよりも、多分中古パソコンの方がお値打ちかと。。。

ただ、LinuxCNCの場合、Latencyの問題もあるので、前の世代のAtom基板が手に入ればそれに越したことはありません。今のPCは、NC制御の邪魔となる省消費電力機能がPC自体に割り込みを掛けて、、、。。。
スポンサーサイト

テーマ : 自作・改造
ジャンル : コンピュータ

ギヤードDCモーターをLinuxCNCのパラレルポート入出力で制御する2

メーカーフェアでは動かないとゆう失敗をしてしまいました、が、帰宅後動かしてみるとちゃんと動く。

で、動画を取ってみる。。



ちゃんと動くではないですか、、。
持ってったPCの設定が悪かったのかも。

動画で使ったフルHブリッジのモータードライバICはSTmicroのL6203ですが、外付け部品が少々多いのとIC自体の入手性と価格があまりお値打ちではないので、その後動かしたTB6643KQでの回路図を載せておきます。

TB6643KQは秋月電子にて、取り扱いがあり、入手性に優れています。
http://akizukidenshi.com/catalog/g/gI-07688/

単価的にとても魅力的なフルHブリッジのDCモータードライバです。

クリックすると大きくなります。

tb6643kq.png

基本的な外付け部品はパスコンと電源安定用の電解コンデンサのみです。

L6203を用いた場合を基準にHALファイルを書いてあるので、PWM/PDM入力のIN1,2には反転バッファを取り付けます。
反転バッファは反転できれば何でも良いです。入力信号のスレッショルドを確認して下さい。
5V信号であれば通常の74HC04なり、14なりで良いです。

TB6643KQは、2つある入力が双方HIの時にブレーキが掛かります。

ブレーキの作用がないと、モーターのローターの慣性の力によって、制御したい位置より余分に回ってしまいます。


急峻な作動をさせると、モータードライバが電源にモーター電流を戻すので、電源電圧が逆起電力?により、跳ね上がる場合があります。

急峻な作動をさせる場合には、コイルとコンデンサによって、フィルタを掛け、また、逆起に依るサージをバリスタ等に食わせる等の対策が必要かと思われます。
また、急激に電流が消費されるので、モーター電源部には大きめのコンデンサが必要だと思われます。

DCモータードライバ自体の回路はこれだけです。

では、Halファイル。
実はLinuxCNC起動時に標準で入ってるSampleConfigurationの中に入ってるetch-servoとゆうコンフィグファイルのHALファイルが元、X軸分しか修正してありません。

一度サンプルコンフィグからetch-servoを立ち上げて、ホームフォルダ内のlinuxcnc>configs>etch-servoのHALファイルにコピーペーストするとよいでしょう。また、コピペする前に、元ファイルとの違いを確認しておくとHALファイルの理解に役立つかも。。

etch.hal


# load realtime modules
# kinematics
loadrt trivkins
loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES
loadrt hal_parport cfg="0x378"
loadrt encoder num_chan=3
loadrt pid num_chan=3
loadrt pwmgen output_type=2,1,1
loadrt ddt count=6
loadrt constant count=1

show pin *par*

# define the order of execution for RT code
addf parport.0.read base-thread
addf encoder.update-counters base-thread
addf pwmgen.make-pulses base-thread
addf parport.0.write base-thread

addf encoder.capture-position servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf pid.0.do-pid-calcs servo-thread
addf pid.1.do-pid-calcs servo-thread
addf pid.2.do-pid-calcs servo-thread
addf constant.0 servo-thread
addf pwmgen.update servo-thread
addf ddt.0 servo-thread
addf ddt.1 servo-thread
addf ddt.2 servo-thread
addf ddt.3 servo-thread
addf ddt.4 servo-thread
addf ddt.5 servo-thread

# hook stuff together

setp encoder.0.position-scale [AXIS_0]INPUT_SCALE
setp encoder.1.position-scale [AXIS_1]INPUT_SCALE
setp encoder.1.position-scale [AXIS_1]INPUT_SCALE

net enc0A encoder.0.phase-A <= parport.0.pin-10-in
net enc0B encoder.0.phase-B <= parport.0.pin-11-in
net enc1A encoder.1.phase-A <= parport.0.pin-12-in
net enc1B encoder.1.phase-B <= parport.0.pin-13-in
net enc2A encoder.2.phase-A <= parport.0.pin-15-in
#net enc2B encoder.2.phase-B <= parport.0.pin-16-in

net Xpos-fb <= encoder.0.position
net Ypos-fb <= encoder.1.position
net Zpos-fb <= encoder.2.position

net Xpos-fb => pid.0.feedback
net Ypos-fb => pid.1.feedback
net Zpos-fb => pid.2.feedback
net Xpos-fb => axis.0.motor-pos-fb
net Ypos-fb => axis.1.motor-pos-fb
net Zpos-fb => axis.2.motor-pos-fb

net Xvel-cmd <= pid.0.output
net Yvel-cmd <= pid.1.output
net Zvel-cmd <= pid.2.output

net Xvel-cmd => pwmgen.0.value
net Yvel-cmd => pwmgen.1.value
net Zvel-cmd => pwmgen.2.value

net Xpwmup pwmgen.0.up
net Xpwmdown pwmgen.0.down
net Ypwm pwmgen.1.pwm
net Zpwm pwmgen.2.pwm


net Ydir <= pwmgen.1.dir
net Zdir <= pwmgen.2.dir




#net Xpwmup => parport.0.pin-01-out
net Xpwmup => parport.0.pin-02-out
setp parport.0.pin-04-out-invert TRUE
net Xpwmdown => parport.0.pin-03-out

net Ydir => parport.0.pin-04-out
net Ydir => parport.0.pin-05-out
setp parport.0.pin-07-out-invert TRUE
net Ypwm => parport.0.pin-06-out

net Zdir => parport.0.pin-07-out
net Zdir => parport.0.pin-08-out
setp parport.0.pin-07-out-invert TRUE
net Zpwm => parport.0.pin-09-out

setp pid.0.maxoutput 1.0
setp pid.1.maxoutput 1.0
setp pid.2.maxoutput 1.0

# the values below come from the ini
setp pid.0.Pgain [AXIS_0]P
setp pid.0.Igain [AXIS_0]I
setp pid.0.Dgain [AXIS_0]D
setp pid.0.bias [AXIS_0]BIAS
setp pid.0.FF0 [AXIS_0]FF0
setp pid.0.FF1 [AXIS_0]FF1
setp pid.0.FF2 [AXIS_0]FF2
# deadband should be just over 1 count
setp pid.0.deadband [AXIS_0]DEADBAND

setp pid.1.Pgain [AXIS_1]P
setp pid.1.Igain [AXIS_1]I
setp pid.1.Dgain [AXIS_1]D
setp pid.1.bias [AXIS_1]BIAS
setp pid.1.FF0 [AXIS_1]FF0
setp pid.1.FF1 [AXIS_1]FF1
setp pid.1.FF2 [AXIS_1]FF2
# deadband should be just over 1 count
setp pid.1.deadband [AXIS_1]DEADBAND

setp pid.2.Pgain [AXIS_2]P
setp pid.2.Igain [AXIS_2]I
setp pid.2.Dgain [AXIS_2]D
setp pid.2.bias [AXIS_2]BIAS
setp pid.2.FF0 [AXIS_2]FF0
setp pid.2.FF1 [AXIS_2]FF1
setp pid.2.FF2 [AXIS_2]FF2
# deadband should be just over 1 count
setp pid.2.deadband [AXIS_2]DEADBAND

net Xpos-cmd <= axis.0.motor-pos-cmd
net Ypos-cmd <= axis.1.motor-pos-cmd
net Zpos-cmd <= axis.2.motor-pos-cmd
net Xpos-cmd => pid.0.command
net Ypos-cmd => pid.1.command
net Zpos-cmd => pid.2.command
net Xenable <= axis.0.amp-enable-out
net Yenable <= axis.1.amp-enable-out
net Zenable <= axis.2.amp-enable-out
net Xenable => pid.0.enable
net Xenable => pwmgen.0.enable
net Yenable => pid.1.enable
net Yenable => pwmgen.1.enable
net Zenable => pid.2.enable
net Zenable => pwmgen.2.enable

net estop-loop iocontrol.0.user-enable-out iocontrol.0.emc-enable-in

net Xpos-cmd => ddt.0.in
net Xvel <= ddt.0.out
net Xvel => ddt.1.in
net Xacc <= ddt.1.out
net Ypos-cmd => ddt.2.in
net Yvel <= ddt.2.out
net Yvel => ddt.3.in
net Yacc <= ddt.3.out
net Zpos-cmd => ddt.4.in
net Zvel <= ddt.4.out
net Zvel => ddt.5.in
net Zacc <= ddt.5.out

net tool-prep-loop iocontrol.0.tool-prepare iocontrol.0.tool-prepared
net tool-change-loop iocontrol.0.tool-change iocontrol.0.tool-changed


次にiniファイル
これも、HALファイルと同じように。。
コピペしたHALファイルの名前がetch.halでないと動きません。。
元のiniではインチになってますが、mm単位に変更してあります。
あとはチョコチョコと。。
元のファイルと見比べるとわかると思います。


etch.ini


# EMC controller parameters for generic controller. Make these what you need
# for your system.

# General note: Comments can either be preceded with a # or ; - either is
# acceptable, although # is in keeping with most linux config files.

# Settings with a + at the front of the comment are likely needed to get
# changed by the user.
# Settings with a - at the front are highly unneeded to be changed
###############################################################################
# General section
###############################################################################
[EMC]

#- Version of this INI file
VERSION = $Revision$

#+ Name of machine, for use with display, etc.
MACHINE = LinuxCNC-ETCH-SERVO

#+ Debug level, 0 means no messages. See src/emc/nml_int/emcglb.h for others
DEBUG = 0
# DEBUG = 0x00000007
# DEBUG = 0x7FFFFFFF

###############################################################################
# Sections for display options
###############################################################################
[DISPLAY]

#+ Name of display program, e.g., xemc
DISPLAY = axis
# DISPLAY = usrmot
# DISPLAY = mini
# DISPLAY = tkemc
# Cycle time, in seconds, that display will sleep between polls
CYCLE_TIME = 0.200

#- Path to help file
HELP_FILE = doc/help.txt

#- Initial display setting for position, RELATIVE or MACHINE
POSITION_OFFSET = RELATIVE

#- Initial display setting for position, COMMANDED or ACTUAL
POSITION_FEEDBACK = ACTUAL

#+ Highest value that will be allowed for feed override, 1.0 = 100%
MAX_FEED_OVERRIDE = 1

#- Prefix to be used
PROGRAM_PREFIX = /home/andypugh/linuxcnc/nc_files

#- Introductory graphic
INTRO_GRAPHIC = linuxcnc.gif
INTRO_TIME = 5

# Editor to be used with Axis
EDITOR = gedit


###############################################################################
# Task controller section
###############################################################################
[TASK]

# Name of task controller program, e.g., milltask
TASK = milltask

#- Cycle time, in seconds, that task controller will sleep between polls
CYCLE_TIME = 0.010

###############################################################################
# Part program interpreter section
###############################################################################
[RS274NGC]

#- File containing interpreter variables
PARAMETER_FILE = etch.var

###############################################################################
# Motion control section
###############################################################################
[EMCMOT]

#- Name of the motion controller to use (only one exists for nontrivkins)
EMCMOT = motmod

#- Timeout for comm to emcmot, in seconds
COMM_TIMEOUT = 1.0

#- Interval between tries to emcmot, in seconds
COMM_WAIT = 0.010

#+ Base task period, in nanosecs - this is the fastest thread in the machine
BASE_PERIOD = 20000
#- Servo task period, in nanosecs - will be rounded to an int multiple of BASE_PERIOD
SERVO_PERIOD = 1000000

###############################################################################
# Hardware Abstraction Layer section
###############################################################################
[HAL]

# The run script first uses halcmd to execute any HALFILE
# files, and then to execute any individual HALCMD commands.
#

# list of hal config files to run through halcmd
#+ files are executed in the order in which they appear
HALFILE = etch.hal

#- list of halcmd commands to execute
# commands are executed in the order in which they appear
#HALCMD = save neta

###############################################################################
# Trajectory planner section
###############################################################################
[TRAJ]
#+ machine specific settings
AXES = 3
# COORDINATES = X Y Z A B C
COORDINATES = X Y Z
HOME = 0 0 0
LINEAR_UNITS = mm
ANGULAR_UNITS = degree
CYCLE_TIME = 0.010
DEFAULT_VELOCITY = 1
MAX_VELOCITY = 8
DEFAULT_ACCELERATION = 10
MAX_ACCELERATION = 20

###############################################################################
# Axes sections
###############################################################################

#+ First axis
[AXIS_0]

TYPE = LINEAR
HOME = 0.000
MAX_VELOCITY = 8
MAX_ACCELERATION = 20
BACKLASH = 0.000
INPUT_SCALE = 1230.6666
ENCODER_SCALE = 1230.6666
OUTPUT_SCALE = 1.000
MIN_LIMIT = 0.0
MAX_LIMIT = 200
FERROR = 0.200
MIN_FERROR = 0.100
HOME_OFFSET = 0.0
HOME_SEARCH_VEL = 0.0
HOME_LATCH_VEL = 0.0
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = NO
P = 150
I = 100
D = 0.1
BIAS = 0.0
FF0 = 0
FF1 = 1
FF2 = 0.0
DEADBAND=.002

#+ Second axis
[AXIS_1]

TYPE = LINEAR
HOME = 0.000
MAX_VELOCITY = 8.3
MAX_ACCELERATION = 15
BACKLASH = 0.000
INPUT_SCALE = 1700
OUTPUT_SCALE = 1.000
MIN_LIMIT = 0
MAX_LIMIT = 120
FERROR = 0.200
MIN_FERROR = 0.100
HOME_OFFSET = 0.0
HOME_SEARCH_VEL = 0.0
HOME_LATCH_VEL = 0.0
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = NO
P = 3
I = 2
D = 0.2
BIAS = 0.0
FF0 = 0
FF1 = 1
FF2 = 0.0
DEADBAND=.002

[AXIS_2]

TYPE = LINEAR
HOME = 0.000
MAX_VELOCITY = 8.3
MAX_ACCELERATION = 15
BACKLASH = 0.000
INPUT_SCALE = 1700
OUTPUT_SCALE = 1.000
MIN_LIMIT = 0
MAX_LIMIT = 120
FERROR = 0.200
MIN_FERROR = 0.100
HOME_OFFSET = 0.0
HOME_SEARCH_VEL = 0.0
HOME_LATCH_VEL = 0.0
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = NO
P = 150
I = 100
D = 0.1
BIAS = 0.0
FF0 = 0
FF1 = 1
FF2 = 0.0
DEADBAND=.002

###############################################################################
# section for main IO controller parameters
###############################################################################
[EMCIO]

#- Name of IO controller program, e.g., io
EMCIO = io

#- cycle time, in seconds
CYCLE_TIME = 0.100

#- tool table file
TOOL_TABLE = etch.tbl




次は、モーターとエンコーダーのつなぎ方。。




使用したモーターは朱雀技研さんのDCギヤードモータ+エンコーダ KS5N-IG36P-071-EN とゆうもの。yahooの朱雀技研さんの販売サイトにも、朱雀技研さんのアマゾンの販売サイトにもエンコーダー付きはありませんが、問い合わせれば、購入可能です。

モーターとしては380サイズ?となるのでしょうか?

モーターの配線に従い、モーター自体の電源はモータードライバのOUT1,2へ。
ホールセンサの作動電圧が3.5V~20Vとなってるので、電源に5Vを突っ込み、出力線は1kΩの抵抗で5V電源にて吊ります。んで、このホールセンサの出力信号をパラレルポートに突っ込みます。

一応パラレルポートにはバッファを噛ましてあるので、ソコに接続。

上記HALファイル内の記述に、

net enc0A encoder.0.phase-A <= parport.0.pin-10-in
net enc0B encoder.0.phase-B <= parport.0.pin-11-in

としてあるので、エンコーダー0番のA相入力はパラレルポートの10番ピンでインプット、エンコーダー0番のB相入力はパラレルポートの11番のインプット    へ入力。


モータードライバへのPWM/PDM出力は上記HALファイルに

net Xpwmup => parport.0.pin-02-out
net Xpwmdown => parport.0.pin-03-out

と記述してあるので、パラレルポート0番の2番ピンの出力がXpwmupとゆう信号なので、モータードライバのIN1,に、Xpwmdownとゆう信号がパラレルポート0番の3番ピンに接続されてるので、モータードライバのIN2に接続、、です。

モーターの回りがオカシイ場合は、モーターの配線の赤と黒を入れ替えてみます。モーターの回転方向とエンコーダーのセンスする回転方向が逆だと、上手く回りません。









今回元々のetch-servoの設定から書き換えた部分はHALコンポーネントのPWMgenの部分。

PWMgenには出力タイプが3種類有り、、、

アウトプットタイプ0では、一本の信号でhighとLowの信号で、どちらかの方向だけの出力。使ったこと無いので憶測ですが、絶えず右左がオンオフされてる状態、、かも。。

アウトプットタイプタイプ1では、PWMの出力信号線一本と回転方向を示すDIRの出力信号線一本、計2本の出力タイプ。タイプ0では絶得ずカチカチするスイッチ的な物から、回転方向(DIR出力)と、出力の強さ(pwm出力)が出力でき、何も触らないetch-servoの設定がこの設定。ですが、今回使用するHブリッジDCモータードライバICのインターフェースとは違うのでここを変更しました。

アウトプットタイプ2は2つのPWM信号出力を使い、回転方向により、出力される信号線が変わります。HALコンポーネントのPWMの解説にはほとんどのHブリッジの駆動に適している、とあります。今回の作例、駆動例のモータードライバICも、このHブリッジで、入力もPWM入力を許容し、自動でHブリッジの短絡を防ぐデッドタイム生成機能を備えた物で、このタイプ2を使用します。

この出力タイプの設定は上記HALファイルの比較的最初の所にあるHALコンポーネントの読み込み、loadrt(リアルタイムコンポーネンツの読み込み)時のオプションで設定します。

上記HALファイルでは、
loadrt pwmgen output_type=2,1,1

とありますが、=の後の数字が、出力タイプの設定です。
上記記述で、pwmgen0が出力タイプ2pwmgen1が出力タイプ1,pwmgen2が出力タイプ1 と指定したことになります。

まだまだ、ホントの所コンポーネントは使える入出力「ピン」やら、入出力「パラメータ」とか、入出力「関数」などが、その個々の「HALコンポーネント(機能ブロック)」によって、定義されており、このピンやパラメータをHALファイルとゆうスクリプトにて、各HALコンポーネントの信号を「net(接続)」したり「setp(設定数値を入力)」したりして、機能を作る事ができます。



使えるコンポーネントはかなりの数があり、(HAL Components)LinuxCNCのバージョンによって使えないものも時々有りますが、ほぼ、使用可能だと思われます。

また、プログラムが書けるのであれば、このHALコンポーネントは作成可能であり、その為のチュートリアルもLinuxCNCのサイト内に有ります。


高性能で自由度が高すぎて逆に難しくなってるキライはありますが、Gコードと同じで書き方だけ覚えてしまえば通常のプログラミング言語を扱うよりも、とても簡単に自分のNCマシンに最適な動かし方を「作る」事ができるはずです。。




L6203.png

最後にL6203を使った時の回路図を載せておきます。
データシートのサンプルと同じ数値の部品がなかったので、取り敢えずありあわせの部品を使用してます。
ダイオードが200V3Aとなってますが、実際には1N4007を使いました。

HALファイルの設定はTB6643、L6203共々この記事内の設定で動きます。
どちらかとゆうとL6203の作動にTB6643の作動を合わせた形となります。

TB6643、L6203をこの回路図での作成は十分データシートを読んだ上に自己責任の上で実行してください。
また、この記事はモータードライバ自体の説明を記載してないので、十分データシートを読み作動を確認してください。



テーマ : 自作・改造
ジャンル : コンピュータ

Maker Faire Tokyo 2014で出展してきました。

11月23,24日と東京ビックサイトで開催されたMakerFaireTokyo2014に出展してきました。
http://makezine.jp/event/mft2014/


今回の出展、木製CNC自作名義ではなく、「シマ技!」名義での出展です。

「シマ技!」とはなんぞや?と思われるかもしれませんが、このブログ上でも時々記事にさせていただくシマリス技研さんの略称です。

んで、今回の展示の趣旨がLinuxCNCの紹介、とゆうことだったのでお手伝いさせていただきました。

と、ゆうか、シマリス技研さんが、Twitter上で自分の展示だけではテーブル開いちゃうなぁ、、とかゆってたので、1軸フィードバックスライド位は持ってけるよ?といったやり取りからの今回のお手伝い。

私個人の活動としてはとしては主催側のMake:、MakerFaireの趣旨とのズレがかなりあるんじゃないかなぁ、と思っておりました。
それは、作品らしい作品を作ってないし、そもそものMakerってゆうカテゴリからはズレズレ?なイメージが^^;

まぁそれはともかく今回はお手伝い、ってことで。。。


最初に書いときますが、結構な方々に見ていただき話をさせていただき、ほとんど他出展を見ることができず、残念でした、が、今度は見学者として来た時にでも。。

また、ネット上に結構他出展の記事があるので、私自身補間しております。。^^;



画像はクリックすると大きくなります。

IMG_1644pp.jpg

コミケとかで建物の画像が出てきますが、アホみたいにデカかった。。

IMG_1637pp.jpg

会場はいくつか有るホールの一つで開催されました。
もう、人大杉で、シマリスさんが持ってきてた二酸化炭素濃度計が非常に高い数値を示しており、かなり会場内は息苦しかったです。はい。

IMG_1647pp.jpg

二日目の展示スペースです。
シマリス技研さんは、ハンダゴテヒーターをホットエンドヒーターに使用した3DプリンタとLinnuxCNCで動かす6軸ロボットアームを展示。ロボットアームも全面のテーブルに置けばよかったのに、、と思いつつ。。。

私は直交磁気式リニアエンコーダーを装着した1軸スライドと、DCギヤードモーターにロータリーエンコーダーが付いたモーターを、LinuxCNCでフィードバック位置制御、、、しようとしてたのですが、会場では上手く作動せずT.T

画像にある通り、現物を置いといて、の、ノートPC上での作動動画表示となってしまいました。

センサICなどはしっかりESD対策しなきゃいけませんね。。

会場では、ちいさな木製ギヤを配ったり、シマリスさんは、LinuxCNC非公式翻訳のPCにインストールせずともおためしできるLiveDVDの配布をしておりました。
内容としては、シマリス技研さんのページのLinuxCNCインストールメディアの配布ページのイメージをDVDとして焼いたものと同等だと思われます。

シマリスさんは、はやりの3Dプリンタの制御と6軸ロボットアームの展示を通して色々なものをGコードとゆう、簡易なスクリプトでの制御を、私はUSB接続のNCコントローラーやMach3では正式にサポートされてないホビーNC用途用として使えるNCコントロールソフトウエアの中で唯一フィードバック制御を正式にサポートしているLinuxCNCを紹介、展示させていただきました。


展示スペースにお越し頂いた方々と、色々とお話をさせていただいた事が今回の出展の一番の収穫で、案外、自作NCをされてる方が多数。

結構駆動用モーターにサーボパックを利用されてる人達も多く、NC沼にずっぽりハマっちゃってる方も。。

また、中華NCを購入されて、そのNCに付いているソフトウエアのライセンスファイルを使い、、、、、、、、、使用されてる方も。。そ、それって、ライセンス違反なので、、、は???

中華NC屋が、そんなことするから、次期ソフトが高額になってしまう。。

ライセンス違反だし、何しろ加工作動中に触ると止まるNC制御ソフトを使うくらいなら、オープンソースで使用出来るLinuxCNCをつかえ、ば、、と。。

あと、割りとMach3ユーザーや、国内ではオリジナルマインドが販売しているUSBCNC等々を使用されてる方が多数。。

Mach3はLinuxCNC(EMC2)の派生ソフトで、LinuxCNCをウインドウズで使用出来るように派生したのがMach3(とMach3のARTSoftのページに書いてある)とゆうことを話すと驚かれる方も多く、自分が使ってるソフトがどのように制御されてるか、案外その辺のことは置いといて、、のご使用の方も。。

もちろん、NCの事を知らないの方が大多数で、3Dプリンタも、NC制御機器の中の一つとゆうことから、の説明となりました。


ここで、文字を大きくして言いたい。

LinuxCNC良いですよ!!!

IMG_1631pp.jpg

このサイトでリンクさせて頂いてるmultipleろぼっとさんも出展されてました。。

色んな意味(良い意味)で、すげぃ!。

詳細は彼のブログで。。


IMG_1654pp.jpg

出展者パスと、東芝のブースで頂いたFlashAirの同人誌です。

この東芝のFlashAir、普通に使ってもWifi機能でデジカメとかの画像データとかをデジカメ自体に入れたままスマホやPCから画像を読み出すことが便利なんですが、隠し機能を使うと、Wifiでコントロール出来るGPIO5ポートが制御でき、また、Wifiから使用出来るSPIマスタとして、コントロールできるようです。(ようです、とゆうのは実際私が試してないから)

と、ゆうことはですよ?SPIスレーブ型インターフェースのステッピングモータードライバのL6470やL6480などなど、直接制御できるので、は??

ホントの所、東芝製のSDカードなので東芝製のSPIインターフェース型のステッパモータードライバって言いたい所なんだけど、個人にはなかなか手にはいらなくって。。^^;


詳しくは下記サイトへ。。
https://flashair-developers.com/ja/




会場で初めてお会いしたシマリスさん。とてもお世話になりました。私個人ではこのようなイベントに参加する事は無いと思いますの、で、このような機会を与えてくださったことに非常に感謝しております。ありがとうございました。

また、展示を見ていってくれた皆さん、会場で実際に会ってお話させていただいたみなさん、ありがとうございました。。。

























IMG_1645pp.jpg


2014豆腐&大豆食品フェアとの同時開催となり、かなりの出展者が豆腐を堪能された模様。。
私も醤油とおろしショウガを持って参戦するつもりでしたが、とても多くの方々とお話をさせていただいたので、参戦ならず、、、非常に残念でなりません。どうも、この豆腐フェア、次回は再来年とのこと。。むー。。





テーマ : 自作・改造
ジャンル : コンピュータ

ギヤードDCモーターをLinuxCNCのパラレルポート入出力で制御する。


LinuxCNCのパラレルポート入出力を使用してギヤードDCモーターをフィードバック制御してみました。



LinuxCNCのPWMGENからの出力をパラレルポート、バッファICを経由して、フルブリッジモータードライバに入力。
また、フィードバックはDCモーターの軸に取り付けられたロータリーエンコーダーの出力をパラレルポートに入力。

動画のHALスコープに現れている波形はLinuxCNCが出力しているPWM/PDM信号です。

今回の検証ではNC駆動を考えてギヤードモーターを選択しましたが、ロータリーエンコーダを取り付けたDCモーターなら、制御が可能だと思われます。

回転数を上げた時に電源の保護回路が働き数回、電源が落ちました。大きなモーターで急激な作動をさせると、多分、電圧の変動が激しくモータードライバに取り付けた小さなコンデンサ程度では、無理なのでしょう。。

これは、ステッピングモーターの駆動にも言えることですが、DCモーターに比べ電源電圧変動は少ないので(ないわけじゃない)電源が落ちるまで行ってないだけ、、だと思います。(なので、モーター電源から何も対策をせずにレギュレートしてロジック電源を取るのはちょっとマズイ。。)

通常LinuxCNCをインストールして使う、となると市販のステッピングモーターでの駆動となるので(StepConfigWizardを使用)DCモーターをフィードバックさせて、DCサーボモーターとして使うような使い方は一般的ではないのかもしれません。
また、フィードバック制御の設定をしなければならないので、、、、。

LinuxCNC自体、出力できる信号が色々とあるので、シリアル入力のサーボアンプや、ステッピングモータードライバでないのであれば、大抵のモータードライバを駆動できるのでは??と思います。(もちろん電気特性をあわせなければなりませんが)


奇しくもルネサスが「ルネサス、誰でもモーター制御できる仕組みを公開へ 」(http://eetimes.jp/より。)とArduinoやその他マイコンボード用の汎用モータードライバボードを開発されたようですが、NCのようなモーションコントロールを行うのであれば、マイコンを使用するよりも、LinuxCNCを使用して、Gコードでコントロールするほうが簡単になる場合の方が多いような気がします。



ステッピングモーターとDCモーターは作動時の特性が違うので双方適した使い方ができれば良いと思います。。




それと、、LinuxCNCの特徴として、動画のようにオシロスコープで見たように表示できるHALスコープや、内部でどんどん変わっていく数値をモニタできるHALメーターなどのウインドウがあること。。

これはモーションコントロールを観察する上でかなり便利で役に立ちます。
もちろん、今回のようにローターリーエンコーダーの入力パルスも、表示させることができます。

コントロールの基礎的なことを理解するのにとてもよいです。。

テーマ : 自作・改造
ジャンル : コンピュータ

秋月でBBB売り切れ。

すでに売り切れてますね、、、BBB。


日本のWeb上でのBBBLinuxCNCの記事が増えてくれると良いのですが。。。

テーマ : 自作・改造
ジャンル : コンピュータ

ライセンス
アクセスカウンター
プロフィール

あきらひとし。

Author:あきらひとし。
木工用CNCルーターフレームと、ステッピングモータードライバを作ってみました。
たぶん記事は一般的な人には殆ど必要のない事ばかりなの、かも。

モーターは回るだけでも楽しい。制御(速度、トルク、位置)できるともっと楽しい!

メールフォーム

名前:
メール:
件名:
本文:

リンク
最新記事
カテゴリ
スポンサードリンク
スポンサードリンク 
スポンサードリンク
オンラインカウンター
現在の閲覧者数:
検索フォーム
RSSリンクの表示
最新トラックバック
最新コメント
月別アーカイブ