• 締切済み

PICマイコンに関して

大学でエンジンの研究室に入っている者です。 PICマイコンで点火時期を決定させようと試みています。 (教授の考えからPICマイコンをどうしても使用するつもりです。) PICおよびエンジンに関してまだ知識が深くありません。 上死点と上死点(TDC)の間におけるCLKを360°刻みにし、初めから244°目が来た時にコイルに充電開始(出力を立ち上げる)、90°の間充電期間、TDC前26°で立ち上げていた出力を戻し(点火プラグに信号がいくようにし)たいです。エンコーダを用います。 しかし、PICがどのようにクロックのカウントをするかが分かりません。どうやって244°を読み取るかと言うか表現が難しいのですが・・・ちなみにPICマイコンは機械語を使います。 クロックをカウントさせる方法(できたら機械語)を教えてほしいです。お願いしますm(。。)m

みんなの回答

  • kaoaru
  • ベストアンサー率33% (42/127)
回答No.5

>エンコーダを用います。 そんなに贅沢(?)なセンサがあるんだったら解決方法はいくらでもあるのではないですか? まず、エンコーダと回転角の関係を把握する必要があります。プログラミングしやすくするための工夫をそこで怠らないほうが懸命です。 それらの関連付けが把握できているのなら、エンコーダのパルス数をカウントするだけのことです。ただし、回転速度によってはプログラムでカウントできないので、そういう場合はハードウェアのカウンタをつかわなければいけません。 >どうやって244°を読み取るか これは先に述べたとおり、パルスと回転角の関連付けに気づけばわかる話です。 ロータリーエンコーダは回転方向と回転数を検出できる便利なセンサです。自分なりの使い方をマスターするのが先決だと思いますよ!精進してくださいね! 「H8シリーズのコンペアマッチが便利だ」とかいう話はその後のことでしょう?文面からですと、まだそれ以前の話に思えます。

  • tadys
  • ベストアンサー率40% (856/2135)
回答No.4

そのような用途であれば CAPTURE/COMPARE/PWM モジュールの付いたマイコンを使います。 例えば、PIC24HJ32GP302 http://ww1.microchip.com/downloads/en/DeviceDoc/70293G.pdf クロックのカウントは内部のタイマーを使います。 CAPTURE モジュールは入力があると割り込みが発生するとともに、その時のタイマーのカウント値をハードウエアが記録してくれます。 上死点と下死点でCAPTUREを使えば上死点と下死点の間の時間が分かります。 処理を簡単にするため、上死点か下死点でタイマーをリセットしてタイマーとエンジンの同期を取るのが良いでしょう。 出力の方は COMPARE モジュールで行います。 COMPARE では、カウンタのカウント値とソフトからの設定値を比較してパルスを出力してくれます。 PIC24シリーズやdsPICシリーズでは MPLAB C30コンパイラが無償(機能制限有り)で使用できるのでC言語を使用する事が出来ます。 プログラムサイズが20~30kバイトを超えるようであれば、アセンブラだけでの開発は困難です。

  • SOGYO
  • ベストアンサー率26% (17/65)
回答No.3

うーん…そういうのならH8使った方がいいような気もするけど. エンコーダの入力を受け取るピンがあるからそれで解決. どうしてPICなんですか? (ぶっちゃけ,PICはあんまりクロック速くないから高回転数だと多分処理が追いつかないし) それはさておき,やろうとするならば,ピンの状態を毎ループ監視して 状態が変化したときにカウントを上げる/下げるすればいいですね. エンコーダの仕様が分かっているなら,カウント数と角度の関係は 係数掛けるだけなので楽勝です. http://www.furachi.net/junkbox/1-5.html あと,エンコーダにはZ相(1周ごとに1パルス発生させる相)はありますか? エンジンのシリンダですから,万が一カウント抜けがあったときの場合 のために,つけておいた方がいいとは思いますが.

  • koujikuu
  • ベストアンサー率43% (429/993)
回答No.2

TMR1 で外部クロックソースを使用し エンコーダ出力をカウントする CCP コンペアモードにてTMR1の値と比較し割り込みをかける -> 必要な処置 エンコーダ(エンジン回転)の開始点(原点)にてTMR1をクリアする必要がある為、そのセンサーが必要 CCP を複数使うか、値を書き換えて次の角度の割り込みを待つ 詳しくはPICの日本語データシートで確認して下さい。

回答No.1

PICの詳しいことは判らないので一般論で もしエンジン回転が6000rpmまで回るとすると、1秒間で100回転。 そのときエンコーダからの信号は、1パルス/度とすると36000パルス/秒となり、1パルス当たり28μ秒です。 最低でも1回のカウント動作をこの時間内に終わらせないとカウントできません。 エンコーダの出力信号がきれいで、チャタリング等が全く無いならば (1) エンコーダの出力信号(の立ち上がりまたは立下り)で割り込みを掛けて、割り込み処理の中でカウント処理を行う。 エンコーダのパルス出力と、割り込み発生は同期するのでカウントできる。 または (2) 早い周期(例えば10μ秒)でタイマ割り込みを掛け、タイマ割り込み処理の中でエンコーダの信号を入力する。 前回の信号がLowで今回がHeighなら、信号が立ち上がったとしてカウントする。 今回の信号を前回の信号にコピーしてタイマ割り込み処理を抜ける。 のいずれかの方法でカウントできます。

関連するQ&A