[PR]
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
外部のPWMパルスの周期やDutyを計測したい場合、インプットキャプチャを使用すると簡単に計測できます。
/*----------------------------------------------------------------------------------*/
/*【INC】インクルードファイル*/
/*----------------------------------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
/*----------------------------------------------------------------------------------*/
/*【VARI】変数定義*/
/*----------------------------------------------------------------------------------*/
unsigned int u2g_Cap2[256];
unsigned int u2g_Cap3[256];
unsigned int u2g_Cap4[256];
unsigned int u2g_CapCnt2;
unsigned int u2g_CapCnt3;
unsigned int u2g_CapCnt4;
/*----------------------------------------------------------------------------------*/
/* Main関数 */
/*----------------------------------------------------------------------------------*/
int main(int argc, char** argv)
{
/*------------------------------------------------------------------------------*/
/* リマッパブルピン初期化*/
/*------------------------------------------------------------------------------*/
RPOR18bits.RP69R = 15u; /* RGB LED RED [SCCP1] */
RPINR4bits.ICM2R = 69u; /* IC[SCCP2] */
RPINR5bits.ICM3R = 69u; /* IC[SCCP3] */
RPINR6bits.ICM4R = 69u; /* IC[SCCP4] */
/*-----------------------------------------------------------------------------*/
/* CCP1初期化*/
/*-----------------------------------------------------------------------------*/
CCP1CON1L = 0x0000u;
CCP1CON1Lbits.MOD = 4u; /* PWMモード*/
CCP1CON1Lbits.CCSEL = 0u; /* コンペアモード */
CCP1CON1H = 0x0000u;
CCP1CON1Hbits.SYNC = 0u; /* 同期無し */
CCP1CON2H = 0x0000u;
CCP1CON2Hbits.OCAEN = 1u; /* 出力イネーブル / ステアリング制御ビット */
CCP1CON3H = 0x0000u;
CCP1CON3Hbits.POLACE = 1u; /* CCPx 出力ピン極性制御ビット */
CCP1PRL = 6250;
CCP1RB = 400u;
/*-----------------------------------------------------------------------------*/
/* CCP2初期化*/
/*-----------------------------------------------------------------------------*/
CCP2CON1L = 0x0000u;
CCP2CON1Lbits.MOD = 1u; /* 立ち上がり間 */
CCP2CON1Lbits.CCSEL = 1u; /* キャプチャモード*/
CCP2CON1H = 0x0000u;
CCP2CON1Hbits.SYNC = 0u; /* 同期無し */
CCP2CON2H = 0x0000u;
CCP2CON2Hbits.ICS = 0u; /* ICxPIN(PPS) */
CCP2CON3H = 0x0000u;
CCP2PRL = 0x0000u;
CCP2RA = 0x0000u;
CCP2RB = 0x0000u;
/*-----------------------------------------------------------------------------*/
/* CCP3初期化*/
/*-----------------------------------------------------------------------------*/
CCP3CON1L = 0x0000u;
CCP3CON1Lbits.MOD = 1u; /* 立ち上がり間 */
CCP3CON1Lbits.CCSEL = 1u; /* キャプチャモード */
CCP3CON1H = 0x0000u;
CCP3CON1Hbits.SYNC = 4u; /* [重要]SCCP3に同期 */
CCP3CON1Hbits.ALTSYNC = 1u; /* [重要]代替同期出力有効 */
CCP3CON2H = 0x0000u;
CCP3CON2Hbits.ICS = 0u; /* ICxPIN(PPS) */
CCP3CON2Hbits.AUXOUT = 3u; /* [重要]キャプチャイベントで同期出力 */
CCP3CON3H = 0x0000u;
CCP3PRL = 0x0000u;
CCP3RA = 0x0000u;
CCP3RB = 0x0000u;
/*-----------------------------------------------------------------------------*/
/* CCP4初期化*/
/*-----------------------------------------------------------------------------*/
CCP4CON1L = 0x0000u;
CCP4CON1Lbits.MOD = 2u; /* 立下り間 */
CCP4CON1Lbits.CCSEL = 1u; /* キャプチャモード */
CCP4CON1H = 0x0000u;
CCP4CON1Hbits.SYNC = 4u; /* SCCP3に同期 */
CCP4CON1Hbits.ALTSYNC = 1u; /* [重要]代替同期出力有効 */
CCP4CON2H = 0x0000u;
CCP4CON2Hbits.ICS = 0u; /* ICxPIN(PPS) */
CCP4CON2Hbits.AUXOUT = 3u; /* [重要]キャプチャイベントで同期出力 */
CCP4CON3H = 0x0000u;
CCP4PRL = 0x0000u;
CCP4RA = 0x0000u;
CCP4RB = 0x0000u;
/*-----------------------------------------------------------------------------*/
/* CCP2,3,4の有効化*/
/*-----------------------------------------------------------------------------*/
CCP4CON1Lbits.CCPON = 1u ;
CCP2CON1Lbits.CCPON = 1u ;
CCP3CON1Lbits.CCPON = 1u ;
CCP1CON1Lbits.CCPON = 1u ;
while(1)
{
if (CCP2STATLbits.ICBNE == 1u)
{
u2g_Cap2[u2g_CapCnt2 ++] = CCP2BUFL;
u2g_CapCnt2 &= 0xFF;
}
if (CCP3STATLbits.ICBNE == 1u)
{
u2g_Cap3[u2g_CapCnt3 ++] = CCP3BUFL;
u2g_CapCnt3 &= 0xFF;
}
if (CCP4STATLbits.ICBNE == 1u)
{
u2g_Cap4[u2g_CapCnt4 ++] = CCP4BUFL;
u2g_CapCnt4 &= 0xFF;
}
}
}
COMMENT
COMMENT FORM