« 三つの16bitADコンバータMCP3425の測定値を比べてみた | トップページ | 16bitADコンバータMCP3425の使い方と特性のまとめ »

2015年5月24日 (日)

データシートを読んで考えた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の使い方と特性のまとめ »

趣味の電子工作」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック

« 三つの16bitADコンバータMCP3425の測定値を比べてみた | トップページ | 16bitADコンバータMCP3425の使い方と特性のまとめ »

フォト

サイト内検索

  • 記事を探されるんでしたらこれがいちばん早くて確実です。私も使ってます (^^;; 検索窓が表示されるのにちょっと時間がかかるのはどうにかしてほしいです。

新着記事

リンク元別アクセス数

  • (アクセス元≒リンク元、原則PCのみ・ドメイン別、サイト内等除く)

人気記事ランキング

  • (原則PCのみ、直近2週間)
無料ブログはココログ