Darkside(リンクエラー修正しました)

2018年06月の記事

<< 前のページ

2018年6月30日(土) 20:12

dsPIC 試験用

 動作試験用の基板を組み立てる。

 ピンアサインとデーターシートと本の回路図を眺めながら、その場の成り行きでパーツを取り付けて行く。後から切断したパターンや、露骨なジャンパーもある。
 実際には、記事として公開している作業の裏で少しずつ何日にも渡って製作を進行させていた。手間は、凄まじく多い。それに、ディスクリートだとどうしても実装面積が必要になる。面積的には、STM32F4 Discovery の基板丸ごとと比較しても、それほどのアドバンテージが無さそうである。

 やはり、ブラシレスモーター制御までは dsPIC33 でやるとしても、ドリル戦車のメイン頭脳は STM32F4 の方が適切に感じる。dsPIC33 でもたぶん能力的には足りるが、動作させるための周辺パーツまで実装した基板を用意するまでが大変過ぎる。
 STM32F4 Discovery は無駄なパーツもあれこれ付いて来るが、最終的なサイズは大差無いうえに使える I/O は多い。

 なお自作プロポの送信機には、液晶付きが魅力的なので STM32F7 Discovery を使うつもり。

 緑の配線は、使わない入力ピンをGNDに接続しておくためのもの。
 いざ使うことになったら、GNDから切り離してそのまま本配線に使う。

 3.3V を作るための三端子レギュレーターは秋月調達だが、800mA まで可能で 500mA におけるドロップ電圧が典型 0.18V 最大 0.28V しかない優秀なものだ。
 数年前に比べて、確実に進歩している。

 基板の電源は、エネループ4本。

 ラジコン受信機側は、モーター用のメインバッテリーから 5V を作ることが多い。しかし、今回はエネループ4本を別に用意して使うつもりである。バッテリーの総搭載量を増やすことで航続距離を伸ばせるし、ノイズ対策になる。
 2系統の電源を用意するのは煩雑であるとして通常は忌避されるが、ドリル戦車のコンセプトは、バッテリー搭載量を増やすことによる航続距離の延長だ。

 余分なバッテリーを積むというのは、自然な流れである。

written by higashino [ドリル戦車] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

2018年6月29日(金) 22:31

フラックス

 長ネジへ、ピアノ線のハンダ付けを進行させる。

 可能な限りハンダメッキを施しておき、いつも通りに超音波洗浄。
 どうしても入り組んだ部分ができてしまうので、フラックス除去に不安がある。

 そのまま水中に一晩放り込んでおいたら、みごとに錆びた。

 残留フラックスが十分に水に溶け出してくれず、錆びさせるパワーを残していたことに呆れる。何しろ、水没させる前には超音波洗浄まで済ましてあるのだ。
 板金用フラックスは強力だが、強力過ぎて除去が大変過ぎる。

 それでもハンダメッキが行き届いた部分は錆びていないため、いかに漏れなくハンダメッキを施せるかが勝負だ。輪の部分にハンダメッキするのが難しく、完全にやられた。
 とはいえこの太さ0.35ミリしかないピアノ線は、定格負荷24キロもある。少々錆びても試験用には十分な強度があるだろう。
 水を切り、コーティングを施してそのまま試験用の組み立てに投入。

written by higashino [ドリル戦車] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

2018年6月28日(木) 21:31

サスアーム増産

 サスアームを、更に3本増産する。

 冶具の実戦投入初陣。

 しかし、テーブルドリルの仕様不足。バイスで底上げすると6ミリドリルを十分に高く掲げることができなくなり、止むを得ず作業台の外で作業。そうなると、垂直を確保するのが至難となる。
 さすがのベアリング補助をもってしても、作業が困難を極める。
 うまく垂直近くにドリルが立てば、容易に貫通できる。垂直が合わないと、ロックしまくる。遅々として作業が進まない。

 それでもようやく、穴開け完了。

 テンション調整用のストッパーは、外径16ミリの鉄ワッシャーで作り直した。

 後は、六角ボルトとワッシャーとナットを組み合わせれば完成。

 これでサスアームは合計4セットになり、車体片側の転輪すべてを賄える。

written by higashino [ドリル戦車] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

2018年6月27日(水) 21:28

試作してみよう

 重要な話を忘れていた。
 モータードライバーを自作するのは、モーター電圧7セルに市販ESCでは対応できないからだが、他にも自作には大きなメリットがある。それは、制御指令をデジタルデーターのまま与えられること。サーボパルスや電圧などのアナログを介することなく、モーター回転をデジタルで指示できる。もちろん、キャリブレーションも不用だ。
 更に、ドリル戦車は2モーター方式。これは、左右の回転数が一致しないと直進できないため、直進安定が悪いというデメリットがある。しかし、モーター回転をデジタルで指令したうえにブラシレスモーターは回転数を精密に制御できるのだから、左右の回転数をピタリと一致させることは難しくない。2モーター方式の弱点を補うことが可能であり、モーター2つ分のパワーを活用できるメリットが活きる。

 しかしそのためには、デジタル値を受け取らねばならない。
 dsPIC33FJ12MC202 は28ピンだが、I/O に使えないピンが多いうえに PWM という大物がピンを占有する。ホールセンサーも不可欠だ。つまり、ピン数に余裕が無い。
 そうなると、SPIは採用し難い。いっぽうで通信は遅くて構わないので、ここはI2Cだろう。I2Cはプロトコルが複雑で動作させるのに苦労するが、最悪ソフトウェアSPIでいい。その場合はI2C同様に信号2本で行けるから、I2C用の2本を流用すれば良い。

 当面の試験では、I2C用の17番ピンと18番ピンにはプッシュボタンを接続する。

 PWM のフォールト入力は、サンプルプログラムでは使用しない設定のようだ。本では使用しているが、別に使用する必要はない。ブラシありモーター用の自作アンプでも、そういう機能は組み込んでいない。今回は電流モニターは行う気だが、自作アンプの機能として実装するかどうかは別問題である。
 電流モニターは、モーターの負荷を確認する目的で使いたい。ブラシレスモーターは回転数を制御できるが、回転数が遅いことと負荷が大きいことはイコールではない。直接的に負荷を知るには、電流の方が分かり易い。それにどういう意味があるかと言えば、シフトチェンジの参考である。負荷が過大ならシフトダウン、というわけだ。

 余ったピンは汎用 I/O としてキープしておく。
 アナログ入力は3系統確保し、1つは試験時にモーター速度を指令するためにボリュームを接続する。

入力
出力
デジタル
アナログ
pin
番号
PicKIT4
pin番号
MCLR IN D リセット入力 1 1
AN0 IN A モーター速度 2
AN1 IN A 3
AN2 IN A 4
IC1 IN D ホールセンサー1 5
IC2 IN D ホールセンサー2 6
IC7 IN D ホールセンサー3 7
VSS D GND 8 3
OSI クロック水晶 9
OSO クロック水晶 10
PGD IN D ソフト書き込み用 11 4
PGC OUT D ソフト書き込み用 12 5
VDD D 3.3V 13 2
test OUT D LED試験 14

 本と異なり、マイクロチップサンプルはホールセンサー3本ともインプットキャプチャー(IC)している。修正は容易だったので、本と同じピンに割り当て直す。と言うより、元の割り当てだとI2Cと重複する。
 また、こっちで改造することもなくサンプルプログラムは最初から逆転対応になっている。
 公式サンプルはどうやら、公式が販売している評価用モータードライブ基板用らしい。となると、dsPIC の採用を検討しているメーカーが使うだろうから、適当な性能ではセールスにつながらない。モーターの性能を十分に引き出せる高性能なプログラムになっているのだろう。若干ヌケている部分はあるものの、正弦波駆動で正逆両方向対応と、豪華仕様。

入力
出力
デジタル
アナログ
pin
番号
AVDD A 3.3V 28
AVSS A GND 27
PWM 1L OUT D モータードライブ 26
PWM 1H OUT D モータードライブ 25
PWM 2L OUT D モータードライブ 24
PWM 2H OUT D モータードライブ 23
PWM 3L OUT D モータードライブ 22
PWM 3H OUT D モータードライブ 21
VDDcore IN 3.3Vに接続しない 20
VSS GND 19
SDA1 IN D SWITCH_S4 18
SCL1 IN D SWITCH_S3 17
test OUT D サーボパルス試験 16
test OUT D サーボパルス試験 15

 サンプルプログラムでは周辺ICの制御のためRB8(17番)とRB9(18番)をOUTで使っているが、それは必要なら14〜16番を使用する。周辺ICは独自実装なので、必要になるかどうかは分からない。

 ひとまず、このピンアサインを前提に、試験用基板を製作する。

written by higashino [ドリル戦車] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

2018年6月26日(火) 22:16

パラドックス

 良く考えると、ピンアサインを本に合わせる必要は無い。なぜなら、本に準拠したサンプルプログラムは入手できないからだ。
 本は10年ぐらい前の記事であり、10年前にマイクロチップ社が公開していたプログラムを使っている。それは、もはや公開されていない。
 コンパイルに成功したのは、現在マイクロチップ社が公開しているプログラムだ。そのプログラムが前提としているピンアサインを解析し、ハードをそれに合わせて製作するのがベターだろう。製作前のハードを変えるのは、簡単だ。

 本は別に無駄にならない。実装の具体例として非常に役に立つ。要は、サンプルハードウェアだ。

 ここで大問題となったのが、FICD である。プログラムの書き込みには MCLR と VSS と VDD 以外に2本のピンが必要である。その2本をどの2本にするかという選択は3通りが可能であり、逆に言えば3通りのどれであるかを設定しなければどの2本を使用するかが決まらない。
 ところが、公式サンプルプログラムには、設定用の FCID に関する記述が存在しない。
 設定しない場合、デフォルトでどれが使用されるとかあるのか?データーシートからは、読み取れない。これが明確にならなければ、プログラムを書き込むことはできず当然動作しない。

 いや、そうじゃないこれはパラドックスだ。
 FICD の設定をしなければ書き込めない。でも、書き込まなければ FICD を設定できない。3通りあるうちのどの2本の組み合わせてプログラムを書き込むのか・・・を設定する前にプログラムを書き込まねばならないというパラドックス。どうなってんの?
 訳が分からないが、本では11番ピンと12番ピンを使っているのだからその前提で製作しよう。

 p33FJ12MC202.h に前後のレジスターは記述があるので、それに倣って自分で書き加える。

/* Register FICD (0xf8000e) */

#define _FICD(x) __attribute__((section("__FICD.sec,code"))) int _FICD = (x);

/*
** The following constants can be used to set FICD.
** Multiple options may be combined, as shown:
**
** _FICD( OPT1_ON & OPT2_OFF )
**
** PWM Mode Select:
** JTAGEN_OFF JTAG disabled
** JTAGEN_ON JTAG enabled
**
** ICD Communication Channel Select bits:
** FICD_PGE1 Communicate on PGEC1 and PGED1
** FICD_PGE2 Communicate on PGEC1 and PGED2
** FICD_PGE3 Communicate on PGEC1 and PGED3
** FICD_NONE Reserved, do not use
**
*/

#define JTAGEN_OFF 0xFFDF
#define JTAGEN_ON 0xFFFF

#define FICD_PGE1 0xFFFF
#define FICD_PGE2 0xFFFE
#define FICD_PGE3 0xFFFD
#define FICD_NONE 0xFFFC

 そして、SinusoidalBLDC v2.0.c の先頭にコンフィグ設定を追加。

_FICD(JTAGEN_OFF & FICD_PGE3);

written by higashino [ドリル戦車] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

<< 前のページ

Darkside(リンクエラー修正しました)

Generated by MySketch GE 1.4.1

Remodelling origin is MySketch 2.7.4