kazurock0926去年の10月くらい(2015/10)から一念発起して、私のようなもんがPICマイコンなんぞに手をだして、こともあろうかPID制御でACモーターをスピード制御させようと思い立って早一年が過ぎようとしています。今年2016年に入って1月くらいまでは順調にPICマイコンについて勉強してましたが、3月くらいからすっげー忙しくなって本業の”臨床工学技士”の仕事に汗水たらしてましたら、もう9月になってました・・・ここいらで少し余裕がでてきたので、猛スピードで続きをして、結果をださなければ何をしてたんだ?ってなります。PICについてこれまでのおさらいです。この後PICの世界から一時離れる。いった具合にすすんできました。あとPID制御要はフィードバック制御をできるようになるには1割り込みを覚えること➡️今回やる事!!2LCDパネルを扱えるようになること3アナログデジタル変換ができるようになるです。今回は割り込みをやってみます。先に結論から言うとPICで割り込みするのは結構簡単でした。こちらが実際の動いているところです。CCP同様に滑らかに動いていますが、なんかギギギッとかいう音が気になるります。CCP機能でPWMモードを使ったほうが無難かもしれませんね。割り込みという機能の習得には大いに役立ちました。今回も内部クロックで動いてくれるPIC16F88を使用しました。実は定番マイコンのPIC16F84Aでも割り込みのプログラムは同様です。これがPIC16F88です。PIC16F88のほうが値段も安いし、いろいろできるし、内部クロック使えるし最高なんです。前回のサーボ制御はCCP機能といってまさにサーボを動かす為の機能といっても過言ではないPWMというパルス信号を作ってくれる便利なものでした。今回はほぼ同様のPWMのパルス信号を割り込みという機能を使って作ります。ちなみにパルスは約20mSecごとに発生して、パルス幅は0.6mSec~2.3mSec程度とします。割り込みとはからですが、簡単に言うと任意に決めたタイミングで自動的に割り込みプログラムを駆動させる事を言います。割り込みというかですが、メインプログラムに対する割り込みだからです。通常電源を入れるとメインプログラムが駆動されるわけですが、メインプログラムが走っている時に任意のタイミングがくるとメインプログラムが止まり、割り込みプログラムが駆動されるので”割り込み”と言うのです。PIC16F88の割り込みの設定まずはOPTION_REGの設定です。PSAここの設定でプリスケーラーをウォッチドッグタイマーかTMR0どちらに割り当てるか決定する。PSここでプルスケーラーの比率の設定をします。あとで計算しますが今回PWMのパルスを20msecごとに発生させるようにするので、プリスケーラーはMAXの256にしています。INTOCONレススタの設定スポンサードリンクもう一つ重要なのが上記のINTOCONレジスタ設定です。TMR0IEGIEとかぶりますが、TMR0の割り込みの許可です。1で割り込みを許可します。PSで設定したプリスケーラーで時間が決まります。TMR0は1命令ごとにカウントアップされていき255から0に変わる時に割り込みが発生しTMR0IFがオーバーフローします。割り込みプログラムではTMR0IFをプログラム上でクリアしないといけません。TMR0レジスタ8ビットのカウンタで、1命令サイクル毎に+1されます。プルスケーラーが設定されていればその比率でカウントが伸びます。最初に設定した値からカウントアップが始まり最大値の255から0に戻る時にTMR0割り込みが発生します。TMR0に100がセットされていると(255-100+1)×(プリスケーラーの値)でTMR0割り込みが発生するのです。約20msecとなります。//サーボの振れ角度//割り込みが入った時のプログラムです。angle);//angleは0-230の値で可変させるとうまくいきました。//TMR0IEとTMR0IFが両方とも1ならRA0を1にします//パルスON時間はangleを変更して決定して継続させますよ。1;//全体の割り込みを許可INTCONbits.TMR0IF=0;//TMR0IF最初にクリアしときます。0;//きれいにクリアしときます。PORTB=0;//きれいにクリアしときます。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。コメントデータの処理方法の詳細はこちらをご覧ください。自作UPS化Arduinoでステッピングモーターを回す。~赤外線解析編~HiLetgoの激安ESP8266を使うブログをメールで購読メールアドレスを記入して購読すれば、更新をメールで受信できます。WordPress.。