[戻る]
過去ログ [ 0001 ]
過去ログ:     ワード検索: 条件: 表示:

タイトル
記事No
投稿日
投稿者
参照先
PIC24Fでインプットキャプチャ
72
: 15/01/07-12:40
matsuhandy <srprc100@yahoo.co.jp>

初めまして。PIC24Fのインプットキャプチャで教えて頂けないでしょうか。

使用しているCPU:PIC24FJ128GB206(秋月で購入)

PIC24Fのタイマー内蔵キャプチャが32ビットでも動作させられたので,
32MHz内蔵RCクロックを10, 100, 1000Hzの立ち上がりでキャプチャしてみました。
その結果です。

−−−−−−−−−−−−−−−−−−−−−−−−−−
32MHzの内部クロックを32ビットカウンタでカウントしてキャプチャ。
FGのクロックの立ち上がりでキャプチャ。-5.5%位の誤差が出る。

FG有効数字 FG(Hz) 計測↑キャプチャ値 見た目の変動 理論上↑キャプチャ値 差分%
2 10 3031700 ±400 3200000 -5.259375
3 100 302370 ±40 320000 -5.509375
4 1000 30215 ±5 32000 -5.578125
4 10000 3020 ±1 3200 -5.625
−−−−−−−−−−−−−−−−−−−−−−−−−−

どうしても一定の誤差が5.5%ほど出てしまいます。
対処療法ですが,一定の差分なら強制補正が可能なので,下のように割込み関数内で
補正を書け,ほぼ理論通りのキャプチャ値が得られるようになりました。
ただ,解せないのが,
OSCTUNbits.TUN = 0b000000; //オシレータ調整レジスタ,メーカー校正結構正確
//OSCTUNbits.TUN = 0b100000; //オシレータ調整レジスタ,最小周波数,あんまり変わらない
//OSCTUNbits.TUN = 0b011111; //オシレータ調整レジスタ,最大周波数,あんまり変わらない
をオシレータを調整していますが,ほとんど変化が見られないのです。
本来OSCTUNbits.TUNレジスタで周波数が多少は変わると思うのですが・・・。
あるいは,内部RCオシレータの精度は5%前後の誤差があるのでしょうか?
CPUは32MHzで駆動させています。



__eds__ unsigned long dat [16384] __attribute__((eds)); /*dat[0]-dat[16384]が使用可能*/
volatile unsigned long low=0, high=0;
volatile unsigned long old=0, new=0, dif=0;
volatile unsigned short num=0;

void __attribute__ ((__interrupt__,__no_auto_psv__)) _IC1Interrupt(void)
{
IFS0bits.IC1IF = 0; // Reset respective interrupt flag
low = IC1BUF; // Read capture entry
high = IC2BUF; // Read capture entry
new = (high<<16)|low;
new= new+(new>>4)-(new>>8)+(new>>14);//5.865%強制補正
dif = new-old;
old = new;
dat[num++]=dif;
num&=0x3fff;//上位ビットを消して0-16383までにする
}


int main(int argc, char** argv)
{
initCLK();
initLED();
initLCD();
initPushSW();
initDipSW();
initCaptureControl();


clrscr();
while(1){
waitms(200);
gotoxy(0,0); lcdprintf("%u %5u",_RF5,num-1);
gotoxy(0,1); lcdprintf("%u %10lu",_RF5,dat[num-1]);
ledFlow();
}

return (EXIT_SUCCESS);
}
▲pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re: PIC24FでinputCapt
77
: 15/01/12-12:16
matsu

この辺りのご経験がある方は,少ないようですね。

内部RCクロックは,5%位ずれるってことは,
PLLで4倍しているはずなので,つまり元の8MHzは1%を超える
クロック周波数の誤差を内包しているってことでしょうか。
となると,pic24fを時計のようなアプリに使うには,外付けの水晶必須と
言えそうですね。これだけ誤差があるとシリアル通信なども
ちょっと遠慮したくなってしまいます。
もう少し精度があるものだと思っていましたが,残念。
▲pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re^2: PIC24FでinputCapt
98
: 15/01/22-14:15
matsuhandy <srprc100@yahoo.co.jp>

自己レスですが,別スレッドで解決しました。
ありがとうございました。
▲pagetop

- WebForum -