2024年6月8日土曜日

RX621を使ってみる (3)

2024/06/08

秋月電子で販売されている RX621マイコンボード を使ってみる(その3)
ラジコンのサーボをPWMを使って動かす

周期を20msecで、High:0.8msec、Low:19.2msec と High:2.25msec、Low:17.75msec を切り替えて サーボモータを動かす。
(可変範囲はいろいろあるが今回はこの値にする)

PB0とPB1のポートを使って2つのサーボモータを制御する

#include "iodefine.h"

void MTU2_initialize(void)
{
    /* MTU9 = PWM Mode 1 */
    MSTP(MTU9) = 0;              /* Wake up MTU9 */

    /* タイマプリスケーラ選択ビット */
    /* 内部クロック:PCLK / 16 でカウント */
    MTU9.TCR.BIT.TPSC = 2;

    /* クロックエッジ選択ビット */
    /* 立ち下がりエッジでカウント */
    MTU9.TCR.BIT.CKEG = 1;
                             

    /* カウンタクリア要因選択ビット */
    /* TGRAのコンペアマッチ/インプットキャプチャでTCNTクリア */
    MTU9.TCR.BIT.CCLR = 1;

    /* モード選択ビット */
    /* PWMモード1 */
    MTU9.TMDR.BIT.MD = 2;

    /* バッファ動作Aビット */
    /* TGRAとTGRCレジスタは通常動作 */
    MTU9.TMDR.BIT.BFA = 0;

    /* バッファ動作Bビット */
    /* TGRBとTGRDレジスタは通常動作 */
    MTU9.TMDR.BIT.BFB = 0;

    /* I/OコントロールAビット */
    /* 初期出力はLow出力,コンペアマッチでHigh出力 */
    MTU9.TIORH.BIT.IOA = 2;

    /* I/OコントロールBビット */
    /* 初期出力はLow出力,コンペアマッチでLow出力 */
    MTU9.TIORH.BIT.IOB = 1;

    /* タイマジェネラルレジスタA */
    /* (1/48000000)*16*60000=20msec(50Hz) */
    MTU9.TGRA = 60000;

    /* タイマジェネラルレジスタB */
    /* (1/48000000)*16*4500=1.5msec */
    MTU9.TGRB = 4500;            

    /* I/OコントロールCビット */
    /* 初期出力はLow出力,コンペアマッチでHigh出力 */
    MTU9.TIORL.BIT.IOC = 2;

    /* I/OコントロールDビット */
       /*  初期出力はLow出力,コンペアマッチでLow出力 */
    MTU9.TIORL.BIT.IOD = 1;

    /* タイマジェネラルレジスタC */
       /* (1/48000000)*16*60000=20 msec(50Hz) */
    MTU9.TGRC = 60000;

    /* タイマジェネラルレジスタD */
       /* (1/48000000)*16*4500=1.5 msec */
    MTU9.TGRD = 4500;

    /* タイマカウンタ(TCNT) */
    MTU9.TCNT = 0;

    /* MTU9.TCNTはカウント動作 */
    MTUB.TSTR.BIT.CST3 = 1;
}

void main(void)
{
    long int i;

    /* コアクロック96MHz */
    SYSTEM.SCKCR.BIT.ICK = 0;

    /* 周辺機器クロック PCLK=48MHz */
    SYSTEM.SCKCR.BIT.PCK = 1;

    MTU2_initialize();

    while(1) {
        /* タイマジェネラルレジスタB    */
        /* (1/48000000)*16*2400=0.8msec */
        MTU9.TGRB = 2400;
        for (i = 0 ; i <= 21000000 ; i++) {
            /* タイマジェネラルレジスタD */
            MTU9.TGRD = 2400 + (i / 5000);
        }

        /* タイマジェネラルレジスタB     */
        /* (1/48000000)*16*6600=2.25msec */
        MTU9.TGRB = 6600;
        for (i = 0 ; i <= 21000000 ; i++) {
            /* タイマジェネラルレジスタD */
            MTU9.TGRD = 6600 - (i / 5000);
        }
    }
}






0 件のコメント:

コメントを投稿