PageTopへ戻る

3.モーターの回転速度制御

●モーターが動いたところで、次は回転速度を制御します。
 ・ブレッドボードにスピード可変用ボリューム(VR)を追加します。
 ・プログラム転送のとき、いちいち電源を入れ直すのは面倒なので、リセットスイッチを付けます。



 ・ボリュームの電圧を読み込むためにADコンバータ機能を使用します。
 ・下記のコードをコピー・ペーストで、新たにプロジェクトを作成してもよいですし、先に作成した"led.c"を上書きすると簡単です。
 ・ADコンバータで読んだ値でパルスのデューティー比を変えて制御(PWM)します。周波数が約100Hzになるように "CYCLE"の値で調整しています。




 ・前述同様にビルドして、dsPICに転送します。
 ・VRをまわすとで回転速度が変わります。右回しで回転速度が上がります。 下の写真はPB0のオシロスコープ画像です。



4.タイマー割り込みによる速度制御

次はタイマー機能を使用して割り込み処理で回転を制御します。


・タイマーで約20μsごとに割り込みをかけます。
・int_counterで割り込みの回数をカウントして、最大511(16進で0x1ff)までを1周期としてカウントします。
・1周期は約10msで、周波数は約100Hzです。
・カウンタが0のときスピードのパルスをONにしてspeedメモリに速度値をセットし、割り込み毎に−1して、0になったらパルスOFFします。
・カウンタが1のときADCでVRの電圧を読み込み、速度値としてspeed_setに記憶します。
・ADCで読んだ値は12bitでパルス幅の最大値は511で9bitなのでADC値を3回右シフトして使用します。
・下の写真のように int_counter = 1 のADC処理のときだけ時間がかかっています。



5.PCからのシリアル接続による速度制御

次はPCとのRS232C接続によって回転を制御します。dsPIC側のコードです。



・main内のwhileループでPCからのデータを受信します。
・受信したデータをスピード設定値のspeed_setに入れます。
・受信データは8bitなので左シフトで9bitにします。

【PC側ソフト】

・PC側のソフトはVisualBasic2010Expressを使用しました。
・VisualBasic2010Expressを起動し、新しいプロジェクトWindowsフォームアプリケーション を選択。
・下方の名前を適当に入力(PC_Remoteなど)してOKをクリック





・TrackBarの値(0-255)をSerialPortで送信します。
・Timerコントロールを使用し200ms(1秒に5回)1BYTEデータを送信します。



6.両方向制御

・次は、両方向制御できるように、ドライブ回路を追加します。始めはブレッドボードのVRと方向スイッチで制御します。
・レールの片方を共通にして、±12Vの2つのACアダプタを使用して駆動します。2.5Aのを使用しています。
・共通側の電圧はPIC回路の電源電圧の中間の2.5Vにするための回路を使います。この回路はレールスプリッタと呼ばれ、まさしくレールと分けるのに使用しています。
・PICのPB0端子が+5Vの時は上側PchFETがONになり正転し、0Vの時は下側NchFETがONになり逆転します。またPB0端子を入力に設定するとどちらのFETもONにならず停止状態になります。

・±12Vを扱うので配線間違いのないように十分注意して慎重に行ってください。高い電圧がかかるとdsPICはすぐに壊れます。






【dsPICのコード】

・PICのコードです。パルスをONするときはTRISB0=0にしてPB0をOUT Portにします。Offにする時はTRISB0=1にしてPB0をIn Portにします。
・方向を設定するためにPB3をInPortにして1のときPB0=1で正転、0のときPB0=0で逆転させます。

7.PCから両方向制御

今度はPCから方向を制御できるようにします。まずはPC側ソフトからです。

【PC側ソフト】

・”5.PCからのシリアル接続による速度制御”で使用したPC側ソフトにツールボックスから”CheckBox”を追加します。
・すべてのコードを削除して、下記のコードをコピー・ペーストします。





・スピードのデータと、逆転ボタンの状態を方向データとして送ります。方向データは正転のとき0で、逆転のとき0xffを送ります
・以前のようにスピードデータ1バイトのみを送っていたときはよいのですが、今度は方向のデータをその後続けて送るので、 dsPIC側で受けたデータがスピードか、方向かわかりません。 そこで、データ先頭の印として0x55、0xAAを送ります。dsPIC側ではこの2つのデータが続けてきたらデータの先頭と判断します。
・スピードを上げた状態でも方向が切り替わりますのでご注意ください。

【dsPICのコード】



次へ

PageTopへ戻る