SSブログ

PIC16F18325による周波数カウンタ [電子工作]

PIC16F18325による周波数カウンタ 2種

秋月で、PIC16F18325が100円で売られていたので、事例を参考に安価な周波数カウンタを作った。
15ct1P83.jpg18ct1P582.jpg

mcc(MPLAB Code Configurator)を使ってCLCやタイマーの設定を行った
構成
TMR2:基準時間発生に使用。mccで作られた"tmr2.c"の割り込み処理にユーザ処理を記述する。
TMR3,TMR5:2個の16ビットカウンタをCLCを使って連結し32ビットカウンタとする。
TMR3がオーバフローするとTMR5をカウントアップする。オーバフローで割り込みは使わない。TMR3,TMR5のon/off機能を使って基準時間だけT3CKI(RC5)のパルスをカウントする。計数が終わるとTMR3とTMR5を読み出して表示する。

CLCの設定:TMR3のオーバフローをピンに出す。
30cl53.JPG
35pinmng52.JPG

ブロッグ図的イメージ
40TMR3-5.JPG

TMR3オーバーフロー信号。T3CKIの1サイクル分出る様だ。
50M12Movfl48.jpg
55M35ovfl49.jpg

MPLABX,コンパイラは以下を使った。
MPLABX v3.51
xc8 v1.44


カウンタ入力:T3CKI(RC5)
OVFL:CLC1(RC1)
2段目カウンタ入力:T5CKI(RC0)
RC1とRC0をピンで接続する。LCDはどちらか一方を接続し、LCDに対応したHEXを書き込む。
60PIC16F18325.JPG

カウンタ1:外部発振器、シリアル化したLCD1602、8桁表示
カウンタ2:水晶発信器、TS174 6桁表示 0.1k単位

カウンタ2は組み込みとして使う為、基板カットしてTS174のサイズに近づけた
20ct2P80.jpg

LCDを外した所
22ct2P81.jpg

LCD1602SPI回路図再掲。E信号を遅らせるために1G32の出力に220Pを接続した。効果は未評価。
70LCDSPI41.JPG

16F18325は14ピンなので使えるピンが少ない。LCDにはシリアル化したLCD1602をを使った。
カウンタ2のLCDにはAitendoのTS174を使った。TS119、TS174、TS5173は同じライブラリで使える。こちらも3ピンで制御できる。単位がKHz表示で無いのが残念。小数点表示はKの位置表示として使った。
水晶には手持ちの12.8MHzを使ったが精度がイマイチ信用できない。カウンタ1は、将来高精度発振器を入手したときの為に外部入力モードにしている。カウンタ2は安価にするため、12.8MHz水晶をPICで発信させた(HSモード)。

LCDのライブラリ内で、制御に使うピンを定義する。当初LCDの書き込み信号をWRとしていたが、EEPROMの処理の中のWRと競合していたのでLCDライブラリ側の信号名をWRTとした。

lcd_SPIlib2.h
#define RCK LATAbits.LATA0
#define WRT LATAbits.LATA1
#define DT LATAbits.LATA2

TS174
HTLCD_lib2.h
#define CS LATAbits.LATA2
#define WRT LATAbits.LATA1
#define DT LATAbits.LATA0

高精度の発振器を持っていないので、校正出来ていない。
PIC16F18325 カウンタ ソース&HEX。mccで生成したファイルを後から修正したので、コメントは違っているかも。試行錯誤した痕跡が残っているが公開。


回路図

-------------------------------------------------------------------
参考
はじめてのPIC
18f14K50カウンタ
http://sky.geocities.jp/home_iwamoto/page/P14K50/P14_B03.htm
電子工作のための PIC16F1ファミリ活用ガイドブック  技術評論社
--------------------------------------------------------------------

nice!(0)  コメント(0) 

PIC16F18325によるPWM 簡易パルス発生器 [電子工作]

PIC16F18325によるPWM 簡易パルス発生器

素性不明なパルストランスの特性を調べる為、PWM パルス発生器を作った。
10P1040537.jpg

ジャンク基板に乗っていたトランス。巻線は髪の毛より細い。インダクタンスは30uHと120uHであったので巻線比は1:2らしい。巻線は2組ある。ので1:4の構成にできる。
12trn0524.jpg

パルス発生器と接続した。無負荷でも2Khzあたりでは1A以上の入力電流であったが、200KHzでは10mA程度に減少。供給電源の保護回路により1A以上流れないので助かった。スイッチングFETはパルス発生器に実装したのを使ったが、配線長を考えトランスの近傍にあるのが望ましい。このトランスは負荷電流はほとんど取れない。1k抵抗を負荷に接続ですぐに電圧ドロップする。
13measP1040526.jpg
13nDCDC151.jpg

PIC16F18325が安価であったので試しに使う。2k~500khzの間をscanし、出力電圧の最大値を記録できるようにした。scan時はduty50%固定であるが、PR2の値が小さいときのduty値は概算値になる。
13pPWMSCH0152.jpg
2khzから周波数x1.15で決定 
14frq00157.jpg
20FUNCWS000156.jpg

1ステップ約90msとし、42ステップ終了後、電圧最大の周波数を設定し、43から64ステップまで同一周波数を出した後に最初のステップに戻る。最初の4ステップは120msで切り替えている。周波数切り替え時、波形が乱れる事があるが、まだ対応できていない。
22ALLTWS000159.jpg
24pwm50504.jpg
電圧安定まで4ms程度かかっている
26WS000160.jpg

手動で周波数とdutyが設定出来るようにした。周波数は高い(PR2の値が小さい時)は分解能に制限あり。手動だと0.5k~600k程度まで可能。AD変換を2チャンネル使い、電圧、電流を表示する。Vrefは1.024Vに設定した。AN4は1/20に分圧するつもりで電圧表示をmax20Vにした。

表示には、買い貯めしていたAitendoのETM11256(112x56)を使ったが、立ち上げ時の設定でC12864やJCG12864も使える。(コントラストの調整が必要だが)表示範囲は112x56内に抑えている。
30c128P1040504.jpg
コントラスト調整後
33c128-2P1040505.jpg
反転表示
36invP1040506.jpg

RUN/STOPスイッチを押下したまま電源投入するか、RC4を10Kでプルアップすることで、C12864spi、F12864、JCG12864モードになる。LCDを切り替えた時は、保存した設定は初期化されるので、電圧補正を含め再設定が必要。切り替えないときは保持される。
JCG12864の時は、最初は逆文字になっているので、設定モードからJCGモードにする。
40JCG-0P1040507.jpg
JCG1264正常表示
44JCGP1040508.jpg

aitendoのF12864だと思う。液晶固定していたので型名確認できず
48F128P1040510.jpg

とりあえず2枚の基板を作ってみたが、いくつか問題点が判明している
・タクトスイッチのチャッタ除去が十分でない。外部キー接続で回避
・PIC内部クロックを使ったため周波数精度が不明
・スイッチングFETの耐圧が30Vしかないので、高圧評価は出来ない
・FETの電流は片側しか測定していないが、同一チップのFETなので、差は5%以下であった
・スタート時、0~41ステップのどの周波数から開始するかは不明
・周波数切り替え時に波形乱れあり。

仕様
scan 2k~500k 自動42step繰り返し 
step 2k~500khz
PR2  255~4
scale x1 x4 x16 x64 TMR2のprescale設定
duty 5%ステップ 5-90% 周波数で制限あり

PICのAD変換機能を使って電圧、電流を表示。レンジは固定
-------------
モード設定 設定変更はEEPROMに格納
電圧表示調整
コントラスト 
表示反転
JCGモード
------------------------------------
PIC16f18325PWMのhex


-----------------------------------



nice!(0)  コメント(0) 

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。