80^3(四式基本車体) - 作成中

この約75mm立方の缶に (ハンドと車輪、センサを除き)収めるのが目標です。


本当は知能ロボコン2005用に作ったのですが、間に合わなかったので資料 まとめ&改良して再開発中です。

ブロック図はこのよう になっています。知能ロボコンを前提としているため、移動機構+いくつかの ハンドなどの制御用アクチュエータを駆動し、自立的にライン上を行動できる ように構成しています。小型化のためにH8/Tinyを採用していますので、 ROM/RAMが不自由な点とタイマが不足気味なのが問題ですが、PIOにも余裕があ りますし、処理能力的にも十分に使うことができます。

標準構成時
CPUH8/Tiny 3694 20MHz
ROMon-chip 32k
RAMon-chip 2k
移動機構ステッピングモータ x 2
作業用機構PWM x 3(モータ制御およびRCサーボ制御に使用)
測距センサーPSD 1ch(max 8ch)
ラインセンサ4bit
タッチセンサ4bit(フォトインタラプタにも転用可能)
未使用PI7本(ADC兼用:PB1-7)
未使用PIO8本(P20,P10,P80,P81,P76-4,P12)


ソフトウェア開発環境

プログラムを作成する開発環境として、コンパイラとライタが必要です。 場合によってはモニタなども必要になります。

コンパイラ

コンパイラは自分でコンパイルしました。どこかでバイナリを拾ってきて も、多分動くと思います。

ホストPC(PC/AT)
distributionPlamo Linux4.0
kernellinux2.6.11.7
compilergcc3.2.3
libraryglib2.3.2
toolsbinutils2.14
ターゲット(H8)
compilergcc2.95.3 http://www.gnu.org/software/gcc/mirrors.html
librarynewlib1.9.0 http://sources.redhat.com/newlib/
toolsbinutils2.11.2 http://sources.redhat.com/binutils

ここで注意が必要なのがgccには「可変引数や、4個以上の引数を渡せない バグがある」ことです。これを修正するにはパッチを当てることと、コンパイ ラオプションに-mnをつけることが必要です(恐らく新しいバージョンでは直っ ているので不要でしょうが)。情報は いろいろ出ているようです

コンパイラのコンパイル方法は、SH2の場合 と同じですので割愛します。ターゲット名はsh-hmsではなく、h8300-hmsを使 用します。

ライタ

書き込みにはみついわさん作成のh8writeを使用します。PCとH8の間をシリア ル毛部る出つないで、NMIにつながったスイッチをONにして電源を投入すると、 H8がフラッシュ書き込みモードになりますので、その状態で以下のコマンドで 焼きます。なお、USB接続のシリアルポートでも問題なく焼けます。

h8write -f20 -d -3664 main.mot /dev/ttyS0

CPUボード

トラ技 2004/04付属のCPUボードを使います(サンハヤトで同様のものを販 売しています)。選定の理由はそこそこ能力があったことと、手元にあったこ とです。

「位置計算を正確に行うことは無理」と判断し、マップや複雑な処理は諦 めて、シーケンシャルに動作させることにしました。非常にメモリが窮屈だか らです。この程度のロボットならなんとか動かせるでしょう。C++を使ってリ ソースジャンジャンというようなスタイルのプログラムは作れません。まずは、 最小機能で作ってから、追加を考えましょう。

CPU H8/300H Tiny(H8/3694)
ROM 32k
RAM 2k

後に、ソースコードを大分書いてから気が付いたのですが、この2kしかな いメモリ、「mallocを使うとそれだけでメモリ不足」という悲しいことが分か りました。オブジェクト指向で動的にメモリを確保するライブラリを作ってい たのに...

起動処理

起動処理を作ります。組み込み用のプログラムということで、いろいろ普 通のプログラムと違うためです。回路図+ プログラムの回路に、そのプログラムをコンパイルして作られる Program/testProgram/ledTest.motをやけば動作確認できます。

起動処理を確認するために必要となる回路は、フラッシュ書き込み用のシ リアルRS232Cドライバ、ポート8 に直結したLED x 3(デバッグ用)、NMIのスイッ チ(ブートモード切替え)、P85のプルアップ、リセットボタンだけ必要です。 後は不要です。

まずは起動

まず、起動できる物を目指します。そこでデバッグ用のLEDをつけます。デ バッグ用のLEDすら使用できなければ、シリアル通信のデバグもできません。

回路

回路としては、フラッシュ書き込み用のシリアルRS232Cドライバ、ポート8 に直結したLED、NMIのスイッチ(ブートモード切替え)、P85のプルアップ、リ セットボタンだけです。電源は手元にあった単4x4(4.8V)を直結しています。 ※ただし※電源電圧が降下すると、動作はしますが、フラッシュに書き込めな くなります。アナログ系もありますし、最終的に電源にDC/DCコンバータをつ けることは必須です。

プログラム

組み込み用のプログラムということで、いろいろ普通のプログラムと違います。

それに加えて、以下の工夫をしてみました。

シリアル通信

デバッグするために必須です。回路図 +プログラムの回路に、そのプログラムをコンパイルして作られる Program/testProgram/sciTest.motをやけば動作確認できます。

必要な回路は起動処理に必要な回路と一緒です。

通信には割り込み無しモードと、割り込みありモードを切替え可能にして あります。初期状態は割り込みなしです。割り込みを有効にしてから通信を行 うと自動的に割り込みありモードになるようにしてあります。

割り込みなしでは、ブロック状態で通信します。処理内容はH8のマニュア ルにあるフローチャートそのままで、別段変なことはしていません。送信処理 が呼び出されるとリングバッファにデータを貯めて、割り込み処理中で送信し ます。受信すると同じくリングバッファにデータを貯めて、受信処理が呼び出 されるとそこからデータを取り出します。

割り込み有りモードでは、割り込みハンドラ内で非同期に処理を行うよう にしてあります。

タイマの割り振り

H8/3964は以下のタイマを持ちます。

タイマ 精度 最大Hz 最小Hz 機能
WDT 8bit φ/64/256 φ/8192/256 インターバルタイマ(固定)/WDT
TimerA 8bit φ/8/256 φ/8192/256 インターバルタイマ(固定)/RTC
TimerV 8bit φ/8 φ/128/256 インターバルタイマ(可変)/PWM
TimerW 16bit φ φ/8/65536 インターバルタイマ(可変)/PWM 3ch/周波数測定 3ch

用途は以下の通りです。

まず、サーボモータの制御を考えます。可変周期のPWMをはけるのはTimerV とTimerWですが、(1)複数チャンネルを同時に制御することを考えると、 TimerWに限定されます。(2)TimerVは8bitカウンタで精度が足りない(20ms中 2msしか信号を入力しない=精度は2^8/10=精度は26段階)。(3)TimerWの出力ポー トは大電流ポートですので、直接フォトカプラを駆動できる。以上のことから、 TimerWを使用します。

ステッピングモータ二つの出力を制御するには可変周期のタイマが二つ必 要ですがTimerVしかありません。そこで、固定周期のタイマ(TimerA、WDT)一 つで実現することとします(微調整のためにTimerVを使うことができるかも知 れません)。

システム割り込みは固定周期で精度もいらないのでTimerAでもWDTでもOKで す。

TimerAとTimerVをインターバルタイマー、TimerWをPWMとして使用するテス トコードを作成しました。Program/testProgram/timerATest.c、 Program/testProgram/timerVTest.c、Program/testProgram/timerWTest.cです。

LED / フォトカプラ

LEDおよびフォトカプラの駆動で使用します。両方ともかなり電流を消費する ので、H8のポート8(大電流ポート)か、外付けの電流増幅トランジスタ、もしく は74ACなどの大電流を流せるICで駆動する必要があります。部品を減らすために、 ポート8で駆動できるかを検討します。

ポート8では各端子Max20[mA]、合計で80[mA]を流せます(ただし電流の吸い込 みのみで、電源電圧が安定していることが条件)。現在の設計ではLEDを3つつけ ており、また、サーボとの間のフォトカプラを最大3つ駆動します。

バッテリー電圧はDC/DCコンバータを通すので5.0[V]安定とします。LEDは電 圧降下が最小1.1[V]で、電流制限抵抗が39E1[Ω]です。偶然ですが、フォトカプ ラの入力側の内蔵LEDも同じ値です。以上から使用する最大電流は

(5.0-1.1)/39E1=10[mA] < 一端子あたりの上限 20[mA] 6(5.0-1.1)/39E1=60[mA] < 合計の上限 80[mA]
以上から、ポート8で直接駆動することが可能です。

電源系

まずは電源が無くちゃ動きません。ここでは、重量対エネルギー量に優れ るNi-MHを使用することを考えます。調べたところによると通常の用途は1C放 電が上限ですが、ラジコンなどでは3C放電の例もあることがわかりました。GPのページによ ると、どうも、3C放電でも電圧は低下するものの使用できるようです。

要求見積もり

CPU 5V系
モジュール 電圧 電流[A] 最大稼働率[%]
H8/Tiny 5V 20mA 100
デバッグLED 5V 5mA x 3 100
ラインセンサLED 5V 10mA x 4 100
移動機構フォトカプラ 5V 10mA x 8 50
作業機構フォトカプラ 5V 10mA x 3 100
PSD 5V 50mA 100
その他 5V 50mA?? 100
アクチュエータ系=?
モジュール 電圧 電流[A] 最大稼働率[%]
移動機構 10V以上0.5A x 2 x 2 66%
作業機構 6V 0.2A x 3 100%

移動機構は定電流駆動なので最大消費電力は駆動電圧に依存します。

電源回路概略

CPUとアクチュエータ(ステッピングモータ、サーボ)は電気的に切断します。 理由はCPU側にノイズを載せないためです。

ステッピングモータの電源は電池の電源をそのまま使用 or 昇圧して生成 します。入手したモータドライバの定格電圧は+10V以上です。また、入手した ステッピングモータは(多分)0.5A/Phaseで1-2相励磁駆動すると0.5 x 2 x 2 = 2A必要になります。

RCサーボは、電池から直接とって三端子レギュレータで4.8Vに降圧して使 います。電力を食うくせにチョッパー回路などがないので応答速度が電源電圧 で変わってしまい、電圧が合わないと発振するため安定させる必要があるため です。

CPU系はアナログ回路も含むため、最も安定性が要求されます。ノイズの影 響をうけないよう、絶縁型のDC/DCコンバータで接続します。

以上から一番の問題はステッピングモータの電源です。これを生成 or 使 用するための方法を考える必要が有ります。

ステッピングモータ電源設計:単四x8

CPUなどの駆動電力の考察

電源電圧をNi-MH x 8で考えると
初期電圧8*1.5=11.2V。
安定 電圧は8*1.2=9.6V。
最終電圧は8*1.0=8.0V。
となります。また、 途中から電源をとればサーボも動作させることができます。(ステッピングモー タには不足ですが)

放電試験

発熱するのでちょっと楽し^H^H危険な実験です。実際に放電可能かを測定 してみます。電池の内部抵抗が結構大きいことと、電池ボックスを使用するの で電池ボックスの端子の接触抵抗で発熱することが考えられるためです。

電池ボックスとセメント抵抗を直結して試験します。瞬間的に使用するの は1.54Aなので(1.2 x 8)/1.54=6.2Ω必要です。ここでは6Ωの抵抗を使用しま す。また、消費電力は(1.2 x 8)^2/6=15.4Wですので、6Ω 20Wとします。適当 な抵抗がなかったので、12Ω10Wを並列に接続して使用します。

測定区間は、とりあえず電圧が大きく落ちるまでです。

開始電圧と終了電圧
セル 1234 5678
開始電圧 1.401.431.421.40 1.341.341.351.34
終了電圧 0.351.221.221.21 1.070.130.220.14
電圧の変化
minVminVminVminV
09.12108.24205.24301.97
18.69118.21214.34311.96
28.61128.18224.34321.94
38.56138.14234.27331.92
48.52148.04243.14341.89
58.47157.95253.10351.87
68.43167.77262.20361.84
78.43176.57272.01371.79
88.34185.54282.00381.70
98.27195.48291.99391.48

実験で分かったこと

実用上の問題点

使用は難しいと判断。

ステッピングモータ電源設計:単三x6+昇圧回路

単四を使用した場合の電圧の変化の問題、容量が小さいという問題を解決 するために昇圧回路+単三を使用します。

昇圧回路設計

大電流に使用できる昇圧DC/DCコンバータの制御ICを調べました。

メーカ型式備考
リニアテクノロジーLT1074/1076、LT1170CT千石電子。2k〜1.5k程度
マキシマムMAX642シリコンハウス。0.6k程度
NJMNJM2360みかけないが定番?
ナショナルセミコンダクタLM2577,LM2587日本橋ディジット
入手性と性能をみて、LM2577を使用します。以下は、LM2577のデータシートにのっている設計手順を踏んでいます。

要求性能の再見積もり

以下のように仮定します。設計がだいぶきついので、電流は1Aとしました。 不足した場合は二つにするなどで対応します(これとは別に、サーボモータや、 CPUボードで電力を消費します)。

Vin(min) = 4.0V(Ni-MHの終了電圧が1.0V、電源4本構成として) Vout = 10.0V Iload = 1.0A
LM2577のデータシートによると以下の条件があります。
Vout < 60V Vout < 10 Vin(min) = 40V Ilaod < 2.1 Vin(min) / Vout = 0.84A
電圧は問題ありませんが、電流不足です。悔しいけれど電池を増やして
Vin(min) = 6.0V(Ni-MHの終了電圧が1.0V、電源6本構成として) Vout = 10.0V Iload = 1.0A
これなら、以下のように条件を満たします。
Ilaod < 2.1 Vin(min) / Vout = 1.26A

インダクタ選定

次にインダクタを選びます。デューティーは

Dmax = ( Vout + VF - Vin(min) )/ ( Vout + VF - 0.6 ) = 0.45
ただし、ショットキーダイオードを使うこととしてVF=0.5Vとして います。高速ダイオードにくらべ耐圧は落ちますがロスは小さくなります。ま た、12V程度ならショットキーダイオードでも十分に耐えることができます。 コイルに溜めるエネルギーET積は
E・T = Dmax ( Vin(min) - 0.6 )x 1E6 / 52E3[Hz] = 0.45 ( 6 - 0.6 )x 1E6/52E3 = 46.7[V・us]
インダクタ電流IIND,DC
IIND,DC = 1.05 x Ilaod(max) / ( 1-Dmax) = 1.05 x 1.26 / (1 - 0.45 ) = 2.40[A]
資料のFig9を使い、リアクタンスコードはL100〜L68です。また、 Dmax < 0.85なので安定性保障は不要です。
仕様書には対応するリアクタンスの表がありますが、見ても仕方ありません。 入手できるかも分かりませんから。分かるのは、リアクタンス100〜68uHでET 積=90[V・us]は必要、ということです。それとリアクタンスに流れる電流を計 算します。まずリップル電流は
ΔIIND = (Vin(min) - 0.6 ) D / (52E3 x L ) = (6.0 - 0.6 ) 0.45 / (52E3 x 100u ) = 0.467 [A]
平均電流は
IIND(ave) = Ilaod(max) / ( 1-Dmax) = 1.26/(1-0.45) = 2.29[A]
最大電流は
IIND(ave) + ΔIIND/2 = 2.5[A]
これに適合するトロイダルコアコイルを使用します。

補償ネットワーク/出力段

補償ネットワークの抵抗は

RC < 750 x Iload(max) x Vout^2/Vin(min)^2 = 750 x 1.26 x 10^2/6^2 = 3000 RC < 3000 RC = 27E2[Ω]

出力段のコンデンサは

Cout > 0.19 x L x RC x Iload(max) / ( Vin(min) * Vout ) = 0.19 x 100E-6 x 27E2 x 1.26 / ( 6.0 x 10.0 ) = 1077[uF] Cout > Vin x RC x (Vin(max) + 3.74E5 x L ) / ( 487800 x Vout ^ 3 ) = 6.0 x 27E2 x (6.0 + 3.74E5 x 100E-6 ) / ( 487800 * 10^3) = 1441[uF]
以上から微妙に足りませんが1410uF(1410uF=470uF x 3)とします。

補償ネットワークのコンデンサは

CC > 5.85 x Vout^2 x Cout/ ( RC ^2 x Vin(min) ) = 5.85 x 10^2 x 1410E-6 / ( 27E2^2 x 6.0 ) = 0.0189[uF] CC > 0.22[uF]
以上から0.30uF(0.1uF x 3)とします。

出力段の要件

まず、耐圧ですが、この耐圧は10Vに20%のマージンをつけて12V以上必要です。

リップル電流は

IRIPPLE(RPM) = Iload(max) x Dmax / ( 1- Dmax ) = 1.26 x 0.45/(1-0.45) = 1.03[A]
50%マージンをとり1.5A必要です。

ESRは

IRIPPLE(p-p) = 1.15 x Iload(max) / ( 1- Dmax ) = 1.15 x 1.26 / ( 1-0.45 ) = 2.63 ESR < 0.01 x Vout / IRIPPLE(p-p) = 0.01 x 10 / 2.63 = 0.0380 = 38.0 mΩ ESR < 8.7E-3 x Vin / Iload(max) = 8.7E-3 x 6 / 1.26 = 0.041 = 41.0 mΩ
以上からESR < 38mΩです。とりあえず、ここは出力段のコンデンサを並列にしているので問題ないと思います(多分、ですが)。

電圧設定抵抗

出力電圧 Vout / 1.23 -1 = R1/R2より

R1/R2=7.13 R2=10k=10E3[Ω]としてR1=71.3≒75E3[Ω]
入手性を考え82E3Ωを使用します。

入力コンデンサ

入力電圧のデカップリングコンデンサは0.1uFの低ESRを使います....って なんだ?とりあえずセラミックで試してみます。

整流ダイオード

効率をあげるため、ショットキーダイオードを使います。負荷が10V 1.26A なので、これ以上の定格電圧と定格電流が必要です。また、ピーク電流はイン ダクタに流れる最大電流と同じなので、2.5A必要です。

放電実験

回路をユニバーサル基盤上に仮組して性能を測定します。本来、電源回路 単体を対象とした放電実験を行うべきなのですが、電池パックを使った場合と、 電池ボックスを使った場合で結果がだいぶ異なりました。そこで次章「電池パッ ク作成」内にて考察します。

電池パック作成

昇圧回路に電池ボッ クスを使用すると、内部抵抗が大きいため、著しく電圧降下が起きるようです。 そこで電池パックを作成しました。ラジコン用のパックでもよかったのですが 形状が使いにくかったので自作しました。充電には秋月の急速充電キットを使 用します。

試作と実験

負荷=12Ω抵抗での出力電圧の変化。電池ボックスはフジの1800mAhx6、組電池はGP 2500mAx6
時間 電池ボックス組電池
[分] 電池
[V]
負荷電圧
[V]
電池
[V]
負荷電圧
[V]
無負荷8.42 0.00 8.28 0.00
0 6.6511.00 7.4011.14
2 6.0311.00 7.4811.19
4 6.1610.90 7.3811.12
6 6.1010.90 7.3411.08
8 6.0710.86 7.2711.04
10 6.0010.89 7.1611.00
12 3.95 9.65 7.1811.04
14 7.50 3.30 7.1911.03
16 -- 7.0211.00
18 -- 5.1510.54
20 -- 3.4710.48
22 -- 3.15 6.96
24 -- 3.06 5.48
26 -- 3.00 4.56

結論

実際に動かして性能をはかってみます。電池ボックスで作成したのですが、 思ったより性能がでないので組電池を作成しました。結果は、


電源回路実装

以上の設計した定数を下に回路図を作成しました。回路図と、PCB

仮組で性能上問題となると分かっていたLM2577の発熱ですが、基盤に直接 熱を出す構造にしました。これで問題が有れば、さらにフィンをつけることを 考えます。

回路は表面実装部品で作成します。ユニバーサル基盤だと思った以上に容 積が必要になるためです。数枚めの基盤設計なのでまだまだ雑かもしれません が、基盤サイズが最小になるように設計しました。

以下未記述 : 要記述 実際に作った回路の写真&発熱状態のレポート

駆動系の設計

メカ周りです。小型化を目指すということで、色々と制限があります。

足回り選定(暫定版)

当面は、すでに動いていた台車を使ってモータの制御を行いたます。

足回り選定(本式)

電源電圧と足回りのアクチュエータの種類の選定です。以下のように色々考 えましたが、結局ステッピングモータを使用しました。理由は実績があること、 CPUボードにはエンコーダをつける余裕がないことです。

種類 駆動電圧 エンコーダ 備考
ギアードDCモータ 3V,1A〜 必要
ステッピングモータ 3V,数A〜 不要
ブラシレスDCモータ ???? 必要 ホール素子からの出力をフィードバックする必要あり

入手したジャンクのステッピングモータ(右写真:すでにバラしました)は、 以下の仕様です(多分)。本来なら駆動素子が入手しやすいユニポーラ駆動を使 うべきなのですが、デジットで一緒にバイポーラ用のドライバが入手できたこ とと、ユニポーラタイプでこのサイズだと解像度が低くて使いにくいものが多 い(クローポールPM型ばかり)のため、やむなくバイポーラにしました。線が4 本ほど多く、役割が不明ですが、とりあえず何かのセンサじゃないかと思いま す。

メーカ多摩川精機
型式TS3166N913。仕様不明
駆動方式バイポーラ駆動
巻き線抵抗4.3Ω
ステップ数400
サイズ42x42x25
配線駆動用(中央4本)/謎のセンサ用ライン(脇2本x2)
値段\250

暫定版駆動系の回路

本番のモータドライバは基盤を起こす都 合、作るのがちょっと厄介ですし、さらに走行させるためには車体を作る必要 があります。それだとちょっと面倒なので、既に以前作成した車体を利用でき るモータドライバを設計し、後で差し替えます。

今回設計し た物が正方形の方です。面積としては、72x50に収まっています。細長い方が 以前設計したものですが、いろいろと問題(モータドライバが縦向きなので無 駄に容積を喰う、たまにツェナーが焼き切れる、コネクタ配置が使いにくいな ど) があったうえに、ICが故障してしまったので、再度設計しました。

使用するのはサンケ ンのSLA7033Mです。以前作成した車体はユニポーラ駆動ステッピングモータ ですので、ドライバICもそれに合わせて選択しました。また、このICはチョッパ ーで定電流駆動できるので、電源電圧の影響を受けにくく、また、発熱および消 費電力が小さくなります。

回路はCPUのインタフェースとなる絶縁回路、ドライバの回路、CPU側と絶 縁された5Vを生成する回路から構成されます。絶縁回路と5V生成回路は TA84002Fを使ったものと同じです。ドライバの回路はSLA7033Mのマニュアルに あるリファレンス回路と同じです。

出力電流を設計します。まずステッピングモータの駆動電流はデータシー トから1[A]です。発熱やバッテリーの持ちを考慮し、0.3[A]とします。出力電 流は基準電圧/電流検出抵抗で決定されます。基準電圧はデータシートから 2.0Vが最大です。ここでは調整幅を広げるために1Vを使用します。1Vの場合の 電流検出抵抗は1[V] / 0.3[A] = 3.3Ω。E24系列にまとめて3.3[Ω]=33E-1[Ω] です。

電流検出抵抗は大電流が流れるので最大電流を確認します。 1[V]2 /3.3[Ω] = 0.33[W]。ただし調整で最大圧を書けた場合は 2[V]2 /3.3[Ω] = 1.2[W]。つまり1/2W抵抗では耐えられないので 1.5W抵抗を使う必要があります。ただし、2Vをかけるのは最大で標準は1[V]で あること、1W以上は入手が面倒なことから1W抵抗を使用します。

以上の設計をベースに作ったユニバーサル基盤の配置図がこれです


駆動系の回路

駆動系はドライバIC TA84002+フォトカプラTLP521-4で構成します。バイポ ーラ駆動用の素子は入手しがたいのですが、TA84002は日本橋のデジットで\400 で購入できました。メリットは電流1Aの駆動も可能、定電流ドライバであること、 表面実装なので超小型であることです。問題は最低電源電圧が10Vと高いことと、 表面実装であることです。

まず、最低電源電圧=10Vについてですが、昇圧するか電池の数を増やすか、 のどちらかです。昇圧は面倒なので電池を増やすことにしました。当初電源電 圧は5V(1.2V x 4)で考えていましたが、TA84002を駆動するために10V(1.2V x 8=9.6V)にします。

つづいて、表面実装ですが、変換基板は場所を無駄に食うので自分でドラ イバ用基板を起こすことにしました(サンハヤトキットで作る、片面基板です が)。手間はかかりますが。

回路図

詳細はこちらで。

gschemで回路図を作成しました。TA84002周りはリファレンス回路と殆ど同 じです。それに、四式試作型改で使用したTLP521-4周りのアイソレーション回 路を接続しています。また、TA84002の駆動用に5V電源が必要になるので、基 準電圧生成用の3端子レギュレータもあります。

配線図

gschemで生成した図面を元に、netlistを生成し、それからpcbを使って配 線図を生成します。キットを使い自分で作るということを前提に、設計ルール は甘めのピン間1本にしています。また、今回は表面実装部品を中心に使うこ とは断念しました。理由は表面実装部品が手元に無いことと、表面実装部品が一 通り揃った物が思ったよりも高価であることです。

焼いてみる

こんな感じです。 これはプロトタイプです。これを改良した基盤を作成中です。大量に跳んでいる ジャンパ線と、下の方にくっビニールテープでついているユニバーサル基盤は回 路の動作確認用です。


大幅改良

修正版の基盤がこれ(画像PDF)です。

前回の回路の問題点として、1)1列のヘッダピンを使っているが、意外と折 れやすい、2)TV84002Fの5Vを生成している三端子レギュレータと出力段のコン デンサが高温に、3)実装面積がまだ大きい。が、あります。

これを改良するために大幅に変更します。1)入出力は二列のヘッダピンに、 2)出力段のコンデンサの容量を大きくする&レギュレータの熱を基盤に逃がす、 3)とにかく最適化で密度Up

結果、実装面積1/2 ( 75 x 35 )で、三端子レギュレータなどの発熱も問題 ない状態まで持ってこれました。


速度曲線生成(割り込み周期可変)

ここは使用をやめました。理由は、各両輪ごとに曲線を生成しようと すると、それぞれにタイマが必要ですが、H8/3694ではタイマが不足するため です。

計算式

タイマを一本使って1 ステップ毎にタイマ割込みを行なう方法をとります。 そこで、割り込みの計算量を減らすことを考えます。一回割り込みが入ったら 次の割り込みタイミングを計算してセットしなくてはいけませんので、計算を 割り込み中で行なう必要があるためです(計算速度が最高速度の上限に影響を 与える恐れがあります)。

ここでは差分方程式を使って、ルートが必要な計算を割算一回にまで簡略 化しました。 x = a t 2 / 2として、一定距離進むために必要な時間は、

x+Δx = a ( t + Δt )2 / 2 ≒ a ( t2 + 2tΔt ) / 2 Δx = a t Δt = a √(2x/a) Δt = √(2ax) Δt Δt = Δx / √(2ax)
ここでΔtをtstep、Δxをxstepと定義。tstepのxに対する変化率は
tstep = xstep / √(2ax) = xstep * (2ax)1/2 = xstep * (2a)1/2 * x-1/2 dtstep / dx = xstep * (2a)1/2 * ( -(1/2) * x-3/2 ) = xstep * (2a)1/2 * x-1/2 * ( -(1/2) * x-1 ) = tstep * ( -(1/2) * x-1 ) = tstep * ( -1/2x )
以上から、差分方程式を立てる。
tstep(x1+Δx) = tstep(x1) + Δx * (dtstep/dt)(x1) = tstep(x1) + Δx * dtstep(x1) dtstep(x1+Δx) = Δx * tstep(x1+Δx) * ( -1/2x )

速度曲線生成(割り込み周期固定)

一つの割り込みで二つのステッピングモータを制御するために、周期的な タイマ割り込みを用いることを考えます。計算の効率を考えて差分方程式で計 算するようにします。

計算式

正弦曲線や等加々速度曲線などの手もありますが、ここでは、等加速度曲 線を使用します。この計算式で生成した曲線が右です。

x = at^2
tで偏微分し
∂x/∂t = 2at x(t+Δt) = x(t) + Δx = x(t) + ∂x/∂t Δt = x(t) + 2at Δt
Δt=t_step=constとする。また、t=n*t_stepのときをx_nと定義すると
x_(n+1) = x_n + 2a * n * t_step
2a * t_stepは定数なのでAと置き換えて
x_(n+1) = x_n + A * n
加速する場合はこうなるが、逆に減速する場合は
x_(n-1) = x_n - A * n
となり、nが分かると計算可能です。速度が連続な場合は加速中にnをカウント アップして減速中にカウントダウンしておけば、計算自体不要です。

割り込み周期一定にすることを考えます。割り込みの度にカウントアップ していき、A*nが1を越えると一パルスを出力する、と考えると1/(A*n)回の割 り込みで一回の出力を行えばいいと分かります。

さらに、精度をあげることを考えます。1/(A*n)回の割り込みごとに1回出 力した場合には、例えばA*n=0.6の場合には、四捨五入されA*n=1と同様に常に 出力されつづけてしまいます。これによって値は不連続に変化し、極端な場合 にはA*n=1の場合とA*n=2の場合は周波数が二倍差になりますので、一気に倍の 速度まで加速してしまうことになり脱調の原因となり得ます。そこで、「一回 割り込みが入る度にA*nずつカウントアップしていき、1 を越えたらカウンタ から1を引く」ことを考えます。これならば0.6の場合10回割り込みが入れば6 回出力され、平均的に見ればA*n=0.6と同等の動作になります(ただし、このま までは小数演算が必要となってしまうので、固定小数点を使って計算していま す)。

以上の方式を組み合わせて作ったのが、回路図+プログラムの Program/application/SpeedController.{h,cpp}です。

割り込み周期

400[pulse/rot]のステッピングモータに46[mm]の車輪をつけ、1-2相励磁で 駆動し800[mm/s]で走る場合を考えます。このとき必要な出力の周期は以下の ようになります。

800[mm/s] / ( 46[mm] * π ) = 5.5[rot/s] 400[pulse/rot] * 2 * 5.5 = 4400[pulse/rot]

TimerAを用いた場合は基準クロック=φ/8とした場合、256のカウンタで数 えるのでφ/8/256=20[MHz]/8/256=9766[Hz]です。割り込みの二回に一回を無 視すれば大体使えなくもないでしょう。

処理が間に合えば、ですが。

駆動系マネージャー

移動系のク ラスは図のような構成になります。

MovementManager
移動用ステッピングモータの制御を行います。
PhaseController
モータへの出力値の制御を行います。回転方向とステップ数を入力することで、出力値を取得できます。
SpeedController
モータの出力変化のタイミング(速度)の制御を行います。目標速度を入力することで、現在速度を取得できます。
MoveMode/MoveModeJog/MoveModeDistance
移動モードのクラスです。各移動モードに依存した目標値と現在位置、現在速度を入力することで、現在の目標速度が取得できます。

機構部品の加工

個人で作る時に一番困る部分だと思います。

アクリル板

以前はアクリル板で作成していました。アクリル板はあまりロボット向き の材料とは言えません。しかし「一晩でロボット全体を作れた」ほど、加工性 はいいです。

アルミ加工

必要性は感じていたものの永らく面倒で放置していました。アクリルの脆 さ&厚さに限界を感じ「そろそろやらなきゃなぁ」と感じ、ようやく挑戦です。

治具作成

折曲げ/切断で使用する治具です。他の方は万力を使用していますが、手 元に万力を固定できる十分な強度の机がありませんでした。そこで代わりにな る治具を作りました。治具とはいっても、アルミのL字棒(t3, 25x25x1000)を 適当に二つに切って、その両端をM5の蝶ネジでとめただけです。また、\100 ショップのクランプもいくつかあったほうがいいようです。トータル\1500程 度の安価なものですが、今回の加工には十分でした。

ケガキ

切断箇所や曲げの箇所に傷をつけてケガキます。「シールに図面を印刷す れば、ケガく必要自体無い」のですが、適当なプリンタが無いので直接やりま した。カッターと定規で線を引くのですが、コツは「基準線を一本引いて、全 てそれを基準に書く」、「角度を信用せず長さを信用する」、「線の幅で誤差 が入らないよう気をつける」ことです。

切断

治具ではさみ、大型カッターで両面から5.6回切り込みをいれ、エイヤと力 ずくで折り曲げ、何回か折るとパキンと割れます。切断長さによっては相当な 力が必要です。また、私の作成した治具ではネジの間隔が広すぎるので、治具 自体が変形してしまいます(t3なのに...)。そこで、治具のネジをつけれない 区間はクランプで挟むことで変形を抑えます。

曲げ

治具ではさみ、エイヤと力ずくで折り曲げるだけです。元L字棒は直角が出 ているので容易に直角が出せます。注意点は、「アルミは繰り返し曲げると割 れる」ということです。アルミは加工硬化がおきやすく、また元々脆性材料な ので大きな変形には耐えられません。また、R3程度がつく ので、設計でこれを考慮する必要があります。

課題

シャーシ

これまでの失敗

「シャーシにどうやって基盤を載せよう?」と毎回悩んでいました

これまでは、駆動系とハンドと回路は別々に設計して、強引に駆動系とハ ンドを再設計して結合して、最後に基盤が載る場所がなくて「うーん」とやっ ていました。結果、以前作成した車体をみると「基盤の塊がブロックとして シャーシの上に載っている」構造です。

このようにした理由はハードは都度作り替えて調整すればいいのですが、 基盤の場合は作り替えとなると恐ろしく手間がかかるためです。

しかし、基盤は銅線と樹脂の塊ですので思った以上に重量がありますので、 非常に好ましくない状態です。始めから組み込むことを前提にすれば、改善で きると思います。

基本構造

色々アイディアを出しましたが、結局は「シャーシの一部を回路にする方 式」にしました。ただし「メカと回路の設計依存が大きい」を解消するため、 メインの基板は回路単独で設計して、車体内の配線を行う回路(ユニバーサル 基板で作成)だけをシャーシの一部とします。これならば、設計変更は容易で す。また、機械的にも比較的壊れにくくなります。

設計

以上を元に設計を行いました。多少加工が面倒なデザインですが、なるべ く強度が高くなるようにしました( pdf )。

車輪の配置は3点支持です。以前の検討 のように、本当は4点支持にした方が望ましいのですが、部品を配置する 容積が不足しているので、ここでは3点支持を用いています。

また、ハンドをつけるマウンタとなる部分もここで考慮しておきます。理 想としては図の左側なのですが、重心などの都合で設置できない可能性が有り ます。そこで、図の右側にも設置できるようにスペースを用意しています。


ハンド

ハンドのRCサーボ

ハンドはRCサーボで制御するとします。特に理由はありません。使いたかっ たから。

H8のTimerWで駆動信号を生成します。TimerVでは解像度が低すぎること、 TimerWを使えば最大3チャンネル駆動できることが理由です。

PWMの基準となる周波数の生成を考えます。RCサーボの駆動信号が50〜 60[Hz] の信号が必要です。TimerWは基準信号をカウントアップしていき、レ ジスタの値と一致したときにリセットすることで周期的な信号を生成できます。 内部クロックφ=20MHzです。TimerWの基準信号はφを1〜8分周した値です。レ ジスタは16bitです8分周で使用するとします。よって、レジスタ値は以下のと おりです。

20[MHz]/8/50[Hz] = 50000 < 2^16

PWMのパルス幅に該当するレジスタ値を考えます。パルス幅は1±1[ms]なの で、全体(20ms)に対して変化幅は1/50=2[%]になります。レジスタ値が50000な ので、50000*0.02=1000段階で制御できます。値としては、0〜20000を入力す ればOKです。

ハンドのメカ

ハンドは毎年一番作るのに頭を悩まして、結局マトモなものができてきま せん。今年はなんとかしようと、サーボモータを導入することにしました。モ ジュール化されているので機構的には楽になります。十分なパワーがでるか問 題ですが、ロボットの足に使っていることからそう弱くはないでしょう。使用 するのはPARK HPXという4.2kgf/cm、0.1s/60degのサーボです。稼動範囲は 180deg程度です。

ボール重量を大目に見て200gfとし、摩擦係数を0.5とすると持ち上げるの に必要な押し付け力は200/0.5=400g。4.2kgf/cmなので長さ10cmまでは持ち上 げることができる。稼動角が90degなので、最大の取り込み範囲は10√2=14cm。

参考文献/サイト

goto TOP
このドキュメントはフリーです。
勝手に再配布/変更しても構いません
$Date: 2006/11/07 03:20:40 $
$Revision: 1.1.1.1 $