DAC出力を増幅する回路に供給する電源の制御を行います。Body MCU も含めたシステム全体と連携を必要とする制御です。
◀ この記事の前に:
▶ この記事の次に:
制御のしくみ
省電力制御の要求元は複数あります。複数の要求元からの要求の調整が必要です。
ひとつの要求元が ONを要求している間に他の要求元が OFFを要求すると先に ONを要求しているにもかかわらずに DAC増幅回路を OFFにしてしまいます。これを避ける必要があります。右図の「各要求元からの集計」機能でその調整を行います。
すべての要求元から電源 OFFを要求されたときに DAC増幅回路の電源は OFFにします。要求元からひとつでも電源 ONを要求されている場合は電源を ONにします。それを実現するために、各要求元の要求状況を保持する変数を用意します。( gSAstatus )別途、要求元ごとにあらかじめビットを割り当てたパターンを定義します。各要求元からの要求は gSAstatusに書き込みます。gSAstatus 全体としてみるとすべてのビットが 0のときに変数が 0となります。それ以外(いずれかのビットが立っている( =1 ))の場合は変数は 0以外になります。
要求元からはビットごとのセット/リセットを、出力としては変数全体が 0か否かを判断することにより調整することができます。
MCU間に渡る制御
Qumcum Lab. は複数の MCUを搭載します。異なる MCUからの指示で制御を行う場合、他の MCUの状態は分かりません。その指示が成功したのか否かを確認することが必要になる場合があります。
その時に 各要求元の要求状況を保持する変数から要求が成功したことを確認できます。変数の状態を渡す関数を作成してこの対応を行います。実際の処理は MCU間で情報交換を行うしくみ( M-Link )を介して行います。
関数の概要
関数は以下のとおりです。
外部関数
他のジュールやファイルの外部からアクセス可能な関数です。
setSavingPowerAmp( uint8_t nSource, bool bPower )
引 数:
・uint8_t nSource: 省電力制御の要求元
・bool bPower: 電源の ON/OFF
分 類:
API( 省電力制御、 アプリケーション、他 )
機 能:
DAC 増幅回路の電源を ON / OFF する。
関係する関数:
上位関数: アプリケーション、他
下位関数: ー
この関数のコードはこちらです。
getSavingPowerAmp()
引 数:
なし
戻り値:
int
0: 電源 OFF
0 以外: 電源 ON / 値(ビット)により電源 ONを要求した対象を示す。
分 類:
API( 省電力制御、 アプリケーション、他 )
機 能:
省電力の状態を返す。
関係する関数:
上位関数: ー
下位関数: ー
この関数のコードはこちらです。
内部関数
外部から直接アクセスできずモジュール( 特定のスコープ内 )で使用する関数です。
省電力制御( DAC出力増幅回路 )の内部関数はありません。
データの構造
データの構造は以下のとおりです。
グローバル定義
グローバル定義は以下のとおりです。
//------------------------------------------------------------------------------
// IO pin name definition
//------------------------------------------------------------------------------
//-----------------------------------------------
// IO pin list
//-----------------------------------------------
...
//---- AMP ----
#define PIN_PS_AMP 26 // Amplifier power saving control
//------------------------------------------------------------------------------
// Saving DAC amplifier
//------------------------------------------------------------------------------
//.... Power-saving control source .....
#define SA_MP B00000001 // Peripheral MCU DAC
#define SA_MB B00000010 // Body MCU DAC
#define SA_MB2 B00000100 // Body MCU2 DAC
//.... Output logic ....
#define AMP_POWER_ON HIGH // power saving control for DAC amplifier
#define AMP_POWER_OFF LOW
//.... Argument ....
#define SOUND_POWER_ON 1 //
#define SOUND_POWER_OFF 0
名 称 | 型 | 値 | 説 明 |
---|---|---|---|
PIN_PS_AMP | define | 26 | DAC 増幅回路の省電力制御用の信号ピン |
SA_MP | define | B00000001 | Peripheral MCU DAC からの要求 |
SA_MB | define | B00000010 | Body MCU DAC からの要求 |
SA_MB2 | define | B00000100 | Body MCU2 DAC からの要求 |
AMP_POWER_ON | define | HIGH | DAC 増幅回路の電源 ON時の出力 |
AMP_POWER_OFF | define | LOW | DAC 増幅回路の電源 OFF時の出力 |
SOUND_POWER_ON | define | 1 | DAC 増幅回路の電源 ON |
SOUND_POWER_OFF | define | 0 | DAC 増幅回路の電源 OFF |
グローバル変数
グローバル変数は以下のとおりです。
//==============================================================================
// Variable definitions in source code
//==============================================================================
//------------------------------------------------------------------------------
// Saving DAC amplifier
//------------------------------------------------------------------------------
uint8_t gSAstatus = 0; // consolidate power control requests
要 素 | 型 | 初期値 | 説 明 |
---|---|---|---|
gSAstatus | uint8_t | 0 | 各機能から要求される電力制御の集約 |
コード
コードは以下のとおりです。
外部関数
setSavingPowerAmp( uint8_t nSource, bool bPower )
DAC 増幅回路の電源を ON / OFF します。
/*----------------------------------------------------------------------------*/
/* Request to control power
/* param : -
/* return : -
/*----------------------------------------------------------------------------*/
void setSavingPower( uint8_t nSource, bool bPower )
{
//.... save status ....
if( bPower == true ){
gSAstatus = gSAstatus | bPower; // request power on
} else {
gSAstatus = gSAstatus &( ~bPower ); // request power off
}
//.... consolidate power control requests ....
if( gSAstatus != true ){
digitalWrite( PIN_PS_SA, PS_ON ); // power on
} else {
digitalWrite( PIN_PS_SA, PS_OFF ); // power off
}
}
getSavingPowerAmp()
省電力の状態を返す。
/*----------------------------------------------------------------------------*/
/* Get saving status
/* param : -
/* return : status each requests
/*----------------------------------------------------------------------------*/
uint8_t gSPstatus()
{
return gSPstatus;
}
参考情報
参考になる情報は以下のとおりです。
このホームページ内
- 発: M
他のWebサイト
- M: I2