2018年6月25日(月) 21:11
_Delay という文字列は、ソースのどこにも存在しない。
しかし、Delay() という関数なら呼び出されている。これが、内部的には _Delay という名称でライブラリ参照している、というのは良くあるパターンだ。そこで Delay() という関数を検索すると、これは使用されている。
しかしそれは2箇所ぐらいしかなく、ボタンが押されているのを待つループ内なので多分ミリ秒単位だろう。これなら、ソフトループ決め打ちでもそれなりに代替可能だ。
ホンモノの delay.h というのは、クロックが異なっても汎用的に使えるようにするため複雑化している。40MHz 専用と割り切り、Delay() 関数を自分で用意すればいい。
これでエラーは消滅し、リンクまで正常に通るようになった。
十分だ。
あとは、サンプルプログラムが想定しているピンアサインを調べ、こっちが希望するピンアサインへと書き換える。
外部水晶が8Mhzなのを、10MHzで動くようクロック設定を書き換える。
そんなあたりが重要作業となる。
main() 関数スタート直後で、クロックを設定している。
CLKDIVbits.PLLPRE = 0;
PLLFBDbits.PLLDIV = 18;
CLKDIVbits.PLLPOST = 0;
クリスタル8MHzから、40MHzを作っている。
PLLPRE は0だと1/2 なので4MHz になる。
PLLDIV は18だとx20なので、80MHz になる。
PLLPOST は0だと、1/2なので40MHz になる。
3段階を経て、確かに計算は合っている。だが、データーシートに違反している!
PLLDIV 後は100〜200MHz でなければならない。80MHz は、範囲外である。MCCでクロック設定する場合は、範囲外の値は選択できないようになっている。だが、MCC無しではこの余りに複雑な設定を、中の人も見落としたようだ。
こんなサンプルプログラムで、本当に大丈夫か?
10MHz から 40MHz を作るのであれば、PLLPRE で1/5して、PLLDIVでx80して、PLLPOSTで1/4すれば良い。これで、完全に仕様を満たす。
CLKDIVbits.PLLPRE = 3;
PLLFBDbits.PLLDIV = 78;
CLKDIVbits.PLLPOST = 1;
・・・と書き換えれば 10MHz クリスタル対応化完了である。
続いてピンアサインを変えればすぐだ、と思ったら甘い。実際にはまだまだやることが多い。
サンプルでは、モーターの回転数を 60RPM から 6000RPM と想定している。最低 60RPM はともかくとして、上が 6000RPM では低過ぎて普通の540モーターの力を発揮できない。11000回転までキッチリ回しても、まだ足りないってのに。
更に、戦車用だから逆回転も出来なければならない。ある程度サンプルの処理内容を理解しないと、どうにもならないだろう。
written by higashino [ドリル戦車] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]
2018年6月24日(日) 20:54
MCCが使えない。ならばとサンプルプログラムを流用しようにも、古過ぎて delay.h が動かずコンパイルできない。
どちらから攻めても、難攻不落である。
だが、以前 dsPIC を扱ったときにXC16もインストールしていて、実は古いバージョンのXC16もパソコンに入っていることに気付いた。マイクロチップ社はソフト開発が分かっているようで、旧バージョンをアンインストールしないと新しいバージョンをインストールできない、などという言語道断な仕様になっていない。
複数バージョンが共存できる。
さっそく、最新の1.34ではなく当時の1.21を選択する。念のため、プロジェクトを新しく作り直す。

だが、早々に気付いたのだが、サンプルプログラムに含まれる lcd.h や lcd.c は使用されていない。というか、どこからも参照されていない。液晶ディスプレイの付いた評価用ボードのためのサンプルかと思っていたが、違うようだ。これらをプロジェクトに含めないと、コンパイルエラーは一気に減る。そして実は、XC16が1.34であるか1.21であるかというのは、無関係だった。
1.21だろうと、エラーは出る。
関数の返り値が void なのに、それを変数に代入している・・・とエラーが出るので、代入部分をコメントアウトする。

1.21であっても、_Delay が無いというエラーは出る。そこで、FCY の定義部分の直後で libpic30.h をインクルードする。「そんなものは見つからない」と警告表示が出ているが、コンパイルではエラーにならないので無視して良い。libpic30.h 自体も、XC16のディレクトリに含まれている。

しかし、サンプルコードがコレで、大丈夫なのだろうか?
こうしてコンパイルは通ったが、リンクが通らない。
undefined reference to '_Delay' というエラーが出る。これは、コンパイラーを1.21にしても出る。Delay.h をインクルードしても、出る。
とにかくこのサンプルコードが動かないのは、すべて delay が絡んでいる。これは、マイクロ秒あるいはミリ秒の時間待ちを生成するマクロらしい。先日8ビットPICの利点として、命令の実行時間を厳密に測れる、というのを書いた。
16ビットPICでは自力で時間待ちループを作るのが面倒になって来て、マクロが用意されている。しかし、それがコンパイルの邪魔をする。
written by higashino [ドリル戦車] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]
2018年6月23日(土) 16:51
MCCを起動し、ピンアサイン通りに割り当てて行く。ただし、機種は実際に使う dsPIC とは異なる。MCCはまだ、dsPIC33FJ に対応していない。
問題は、ICD である。これは ICE 用ではなく PicKit も含めたデバッグツール用の割り当てっぽいのだが、PGC と PGD の割り当てを11番ピンと12番ピンにすることは不可能なのだ。3通りの選択があるが、いずれも別のピンに割り当てられてしまう。すなわち、少なくともこの部分は dsPIC33FJ との互換性がない。
よって、どこまで流用できるのか疑問が増す。

ホールセンサーの1本をインプットキャプチャーし、モーターの回転数を取得できるようにすると便利だと考えた。それを2番ピンで行おうとしたが、ICできるピンは限られており2番ピンでは無理。そこで、止むを得ず15番ピンを使う。
いちおうソースリストとして出力したし、それを問題なくコンパイルすることも出来た。だが、PCG と PCD は未使用にしてあるため、でき上がった HEX ファイルをマイコンに書き込むことはできない。
MCCが dsPIC33FJ に対応していないのは、余りにも痛い。
MCCをいじることにより、dsPIC の流儀が少しは分かるようになったので、自力で頑張るしかあるまい。
例えば PWM では、過電流などで出力を停止できる。では、過電流のときには17番ピンの入力がHになるものとして、それをマイコンのコンフィグではどう定義すれば良いか?
PWM のエラー入力を定義するとき、ピン番号による指定は出来ないのだ。
FLT1 とか FLT2 とか、PWM の項目に損z内するのを見て欲しい。指定できるのは、この FLT1 とか FLT2 と言った「論理名」である。
そしてその論理名に、実際のピン番号を割り当てるという2段階方式になっている。
今回の例では、FLT1 に17番ピンを割り当て、PWM の詳細設定中において、エラー入力に FLT1 を指定している。
written by higashino [ドリル戦車] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]
2018年6月22日(金) 21:46
まずは、以前話題にした本「モーターの動かし方早分かり」において、dsPIC33FJ12MC202 のピンをどのように使用しているかを整理する。
2番ピンが謎で、3相あるうちの1相だけ特別に電流を検出(抵抗により電圧変換)し、それを入力している。
3相合計の電流は別途モニターし、過電流を検出して17番ピンに入力している。だから特に必要がないのだが、本ではセンサーレスも取り上げており、1つの試験基板でセンサーありと両方の試験ができるようになっている。その関係だろう。センサーあり専用の場合は、恐らく必要ない。
よって2番ピンは、実際には別の用途に使う(当面は未使用)。
| 入力 出力 |
デジタル アナログ |
pin 番号 |
PicKIT4 pin番号 |
||
| MCLR | IN | D | リセット入力 | 1 | 1 |
| モーター1相電流 | IN | A | 電圧変換された電流 | 2 | |
| 外部ボリューム | IN | A | 外部からの命令用 | 3 | |
| 電源電圧 | IN | A | モーター駆動電源 | 4 | |
| ホールセンサー1 | IN | D | モーター付属 | 5 | |
| ホールセンサー2 | IN | D | モーター付属 | 6 | |
| ホールセンサー3 | IN | D | モーター付属 | 7 | |
| VSS | D | GND | 8 | 3 | |
| OSI | クロック水晶 | 9 | |||
| OSO | クロック水晶 | 10 | |||
| PGD | IN | ソフト書き込み用 | 11 | 4 | |
| PGC | OUT | ソフト書き込み用 | 12 | 5 | |
| VDD | D | 3.3V | 13 | 2 | |
| 外部ボタン1 | IN | D | 外部からの命令用 | 14 |
16番と18番のピンは、本だとパソコンとの通信に使用される。そんな必要はないので、動作試験に流用したい。つまり、dsPIC33 は「動かす」までが大変である。だから、まずはLチカあたりから開始。LEDを16番ピンあたりに接続する。その次は、車体傾斜装置の動作試験を行うのに使う。
16番と18番にサーボパルスを出力し、リニア・アクチュエイターを動かしてみたい。ここでは、3.3V→5Vのレベル変換も試験できる。
PicKit 4 は8ピンだが、1〜6番ピンまでを使用して PicKit 3 までと後方互換がある。6〜8番の3つのピンは、どこにも接続しない。
| 入力 出力 |
デジタル アナログ |
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 | ||
| サーボパルス2 | OUT | D | 他デバイスと通信 | 18 |
| モーター過電流 | IN | D | 過電流ならH | 17 |
| サーボパルス1 | OUT | D | 他デバイスと通信 | 16 |
| 外部ボタン2 | IN | D | 外部からの命令用 | 15 |
ブラシレスモーターを選定しようとネットを漁っていて気付いたが、廃番になるのが早い。
こういう世界では、長期に渡って供給が保証されそうな製品を使いたい。すると、どうしてもタミヤになる。タミヤの 15.5T センサー付きが最有力だ。ただし、ホールセンサーがデジタル出力かどうかは、要確認である。
written by higashino [ドリル戦車] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]
2018年6月21日(木) 21:56
実際に組み立て手順をキッチリと確認すると、「金属袋詰A」で事足りるなんて訳が無かった。
不必要なパーツと抱き合わせされるようなことはないが、現実には1万円近く必要だ。
まず、組立説明図をダウンロードする。パーツだけあっても、組立説明図が無ければどうにもならない。
1/10 トヨタ ハイラックス ハイリフト(ITEM58397)
| 部品名 | 部品コード | 価格 |
| シフトロッド | 9400461 | 480 |
| 金具袋詰A | 9400456 | 6200 |
| ファイナルギヤ袋詰 | 9335454 | 670 |
| プラギヤ袋詰 | 9335128 | 470 |
| Aパーツ | 9005817 | 1300 |
| Jパーツ | 9115047 | 620 |
| 合計 | 9740 |
モーター保護のスリッパークラッチまで装備している。この機能ならこの価格は仕方あるまい。
ギアボックスとして機能させるだけであれば、Aパーツは必要ない。それで1300円も浮く。しかし、Aパーツはギアボックスを密閉し埃や砂から保護するのに役立っているし、固定する際にも役に立つ。併せて買うのが無難。
注文も、カスタマーサービス内からオンラインで可能だ。
※消費増税により、現在の価格はたぶん上がっています。
これで、3速ギアボックスを単体入手できる。ただし、まだ注文していないため生産中止になっていないかどうかは分からない。パーツリストに誤りがあるかどうかも確認できていない。
DIYやったことが無ければ、高いと感じるかもしれない。ならば、やってみるといい。タミヤのと同じ機能性能重量サイズのギアボックスを、1万円で自作できるかどうか。
他にもタミヤ製品に使われている魅力的な機能があれば、同様にして入手できる。製品の組立説明図からパーツリストを洗い出し、注文。
written by higashino [ドリル戦車] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]
Generated by MySketch GE 1.4.1
Remodelling origin is MySketch 2.7.4