データシートを読んで考えたPIC/PWMの使い方 - 恒温槽のヒータを作る
恒温槽を作るためにはヒータ(あるいはクーラ)が必要です。
「恒温槽 - 温度を一定に保つアルゴリズム - 1」
「恒温槽 - 温度を一定に保つアルゴリズム - 2」
に書いた方法を実現するためにはヒータをオン・オフするだけではダメで細かく発熱量を制御できなければなりません。
“システム”はPICを利用して作っていますからヒータの制御もPICでできた方が便利です。
=======
データシートを見ながら作ってテストしてみました。
「GPS/RTC(DS3234)の1PPS出力を利用した超高精度周波数カウンター」を作ったときもそうだったのですが、データシート見ながら書いてあるとおり作るというのが簡単で確実なような気がします(トラブルがあったり機能を変えたくなったりしてもすんなり対応できます)
今使っているPIC18F26K22がターゲットです。
CCP2(=RC1、12ピン)にPWM出力が得られます。
ひとまずLEDで確認しました。消灯した状態から徐々に明るくなるという動作を繰り返します。このために12ピンは使わずにあけていました。
次は実際にヒータを接続してテストしてみたいと思います。
#include <xc.h>
#include <stdio.h>
#include <string.h>
#define _XTAL_FREQ 16000000
// C:\Program Files (x86)\Microchip\xc8\v1.32\docs\chips\18f26k22.html
#pragma config FOSC = INTIO67
#pragma config WDTEN = OFF
void main()
{
unsigned short i;
char buf[20];
OSCCON = 0b01110010 ;
// Microchip
// PIC18(L)F2X/4XK22 Data Sheet
// http://ww1.microchip.com/downloads/en/DeviceDoc/41412F.pdf
// 14.3 PWM Overview (page 186)
// 下記の記述の直前にあるブロックダイアグラムを頭に入れておくと
// わかりやすいと思います。
// データシートの手順は瞬間的にでも異常な動作が起きないようになっています。
// 今回、相手はヒータですから適当に手抜きしてもだいじょうぶそうです。
// 14.3.2 SETUP FOR PWM OPERATION
// 1. Disable the CCPx pin output driver by setting the
// associated TRIS bit.
TRISC1=1;
// 2. Select the 8-bit TimerX resource, (Timer2,
// Timer4 or Timer6) to be used for PWM generation
// by setting the CxTSEL<1:0> bits in the
// CCPTMRSx register.(
CCPTMRS0bits.C2TSEL = 0x02;
// 3. Load the PRx register for the selected TimerX
// with the PWM period value.
PR6 = 0xFF;
// 4. Configure the CCP module for the PWM mode
// by loading the CCPxCON register with the
// appropriate values.
CCP2CONbits.CCP2M = 0x0C;
// 5. Load the CCPRxL register and the DCxB<1:0>
// bits of the CCPxCON register, with the PWM
// duty cycle value.
CCPR2Lbits.CCPR2L =0x00;
CCP2CONbits.DC2B = 0;
// 6. Configure and start the 8-bit TimerX resource:
// • Clear the TMRxIF interrupt flag bit of the
// PIR2 or PIR4 register. See Note 1 below.
// • Configure the TxCKPS bits of the TxCON
// register with the Timer prescale value.
// • Enable the Timer by setting the TMRxON
// bit of the TxCON register.
T6CONbits.T6CKPS = 0x01;
T6CONbits.TMR6ON = 1;
// 7. Enable PWM output pin:
// • Wait until the Timer overflows and the
// TMRxIF bit of the PIR2 or PIR4 register is
// set. See Note 1 below.
// • Enable the CCPx pin output driver by
// clearing the associated TRIS bit.
TRISC1=0;
while (1) {
for(i=0; i < 256; i++ ){
CCPR2Lbits.CCPR2L = i;
__delay_ms(10);
}
}
}
« 三つの16bitADコンバータMCP3425の測定値を比べてみた | トップページ | 16bitADコンバータMCP3425の使い方と特性のまとめ »
「趣味の電子工作」カテゴリの記事
- PICで作る100MHz周波数カウンタ検証用XOR(エクスクルーシブオア)逓倍器(2016.03.08)
- 150MHz(~200MHz?)周波数カウンター用プリスケーラー(1/4分周器)(2016.03.06)
- 測温抵抗体(Pt100、白金薄膜温度センサー)の抵抗値を温度に変換する(平方根を使わない)計算式(2016.03.01)
- GPS/JJY(標準電波)を基準周波数源とするためのPLLの詳細(2016.02.27)
- GPS受信モジュール1PPS対決 - GE-612T vs GM-5157A(2016.02.21)
この記事へのコメントは終了しました。
« 三つの16bitADコンバータMCP3425の測定値を比べてみた | トップページ | 16bitADコンバータMCP3425の使い方と特性のまとめ »
コメント