---「PIC」プログラミング再び (2)---

 PICのプログラムについて、少しずつ思い出してきました。
 とはいっても、完全にマスターなどしている訳ではないので、
 何年か前の水準にもどっただけです。
 今日は、PICで、ステッピングモーターのパルスを発生さて、
 中古のステッピングモーターを回してみました。
 UDK2120の取説には、必要なパルスの要件は、
 
 

 とありました。アセンブラでプログラムを組むと、命令に必要な
 クロック数から細かい設計もできるのでしょうが、Cからは、
 ちょと面倒で、私にはできません。ということで、実際にプログラム
 しては、動かしてみて、オシロデ確認して組みました。
 /******************************************
2014-10-15
PULSE SEISEI
********************************************/
#include __CONFIG(UNPROTECT & LVPDIS & BOREN & MCLRDIS & PWRTEN & WDTDIS & INTIO);
void WaitTime1 (void);
void WaitTime2 (void);
int dummy;
void main(void){
PORTA=0x00;//PORTAをLOWに
PORTB=0x00;//PORTBをLOWに
TRISA=0x08;//0000 1000 PORTAを出力に(RA3は入力に)
TRISB=0x00;//0000 0000 PORTBを出力に
CMCON=0x07; //1,2,17,18コンパレーターオフ 汎用端子を入出力へ
//パルスの生成
for(;;){
RA1=1;
dummy=1;//待ち時間だけHIGHに
dummy=1;
RA1=0;
WaitTime2();//待ち時間だけLOWに
}
}
// 待ち時間関数の呼び出し
void WaitTime1 (void){
int cnt1=1;
while(cnt1 > 0){
cnt1--;}
}
void WaitTime2 (void){
int cnt2=20;
while(cnt2 > 0){
cnt2--;}

 やってることは単純なことで、一つの端子の出力を、オン、オフ
 をしているだけです。ただ、当初予定していた二つの待ち時間
 の関数を使おうとしましたが、この関数を使うと、パルスの幅
 が50μsぐらいになるので、dummy=1という数字を代入すると
 いう意味のない命令を一つ実行するだけで、だいたい、取説
 にあった5μsの幅になりました。
 WaitTime2()の関数で、待ち時間のカウンターを20にすること
 で、パルスの周波数が約2kHになりました。
 2kHだと約240rpm/mの早さで回るようです。
 
 これで、目的にまた一歩近づきました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA