[PR]
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
dsPIC33CHシリーズには12bitD-Aコンバータがマスターコアに1ch、スレーブコアに3ch搭載されています。D-Aコンバータは基本的に内部コンパレータの比較値として使用しますが、その中で1chだけマイコンのピンに出力可能です。さらにその4chのD-Aコンバータにはそれぞれスロープ補償モジュールが搭載されています。このスロープ補償はスイッチング電源をピーク電流モードでPWMDutyが50%以上の場合に発生する低調波発振という現象を防止してくれます。
このスロープモジュールはDACモジュールに対し加算もしくは減算の制御を行い、DACの出力を自動で可変する機能を有しています。
今回は三角波出力モードとして動作させます。
/*----------------------------------------------------------------------------------*/
/*【INC】インクルードファイル*/
/*----------------------------------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
/*----------------------------------------------------------------------------------*/
/* Main関数 */
/*----------------------------------------------------------------------------------*/
int main(int argc, char** argv)
{
/*-----------------------------------------------------------------------------*/
/* クロック初期化*/
/*-----------------------------------------------------------------------------*/
vds_Main_Init_Clock_Register(); /* クロック初期化 */
/*-----------------------------------------------------------------------------*/
/* GPIO初期化*/
/*-----------------------------------------------------------------------------*/
ANSELBbits.ANSELB2 = 1u; /* RB2ピンはアナログピン(DACOUT1) */
/*-----------------------------------------------------------------------------*/
/* CMP初期化*/
/*-----------------------------------------------------------------------------*/
DACCTRL1L = 0x0000u;
DACCTRL1Lbits.CLKSEL = 0u; /* DACクロック源( 0 = AFVCO/2 = 500MHz) */
DACCTRL1Lbits.CLKDIV = 0u; /* DACクロックディバイダ (0 = 1/1) */
DACCTRL1Lbits.FCLKDIV = 7u; /*コンパレータフィルタクロックディバイダ*/
DACCTRL1Lbits.DACON = 1u; /* モジュール有効化(0 = 無効,1 = 有効) */
DACCTRL2H = 0x001Au; /* 移行開始からの時間 */
DACCTRL2L = 0x0055u; /* 遷移モードの継続時間 */
DAC1CONH = 0x0000u;
DAC1CONL = 0x0000u;
DAC1CONLbits.INSEL = 0u; /* コンパレータソース (0 = CMPxA input pin) */
DAC1CONLbits.HYSSEL = 1u; /* コンパレータヒステリシス (1 = 15mV) */
DAC1CONLbits.DACOEN = 1u; /* DAC外部出力 (0 = 無効,1 = 有効) */
DAC1DATH = 0x07FFu; /* コンパレータ比較値上限 */
DAC1DATL = 0x0300u; /* コンパレータ比較値下限 */
/*-----------------------------------------------------------------------------*/
/* SLOPE初期化*/
/*-----------------------------------------------------------------------------*/
SLP1CONH = 0x0000u;
SLP1CONHbits.TWME = 1u; /* 三角波出力モード有効 */
SLP1CONL = 0x0000u;
SLP1DAT = 0x0001u; /* スロープ速度 */
/*-----------------------------------------------------------------------------*/
/* DAC1の有効化*/
/*-----------------------------------------------------------------------------*/
DAC1CONLbits.DACEN = 1u; /* DAC1の有効化 */
/*-----------------------------------------------------------------------------*/
/* メインルーチン*/
/*-----------------------------------------------------------------------------*/
while(1)
{
/*---------------------------------------------------------------------*/
/*【****】何もなし*/
/*---------------------------------------------------------------------*/
}
}