講義用資料

機械知能システム学科 メカトロニクス工学
第 ½ 回目
モータ・センサの種類とデジタル Á»Ç
岡田昌史
½
はじめに
┤ὶ㟁ᅽ(DC)
メカトロニクス機器を動かすためには制御が必要であ
SN
SN
る.特に,自動化を目指すのであればセンサ信号に基づい
てアクチュエータへの入力を計算機によって決める必要が
図¾
うなフィードバック系が構成される.このための技術とし
θref
+
ࢥࣥࢺ࣮ࣟࣛ
−
τ = K(θref − θ )
τ
࣮ࣔࢱ
..
Jθ=τ
SN
SN
SN
SN
ࣈࣛࢩ
ある.一般に,モータを制御する場合には図 ½ にあるよ
┠ᶆ್
SN
SN
ฟຊ
θ
モータの原理
モータ 図 ¿ のような構造を持ち,
モータと比べ
永久磁石とブラシはない.外側の電磁石が交流電圧の
周波数で Æ»Ë 極が入れ替わり,内部のコイル ´ロー
図 ½ モータ制御のためのフィードバック系
タµ に誘導電流が発生してロータが磁石となる.これ
により,外側の電磁石,内側の電磁石によって反発力,
て,´½µ センサによってモータの回転角を読み取ること,
吸引力が発生し,回転トルクを得る.発生するトルク
´¾µ モータへの入力を計算し出力すること,が挙げられる.
本講義ではこの原理の理解と,計算機による実装 ´実際に
モータを回すプログラミング実習µ によってその技術を習
得し,モータを使ったロボットの制御法を実習することを
目的とする.
を制御することはできず,交流電圧の周波数によって
¾
モータの回転数が決定する.
஺ὶ㟁ᅽ(AC)
SN
SN
モータ
SN
SN
図¿
NS
NS
NS
NS
モータの原理
目的や用途に合わせて多くのモータがある.電動モータ
を取り上げても以下のものが挙げられる.
ブラシレス
モータ 良く用いられるモータで,図 ¾ のようにステー
モータにおいて,指令トルク
を発生するよう交流電源の周波数をモータドライバに
タに固定された永久磁石の中に電磁石のロータがあり,
よって制御する.これにより交流モータを直流モータ
ブラシとの接触によって電磁石のプラスマイナスが切
のように扱うことができる.実際には
り替わり,ロータに回転トルクが発生する.一般に,
るが,
モータは流れる電流と出力トルクが比例関係にあ
Ã
ら
ÆÑ» をトルク定数という.永
久磁石,ブラシ,ロータ電磁石の数を増やすと回転む
ら,トルクむらが小さくなる.演習で使用するモータ
は
モータである.
り,その比例定数
モータ
モータであ
モータのような使い方が可能であることか
モータの名がついている.摩擦のない直流モー
タが実現されるが,その代わりに電源を制御するモー
タドライバが必要である.モータを大型化することで
大きなトルクを発生できるので,ギアを用いずに用い
るダイレクトドライブモータとして用いられる場合が
½
多い.
ステッピングモータ 図
60kg
のように,ロータが永久磁石で
外部の電磁石をひとつずつオン»オフを切り替えるこ
とでモータを回す.何回切り替えたかによってモータ
100mm
の回転数が決まるので回転角を計測するセンサを必要
としない.ただし,外部から大きな力が働くとモータ
が滑る現象が起こり,これを脱調という.使いやすい
がモータの回転速度が大きく取れないことなどが欠点
として挙げられる.
図
膝を曲げて立つロボット
S
N
N
S
S
より,
N
S
N
¼¼ ¾
S
S
N
N
¢ ½¼¼
½½ ¾
´ µ
の電流を要求する.また,モータには内部抵抗があるので,
これだけ多くの電流を流すためには供給電圧も大きくとる
図
ステッピングモータの原理
必要がある.なお,これはモータが静止した状態での話で
あるので,ロボットが動くためには角速度も大きくなるの
で,さらに多くの電流と電圧を必要とする.
この他にも,油圧モータ,エアモータ,超音波モータなど
一般に,大きな減速比をかせぐ方法として,平歯車を何
がある.また,直道のアクチュエータとしてリニアモータ,
段にも重ねる方法がとられている.しかし,平歯車は一段
ラバチュエータなどもある.
ごとに大きなバックラッシュを持ち,さらに,摩擦によって
効率が ¼±ほどに落ちることが知られている ´¾ 段で減速
¿
±µ.そこで,一段で大きな減速比を実現するハー
モニックギアや遊星歯車がよく使われる ´図 µ.ハーモニッ
すれば
減速器
一般にアクチュエータ単体では出力されるトルクが小
さすぎるため,減速器が使われる. ¼Ï
モータを例に
とってみよう. ¼Ï モータはその仕事率が ¼Ï´
であることを意味しており,出力トルクを
速度を
Ö
»×
Â»× µ
ÆÑ ,回転角
とすると
¼Ï
´½µ
となる.これは馬力 ÀÈ と同じ物理単位である.すなわ
ち,回転数が小さいとき ´ が小µ は大きなトルクを発生
可能で,回転数が大きくなる ´ が大µ と発生可能なトル
クが小さくなる.いま,½ ½¼¼ の減速器を持つギアをモー
タ軸に取り付ける.このとき,ギアの出力軸の発生トルク
図
は ½¼¼ 倍,回転数は ½»½¼¼ になり,高いトルクを必要とす
る用途に有効になる.図 のようにロボットが膝を曲げて
クギアではウェーブジェネレータがギアの入力軸,フレク
立っている状況を考えよう.このとき,膝関節が発生すべ
スプラインが出力軸になる.ウェーブジェネレータは楕円
きトルクは
¼
¢
¾
½Ñ»×
形をしており,フレクスプラインの外側とサーキュラスプ
¢ ¼ ½Ñ
ÆÑ
´¾µ
ラインの内側には数の異なる歯が刻まれいてる.ウェーブ
ジェネレータの長軸方向でフレクスプラインとサーキュラ
と計算される.これはトルク定数 ¼º¼ ¾ ÆÑ» の ¼Ï
スプラインがかみ合い,½ 周回ったときに歯の数の違いだ
モータと減速器 ½ ½¼¼ のギアを使用した場合,
½¼¼ ¢ ¼ ¼ ¾
ハーモニックドライブと遊星歯車
¢
け回転する.図 はその様子を示しており,ウェーブジェ
ネレータが半周まわることでフレクスプラインが歯ひとつ
´¿µ
¾
数十万パルス»周のものもある.
分まわる様子を表している.これは,フレクスプラインと
´
サーキュラスプラインの歯の数の差にによって生じる現象
µ
エンコーダ アブソリュート 上記エンコーダは相対的な
である.これにより,大きな減速比を生み出す.逆に小さ
回転角を読み取るもので,初期値零からの回転角を読
み取る.これを絶対 ´アブソリュートµ 角にしたもの
が,アブソリュート型のエンコーダである.図 にあ
Ø に相当する隙間が刻まれており,
回転角度を ¾ 進数で得ることができる.
るように,円盤に
図
ハーモニックドライブの回転の様子
な減速比には向いていない.遊星歯車では中心の歯車 ´太
陽歯車µ がギアの入力軸で出力軸は つの遊星歯車の回転
軸に固定されている.太陽歯車が ½ 周回ったとき,出力軸
図
は ½ 周回らないので減速比が生み出される.歯のかみ合
アブソリュートエンコーダの円盤
いが多いので,大きなトルクを伝達するとき ´例えばブル
ドーザなどµ に有効であるが摩擦は小さくない.
ポテンショメータ エンコーダよりも安価に回転角を読み
取るものとしてポテンショメータがある.図 ½¼ のよ
うに可変抵抗と同じ原理で,電圧値を計測することで
センサ
回転角を読み取る.基本的には一周の回転角を計測す
環境の中にある様々なものを計測することを目的として,
多くのセンサが商品化されている.ここではモータの回転
角を計測するセンサに焦点を当てる.一般に回転角を測る
ものとして以下のものが挙げられる.
´
µ
エンコーダ インクリメンタル 図 に表されるようにス
リットの入った円盤が軸に固定されており,発光ダイ
GND Out +Vcc
オードからの光がフォトダイオードに届くことで正電
圧が出力され,届かなければ零電圧が出力される.こ
図 ½¼ ポテンショメータ
れによりフォトダイオードからはパスル信号が発生し
このパルスをカウントすることで回転角が計測され
相, 相の信号を計測
るものであるが,抵抗部が渦巻き状になることで数回
することで回転方向を検出する.また,パルスの ÍÈ
転を読み取ることが可能なものもある.エンコーダが
だけでなく ÇÏÆ を計測することで見かけ上一周の
デジタル信号であるのに対し,ポテンショメータはア
パルス数を ¾ 倍にして用いる二逓倍, 相
ナログ信号を出力する.
る.図のように位相のずれた
相の両方
の ÍÈ» ÇÏÆ を計測する四逓倍での利用法がある.
一般に,精度良く速度・加速度を計測するセンサは少ない
½¼¼¼ パルス»周,¾¼¼¼ パルス»周程度が主流であるが,
が,Å ÅË 技術を用いたジャイロセンサ,加速度センサ
が開発されており,これまでのものに比べ一桁程度精度が
良くなっている.
ࣇ࢛ࢺࢲ࢖࣮࢜ࢻ
UP DOWN
A┦
B┦
電源
Ⓨගࢲ࢖࣮࢜ࢻ
º½
図
エンコーダ
定格電圧電源
電源は定格電圧と定格電流によって決まる.モータの出
力するトルクは電流に比例する.そのため,大きな電流を
¿
供給可能な電源を用いれば大きなトルクが得られる.し
ィ⟬ᶵ
かし,
½º モータには最大電流が決まっている.それ以上の電流
が流れればモータは発熱し,焼き付いてしまう.
D/A࣮࣎ࢻ
࢝࢘ࣥࢱ࣮࣎ࢻ
24VDC
+
− 5V
0V
࣮ࣔࢱࢻࣛ࢖ࣂ
¾º モータには内部抵抗があるため,必要な電流が決まれ
ば電源の電圧が決まる.
A┦㸪B┦
¿º モータは回転することで逆起電力を発生するため,一
定の電流を流すためにはさらに高い供給電圧を必要と
する.
࣮ࣔࢱ
図 ½½ ハードウェア構成
モータの仕事率 Ï と電源の出力 Ï はあまり関係がな
いので注意すること.
࢚ࣥࢥ࣮ࢲ
はなく,È とドライバの通信 ´プロトコルµ がアナログ値
であるということである.そのアナログ電圧信号
º¾
バッテリー
ÚÎ
は
モータドライバに入力される.
バッテリーはその電圧と容量によって決まる.例えば,
単三アルカリ乾電池は ½º Î,¾ ¼¼Ñ
であり,¾º
を½
時間流し続けることができるだけの容量を持っている.一
般に,電池は定格電源と比べ,多くの電流を出力すること
ができるが,電池の内部抵抗により,出力可能な電流は電
圧によって決まる.また,¾ ¼¼Ñ
の電池を ¾º
º¾
モータドライバ
モータドライバには外部から ¾ Î
タに加えられる電圧
出力で
用いる場合,これを ½ 放電といい, º¼ 出力で用いるこ
が加えられ,モー
ÚÑ Î がある定数 ÃÑ を用いて
ÚÑ ÃÑÚ
´ µ
とを ¾ 放電という.値が大きければそれだけ電池への負
となるように制御される.これにより,モータには電流が
担も大きい.また,充電可能な電池としては鉛蓄電池,ニッ
流れ,モータは電流に比例したトルクを発生する.モータ
カド電池,ニッケル水素電池,リチウムイオン電池,リチ
の回転角はエンコーダによって検出され,エンコーダから
ウムポリマー電池などがある.ニッカド電池は十分放電し
発生されたパルスはカウンタボードによってカウントさ
た後に充電しないとメモリ効果によって容量が減る.リチ
れ,回転角になって計算機に取り込まれる.エンコーダの
ウムイオン電池は容量が大きい電池として携帯電話,ラッ
パルスは ¾
プトップコンピュータに使用されているが,急速充電をす
である.
¿¾ Ø の変数として読みとられるのが一般的
間的に大きな電流を得るために,スーパキャパシタ ´容量
モータに一定電圧 ÚÑ を与えると,モータの逆起電力と
ÚÑ が等しくなったところで一定の回転になる.このとき,
もしも摩擦などによってモータが止まったとすると,ÚÑ は
の極めて大きいコンデンサµ を用いることもあるが,大変
変化しないのでモータには大きな電流が流れ,摩擦をうち
危険なので取り扱いには注意が必要である.
消すようなトルクが働く.そのため,低速での一定角速度
ると爆発する恐れがあるため充電用電圧,電流,温度を管
理しながら充電する専用の充電器が必要である.最近は瞬
回転なども実現できる.ただし,モータが可動範囲を越え
ても同じように大きな電流が流れトルクを発生するため,
モータ制御のハードウェア
º½
機械の破損やモータの焼き付きを起こしやすい.最近では
ÈÍ を搭載し,モータのエンコーダの値を計測しながら,
ハードウェア構成
モータ軸が目標角度になるよう制御するものも増えている.
モータ制御のためのハードウェア構成は図 ½½ に示され
るようなものとなる.計算機で計算された指令値はデジ
タル»アナログ変換ボード ´ »
ボードµ によって
¦
Îの
アナログ電圧信号に変換される. » ボードの解像度が
½ Ø の場合,¦ Î は ¸ ¿ 段階の分解能を持っている.
ただし,ここで言う電圧はモータに直接印加される電圧で
º¿
ÈÏÅ 制御
モータドライバがモータに加える電圧について説明す
る.所望の電圧をモータに加えることを安価におさえるた
めに ÈÏÅ´ÈÙÐ× Ï Ø ÅÓ ÙÐ Ø ÓÒµ が用いられるのが
一般である.ÈÏÅ では図 ½¾ に示すようにある一定周期
圧を ÈÏÅ 制御するが,このとき以下のような注意が必
¡ で一定電圧が加えられる.このときの ÙØÝ 比を変え
ることで,仮想的な電圧の変化を生み出す.例えば,図 ½¾
の での仮想電圧は ¾ Î であり, は ½¾Î, は Î であ
る.これにより,モータにはパルス的な電圧が加わること
になるが,時間間隔 ¡ が十分小さければモータ軸の慣性
モーメント,コイルのインダクタンスにより,滑らかな動
きが実現される.
要である.
Ø
½º
Ø
24[V]
a
0[V]
24[V]
b
0[V]
24[V]
c
¾º モータの回転角速度が大きく変化するとモータは逆起
電力を発生する.このとき, Ì には大きな逆起電
圧がかかり, Ì は破損する.特に,歩行ロボットで
は足と地面との接触は衝突であって,この瞬間にモー
タは大きな逆起電力を発生し, Ì が破損しやすい.
この場合,ツェナダイオード ´ある電圧を超えると電
流を流すダイオードµ を用いて逆起電力を逃がすなど
の保護回路が必要である.
¿º
0[V]
Δt
Δt
Δt
図 ½¾ ÈÏÅ の原理
Ì の ÓÒ,Ó« の同期制御が重要である.例えば,一
と が ÓÒ になってしまった場合, と の
Ì に貫通電流が流れ, Ì は破損する.特に ÈÏÅ
の周期を早くすばそれだけ同期制御も難しくなる.
瞬でも
Ì にはモータと同じ電流が流れる.そのため, Ì
の内部抵抗を小さくし,モータにかかる電圧の低下を
極力抑える必要がある.また,内部抵抗により
Ìは
発熱する.例えば,脚ロボットの膝関節には最大 ¾¼
の電流が流れることがある.このため,十分放熱をす
ることが必要である.
最近は内部抵抗が小さく,許容耐電圧・電流が大きな
º
À ブリッジ
Ì
が市販されている.これらの技術の進歩は大変早いので常
に最新のものを調査しておく必要がある.
上の説明では,モータに加える電圧は正の値しかとるこ
とができない.しかし,モータは正転・逆転をする必要が
あるので,加える電圧は正負の値をとる必要がある.この
ために,À ブリッジが構成される.À ブリッジを図 ½¿ に
Ì で,その説明を右図に示す.
ドレインには定格電圧が加えられており,ゲート電圧があ
るしきい値を越えるとドレインとソースが短絡される仕組
みになっている.図の
Ì の と が ÓÒ, と が Ó«
のときモータは正転し, と が ÓÒ, と が Ó« のとき
モータは逆転する.ゲートの電圧を制御してモータへの電
示す.図の , , , は
ᐃ᱁㟁ᅽ౛࠼ࡤ9
+VDD
a
c
࣮ࣔࢱ
M
ࢻࣞ࢖ࣥ
車を作る.この車が斜度 ¿¼ 度の坂を ½º¼ Ñ» の一定速度
で上るためには,別紙のどのモータを使用すれば良いか全
て求めなさい.ただし,供給電圧は最大
FET
ࢯ࣮ࢫ
などは考えなくて良い.また,モータの冷却は万全でモー
ࡕ࡯࠲90[W]DC
ࠡࠕ1:100
100[kg]
GND
1.0[km/h]
0.1[m]
30ᐲ
GND
図½
図 ½¿ À ブリッジの原理
Î,供給最大電
流は ½¼ ,車輪の半径は ¼º½Ñ とする.摩擦やギアの効率
ࢤ࣮ࢺ
d
FET
モータ,ギア ´減速比 ½ ½¼¼µ を設置して
タが焼き付くことはないとする.
FET
+
モータのパワー計算を行おう.図 ½ のように重量 ½¼¼
の車体に ¼Ï
+VDD
b
FET
課題
坂を登る車
ヒント
提出物
モータと車の運動方程式は,
Ê · Ä Ø · ÃÎ
´ µ
ÂÑ
à Ñ
´ µ
ÂÌ
´ µ
Ñ ÖÙ
と表される.ただし, Î は供給電圧,Ê ª はモータの内
部抵抗,Ä À はモータのインダクタンス,ÃÎ Î×»Ö
は
¾
モータの逆起電力定数 ´ Ã µ,ÂÑ Ñ はモータ軸の慣
性モーメント,Ã ÆÑ» はモータのトルク定数, Ñ ÆÑ
はモータ軸がギア入力軸へ及ぼすトルク,ÂÌ
Ѿ は車輪
の慣性モーメント, は車輪の回転角, はギア比,Ö Ñ
は車輪の半径,Ù Æ は車の推進力を表している.
本日の演習
È からデジタル Á»Ç を実行するプログラムを作成
す る .別 紙「Î ··プ ロ グ ラ ム ,プ ロ ジェク ト の 作 り
方・コンパイル・実行」を ØØÔ »»ÛÛÛº ÝÒ Ñ ×ºÑ Ôº
Ø Ø
º º Ô»Ô Ö×ÓÒ»Ó
»Ð ØÙÖ »Ñ
ØÓÖÓº ØÑÐ
からダウンロードしこれを参考にしながら,以下の実験
を行う.
½º エンコーダの回転角を読み取り,Ö
示するプログラムを作成する.
¾º
»
Ò に変換して表
ボードから所定の電圧が出力されていることを
テスタで確認する.
なお,エンコーダは ½¼¾ パルス»周であり, 逓倍で使用
する.ハーモニックギアのギア比は ½ ½¼¼ である.図 ½
の回転方向を正として表示するようにしなさい.完成した
ら,教員または Ì に確認してもらいなさい.
θ1
θ3
θ2
図½
関節角度の正負の定義
課題
計算結果と選ばれたモータを示しなさい.また,計
算過程も示しなさい.
〆切
次回講義時間 ´午前中µ.
maxon DC motor
RE 35 Æ35 mm, グラファイトブラシ, 90 Watt
M 1:2
標準在庫製品
標準製品
特別仕様製品(受注生産)
注文番号
両軸 118776 118777 118778 118779 118780 118781 118782 118783 118784 118785 118786 118787 118788 118789 118790
モータ・データ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
定格出力
公称電圧
無負荷回転数
停動トルク
回転数/トルク勾配
無負荷電流
起動電流
端子間抵抗
最大許容回転数
最大連続電流
最大連続トルク
公称電圧時最大出力
最大効率
トルク定数
回転数定数
機械的時定数
ロータ慣性モーメント
端子間インダクタンス
熱抵抗(ハウジング/周囲間)
熱抵抗(ロータ/ハウジング間)
巻線熱時定数
W
90
Volt 15.0
rpm 7070
mNm 872
rpm / mNm 8.45
mA 245
A 44.9
Ohm 0.334
rpm 8200
A 4.00
mNm 77.7
W 152
%
81
mNm / A 19.4
rpm / V 491
ms
6
gcm² 65.5
mH 0.09
K/W
6.2
K/W
2.0
s
27
仕様
l
l
l
l
l
l
l
l
l
80
スラストがた
0.05 - 0.15 mm
ボールベアリング最大荷重
スラスト荷重(ダイナミック)
プリロードなし
5.6 N
プリロードあり
2.4 N
ラジアル荷重(フランジから5 mmの点) 28 N
挿入力(スタティック)
110 N
(同上、ただしシャフト支持)
1200 N
ラジアルがた/ボールベアリング
0.025 mm
使用温度範囲
-20 ... +100°C
ロータ最高許容温度
+155°C
コミュテータ・セグメント数
13
モータ重量
340 g
表の値は公称値。
誤差およびその他の詳細については43ページを
ご参照ください。付属のCD-ROMに収録されて
いるmaxon selection programで誤差範囲を確認
することができます。
オプション:中空シャフト(特別仕様製品)
maxon DC motor
90
30.0
7220
949
7.77
124
24.4
1.23
8200
2.74
107
175
84
38.9
246
5
65.5
0.34
6.2
2.0
27
90
42.0
7530
1070
7.17
93
20.3
2.07
8200
2.15
113
206
86
52.5
182
5
69.6
0.62
6.2
2.0
29
90
48.0
7270
966
7.63
77
15.5
3.09
8200
1.78
111
181
85
62.2
154
5
65.0
0.87
6.2
2.0
27
90
48.0
6650
878
7.68
69
12.9
3.72
8200
1.63
111
150
85
68.0
140
5
64.5
1.04
6.2
2.0
27
90
48.0
5970
766
7.89
60
10.1
4.75
8200
1.45
110
118
84
75.8
126
5
62.7
1.29
6.2
2.0
26
90
90
90
90
90
90
90
90
90
48.0 48.0 48.0 48.0 48.0 48.0 48.0 48.0 48.0
4750 3810 3140 2570 2100 1620 1290 1060
856
613
493
394
320
253
194
155
125
99.5
7.86 7.84 8.09 8.19 8.47 8.55 8.54 8.80 8.94
45
34
27
22
17
13
10
8
7
6.43 4.16 2.74 1.83 1.18 0.704 0.448 0.298 0.193
7.46 11.5 17.5 26.2 40.5 68.2
107
161
248
8200 8200 8200 8200 8200 8200 8200 8200 8200
1.17 0.944 0.768 0.630 0.508 0.392 0.313 0.256 0.206
111
112
111
110
109
108
108
107
106
75.0 48.4 31.8 21.2 13.7 8.07 5.10 3.36 2.15
83
82
80
79
77
74
72
69
66
95.2
119
144
175
214
276
346
418
515
100.0 80.6 66.4 54.6 44.7 34.6 27.6 22.9 18.5
5
5
5
5
5
5
5
5
5
62.8 62.8 60.7 59.9 57.9 57.2 57.2 55.5 54.5
2.04 3.16 4.65 6.89 10.30 17.10 26.90 39.30 59.70
6.2
6.2
6.2
6.2
6.2
6.2
6.2
6.2
6.2
2.0
2.0
2.0
2.0
2.0
2.0
2.0
2.0
2.0
26
26
25
25
24
24
24
23
23
運転範囲
詳細49ページ
説明
n [rpm]
推奨運転範囲
9000
90 Watt
連続運転範囲
熱抵抗が上の表の値(19および20行目)で
ある場合、周囲温度が25°Cで連続運転中に
ロータ最高許容温度に達する。
=温度制限
7000
5000
3000
短期間運転範囲
短期間の過負荷(断続)運転
1000
100
1.0
200
5
10
M [mNm]
I [A]
300
2.0
3.0
15
20
I [A]
118790 最大巻線抵抗のモータ(8行目)
118776 最小巻線抵抗のモータ(8行目)
maxon モジュラー・システム
プラネタリギアヘッド
Æ32 mm GP 32 A
0.75 - 4.5 Nm
詳細213ページ
プラネタリギアヘッド
Æ32 mm GP 32 C
1.0 - 6.0 Nm
詳細214ページ
プラネタリギアヘッド
Æ42 mm GP 42 C
3 - 15 Nm
詳細218ページ
一覧17 – 21ページ
適合可能な電子回路:
ADS 50/5
ページ 253
ADS 50/10
253
ADS_E 50/5, 50/10
254
EPOS 24/5
263
MIP 50
265
注意事項
17
MRエンコーダ
256 - 1024カウント,
3チャンネル
詳細233ページ
エンコーダ HED_ 5540
500カウント,
3チャンネル
詳細236 / 238ページ
DCタコ
Æ22 mm
0.52 V
詳細246ページ
保持ブレーキ
Æ40 mm
24 VDC, 0.4 Nm
詳細269ページ
2004年4月版 / 仕様は変更されることがあります
#include
#include
#include
#include
<windows.h>
<stdio.h>
<conio.h>
"Counter.h"
Counter_Read( theta );
// カウント値の読み込み
printf("ch1:%12.3f || ch2:%12.3f || ch3:%12.3f\r", theta[0],theta[1],theta[2]);
Sleep(100);
return 0;
/* カウンタボードのクローズ */
Counter_Close();
}
/* メインループ */
printf("\nキーが押されるまで読み込みます\n\n");
while( !_kbhit() ) {
}
/* エンコーダカウンタボードのオープンと初期化 */
if((Counter_Open()==FALSE) || (Counter_Init()==FALSE)){
Counter_Close();
exit(1);
int main(void)
{
double theta[3];
}
// 現在の回転角度
/* --------------------------------------------------- */
/* 2010年度メカトロニクス工学
*/
/* カウンタボードサンプルプログラム
*/
/* --------------------------------------------------- */
main.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/* ---------- 使用チャンネルのカウンタのリセット ---------- */
void Counter_Reset();
/* ---------- 使用チャンネルのカウンタの値の書き込み ---------- */
void Counter_Write(double []);
/* ---------- 使用チャンネルのカウンタの値の読み込み ---------- */
void Counter_Read(double []);
/* ---------- カウンタボードのクローズ ---------- */
void Counter_Close();
/* ---------- カウンタボードの初期化 ---------- */
BOOL Counter_Init(void);
/* ---------- カウンタボードのオープン ---------- */
BOOL Counter_Open();
counter.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#define
#define
#define
DWORD
dwValue[8];
hDeviceHandleCounter;
Max_Count_Channel
Use_Count_Channel
Use_Count_Channel_Bit
}
4
//
3
//
0x0f
//
//
カウンタボード(LPC-631204)の最大チャンネル数
カウンタボードの使用チャンネル数
Counterボードの使用チャンネルの指定
(bit0~7がch1~8に対応、各bitに1を指定)
// カウンタ値格納用
// デバイスハンドル
if(nRet != PENC_ERROR_SUCCESS) return FALSE;
/* カウンタの設定 */
for(i=1;i<Max_Count_Channel+1;i++) {
nRet = PencSetMode( hDeviceHandleCounter, i, 6, 0, 0, 0 );
// 位相差パルスカウント 入力、4逓倍、非同期クリア、
// アップカウント、一致検出無効、ソフトウェアラッチに設定
}
return TRUE;
/* カウンタ値取得 */
PencGetCounterEx( hDeviceHandleCounter, Use_Count_Channel_Bit, dwValue );
for(i=0; i<Use_Count_Channel; i++) count[i] = (double)(signed)dwValue[i];
for(i=0; i<Use_Count_Channel; i++) {
if( count[i] < 0.0 )
dwValue[i] = (int)(count[i]-0.5);
else
dwValue[i] = (int)(count[i]+0.5);
}
PencSetCounterEx( hDeviceHandleCounter, Use_Count_Channel_Bit, dwValue );
for(i=0; i<Use_Count_Channel; i++) dwValue[i] = 0x00000000;
PencSetCounterEx( hDeviceHandleCounter, Use_Count_Channel_Bit, dwValue );
/* ---------- 使用チャンネルのカウンタのリセット ---------- */
void Counter_Reset() {
int
i;
}
/* ---------- 使用チャンネルのカウンタの値の書き込み ---------- */
void Counter_Write(double count[]) { // count:カウンタ値格納用の配列
int
i;
}
/* ---------- 使用チャンネルのカウンタの値の読み込み ---------- */
void Counter_Read(double count[]) { // count:カウンタ値格納用の配列
int
i;
}
/* ---------- カウンタボードのクローズ ---------- */
void Counter_Close() {
// 終了処理
PencClose(hDeviceHandleCounter);
}
/* ---------- カウンタボードの初期化 ---------- */
BOOL Counter_Init(void) {
INT
i,nRet;
}
/* ---------- カウンタボードのオープン ---------- */
BOOL Counter_Open(){
/* デバイス名"FBIPENC33"のオープン */
hDeviceHandleCounter = PencOpen( (LPCTSTR)"FBIPENC33", PENC_FLAG_NORMAL );
if (hDeviceHandleCounter == INVALID_HANDLE_VALUE) return FALSE;
return TRUE;
static
HANDLE
#include <windows.h>
#include "FbiPenc.h"
counter.c (参考)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
1
2
3
4
5
6
7
8
9
10
11
main.c
<windows.h>
<stdio.h>
<conio.h>
"DAboard.h"
// 出力電圧値 [V]
/* --------------------------------------------------- */
/* 2010年度メカトロニクス工学
*/
/* D/Aボードサンプルプログラム
*/
/* --------------------------------------------------- */
#include
#include
#include
#include
volt[3]={ 0.0, 0.0, 0.0 };
return 0;
/* D/Aボードのクローズ */
DA_Close();
}
/* メインループ */
printf("\nキーが押されるまで出力します\n\n");
while( !_kbhit() ) {
volt[0] = 0.0;
// ch1の出力電圧の指定
volt[1] = 0.0;
// ch2の出力電圧の指定
volt[2] = 0.0;
// ch3の出力電圧の指定
DA_Output( volt );
// D/A出力
}
/* D/Aボードのオープンと初期化 */
if((DA_Open()==FALSE) || (DA_Init()==FALSE)){
DA_Close();
exit(1);
int main()
{
double
}
DAboard.h
/* ---------- D/Aボードのオープン ---------- */
BOOL DA_Open(void);
/* ---------- D/Aボードの初期化 ---------- */
BOOL DA_Init(void);
/* ---------- D/Aボードのクローズ ---------- */
void DA_Close(void);
/* ---------- D/A出力 ---------- */
void DA_Output(double []);
}
Upper_Limit
Lower_Limit
Max_DA_Channel
Use_DA_Channel
5.0
-5.0
8
3
//
//
//
//
出力電圧の上限 [V]
出力電圧の下限 [V]
D/Aボード(PCI-3329)の最大チャンネル数
D/Aボードの使用チャンネル数
/* アナログ出力を行うチャンネルの番号とレンジの指定 */
for(i=0;i<Max_DA_Channel;i++) {
DaSmplChReq[i].ulChNo = i+1;
// チャンネルの割り当て
DaSmplChReq[i].ulRange = DA_5V;
// バイポーラ ±5V に設定
}
/* 出力電圧を0[V]に設定 */
for(i=0;i<Max_DA_Channel;i++) wData[i] = 0x800;
/* 全チャンネル出力 */
nRet = DaOutputDA( hDeviceHandleDA, Max_DA_Channel, &DaSmplChReq[0], &wData[0] );
if( nRet != DA_ERROR_SUCCESS ) return FALSE;
return TRUE;
/* 出力電圧を0[V]に設定 */
for(i=0;i<Max_DA_Channel;i++) wData[i] = 0x800;
/* 全チャンネル出力 */
DaOutputDA( hDeviceHandleDA, Max_DA_Channel, &DaSmplChReq[0], &wData[0] );
// アナログ出力デバイスの終了処理
DaClose(hDeviceHandleDA);
}
}
/* 全チャンネル出力 */
DaOutputDA( hDeviceHandleDA, Max_DA_Channel, &DaSmplChReq[0], &wData[0] );
}
/* 電圧値を12bitバイナリ値に変換 */
for(i=0; i<Use_DA_Channel; i++) {
j = i*2;
if(volt[i] < Lower_Limit ) {
wData[j] = 0x000;
}
else {
if(volt[i] < Upper_Limit ) {
wData[j] = (WORD)(4096.0 * (volt[i] - Lower_Limit)/(Upper_Limit - Lower_Limit));
}
else {
wData[j] = 0xfff;
/* 出力電圧を0[V]に設定 */
for(i=0;i<Max_DA_Channel;i++) wData[i] = 0x800;
/* ---------- D/A出力 ---------- */
void DA_Output(double volt[]) { // volt:出力電圧の配列 [V]
int i,j;
}
/* ---------- D/Aボードのクローズ ---------- */
void DA_Close(void) {
int i;
}
/* ---------- D/Aボードの初期化 ---------- */
BOOL DA_Init(void) {
int i;
INT nRet;
}
/* ---------- D/Aボード(PCI-3343A)のオープン ---------- */
BOOL DA_Open(void) {
/* デバイス名"FBIDA1"のアナログ出力デバイスのオープン */
hDeviceHandleDA = DaOpen( (LPCTSTR)"FBIDA1" );
if (hDeviceHandleDA == INVALID_HANDLE_VALUE) return FALSE;
return TRUE;
static DASMPLCHREQ DaSmplChReq[Max_DA_Channel];
// 各チャンネル毎のアナログ出力条件を設定する構造体
// 配列[0]->1ch, 配列[1]->2ch, ..., 配列[Max_DA_Channel-1]->Max_DA_Channel ch
static WORD
wData[Max_DA_Channel]; // アナログ出力用データ
static HANDLE
hDeviceHandleDA;
// デバイスハンドル
#define
#define
#define
#define
#include <windows.h>
#include "FbiDa.h"
DAboard.c ( 参考 )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83