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