fc2ブログ
2019-10-12 10:50 | カテゴリ:PIC応用回路

ちょっと前に、AMAZONでステップモータ(超小型版のネジビス付き)を購入し、テストしました。
あれはあまりにも小さくて、何かを動かすには非力なので、その後もう少し大きな物を探していました。
しかし、ちょうど良い大きさ物が無く、仕方がないので、4cm角のちょっと大きいステップ・モーターを3個購入しておりました。

今回はこれを上手く制御できるように「勉強」したいと思います。

(STM0101)

今回のステップモーター(17HS08-1004S)です。
結構大きく、重い物です。

PM0101.jpg





続きは、、、、


まずは部品の整理から。
モーターは、製品に型番号が記載されていましたので、ググったら簡易データシートがありました。

(PM0102)

PM0102.jpg



ステップ・モーター以外は、

ステップ・モータードライバ(A4988)。

(PM0103)

PM0103.jpg



これはちょっと前に、小型パルスモータ(ステップモーター)を入手した際に調達してありました。

(PM0104)

PM0104.jpg




このドライバーは、励磁のパターン(フルドライブから1/16まで対応)の指定、リセット、回転方向の指定、をすると、後は起動するパルスを与えるだけです。

(PM0105)

PM0105.jpg



端子名を印刷した基盤が裏側になるので、ちゃんとメモしておきます。(笑)




それ以外は、PIC16F18875、10KΩの可変抵抗、プッシュSW、確認用LED
以前制作した、表示装置、そしてPIC-KIT3です。

これらを順にブレッドボードに組み上げていき、ジャンパー線で回路をセットしていきます。

(PM0106)

PM0106.jpg



まずは、PICへのプログラミングと起動。printf文による文字表示の動作確認、まで進めました。

(PM0107)

PM0107.jpg


何回か、配線の間違い(笑)を修正して、小さな「うっかり」だけで、起動できました。

printf文は、TXからシリアル通信で出力された物を例の表示装置に表示させます。
この段階では、割り込みによるバッファでの表示ではなく、まずは素直に「直接出力」で、SWの動作と表示の確認です。


一応の動作確認ができたので、次に、TXのデータをバッファリングして割り込み処理で送信する様にしたいので、MCCでシリアル出力にバッファリングと割り込み処理の設定をしました。
ついでに、MCCで、タイマーの初期設定をしました。(まだタイマー値はセットしていません)

ステップ・モーターに与える駆動パルスのトリガーを計数するためです。

これらのタイマー割り込みをMCCでセットし、main関数で「割り込み解除」と「周辺機器割り込み許可」を記述すれば、文字列をバッファリングの上、割り込み処理で表示してくれるはずです。

所が、起動直後の動作確認LEDが定期点滅しません。点灯したままです。
どうやら、イニシャライズ直後の最初のprintf文が表示されません。
先ほどの「直接出力」ではちゃんと動作していたのに。

ここではまりました。
MCCの設定やら、割り込み処理の「許可」なども確認しましたが、問題なさそうです。
散々悩んだ末、原因がわかりました。
先ほど初期設定だけしていた、タイマー(TMR1、2、3)がスタートしたままだったのです。
これは、MCCの初期化の処理内で、自動的に「スタート」されます。
文字表示の為に割り込みを許可したので、TMRの割り込みも発生し、「常時、のべつ幕なし」で割り込みが発生し、mainに戻れなかった様でした。

タイマーをストップする様にしたら、ちゃんと文字が表示されました。
割り込み解除直後に、タイマーを停止させる。でないと、永久にタイマー割り込みが発生し続ける。


さて、問題が解決したので、今度はAD変換です。
VR(10KΩ)をGNDとVddに接続し、中間点をPICのADに入力します。

(PM0108)

PM0108.jpg


これで、ADを読み込むと、0-1023の値が得られます。

実際に動作させると、VRを変化させても、1023固定です。

(PM0109)

PM0109.jpg




AD変換が常時1023を示す??
なんで??

VRには、ちゃんとGNDとVdd(5V)が供給されています。
VRの中点は、ADの指定Chに接続されています。

ここでまた、はまりました。
AD変換の各種設定の再確認。OKです。

3時間経過、、、

あれ?

(PM0110)

PM0110.jpg


ふと触ったVRの中点のピンの根元を見ると、、、折れかかっていて、導通がなさそうです。
なあーんだ!
早速、半田付け。

そして再確認。

あれ?

やっぱり、1023ばかり。

また1時間経過。

VRに関連するブレッドボードのジャンパー線をテスターで確認。

あれ~~!!

内部で断線してる。

(PM0111)

PM0111.jpg


テスターで見ても導通がありません。
こういうジャンパーの断線は困りますね。
多少価格が高くなっても、もう少し信頼性のあるジャンパーが欲しいです。

で、全てをセットして、AD変換までたどり着きました。

(PM0112)

PM0112.jpg



では、一連の動作をどうぞ。

あっ、そうそう、動画ではモーターが回転していますが、これはmain()の中に、__delay_ms(10)などで適当なパルスを発生させ、while(1)文で繰り返しているだけで、AD変換で指定したパルスを与えているわけではありません。
単純な動作確認だけです。
これから、AD変換で与えたパルス間隔とSWで指定した励磁モードで、ちゃんと起動するか、脱腸、失礼、脱調せず回転するかのテストです。

まだ先は長そうですが、例のフリスク表示器は役に立っています!

(PM0113)


関連記事

管理者のみに表示する