ファームウェアによるCapSenseセンサーの相互容量計算 - KBA222425 - Community Translated (JA)

- RSS フィードを購読する
- 新着としてマーク
- 既読としてマーク
- ブックマーク
- 購読
- 印刷用ページ
- 不適切なコンテンツを報告
Community Translated by NoTa_4591161 Version: **
Translation - English: Mutual Capacitance Calculation of a CapSense Sensor Through Firmware - KBA222425
質問:
CapSenseコンポーネントのバージョン3.0以降のファームウェアを使用して、CapSenseセンサーの相互静電容量をどのように計算しますか?
回答:
Rawカウントは相互静電容量(Cm)の直接的な測定値です。得られたrawカウントを使用して、次の手順に従ってセンサーの相互静電容量を計算できます。
1. CapSenseコンポーネントを開始します。すべてのCapSenseウィジェットをスキャンして処理します
2. 変調器クロックの周波数、サブコンバージョンの数、およびトランスミッタクロックの周波数を使用して、最大カウントを計算します。
Max_count = (Modulator_clock_frequency * Number_of_sub_conversions) / Transmitter_clock_frequency
3. 最大カウント(ステップ1で取得)とCapSenseコンポーネントによって処理されたrawカウントを使用して、ハードウェアrawカウントを計算します。
Raw_count_hardware = Max_count – Raw_count
4. 最大カウント(ステップ1から)、ハードウェアrawカウント(ステップ2から)、IDAC電流、周波数、およびトランスミッタクロック信号の振幅を使用して、相互静電容量を計算します。
Raw_count_hardware = (2 * Max_count * 相互容量 * Transmitter_voltage * Transmitter_clock_frequency) / IDAC_current
include "project.h"
#define TRANSMITTER_VOLTAGE (5u) /* 単位 - 電圧 */
#define IDAC_GAIN (300u) /* 単位 – ナノアンペア/ビット */
int main(void)
{
CyGlobalIntEnable; /* グローバル割り込みを有効にします。 */
uint32 raw_count, modulator_clock_divider, sense_clock_divider, sub_conversions, IDAC_code, hardware_raw_count, max_count, mutual_capacitance;
/* CapSenseコンポーネントを開始します */
CapSense_Start();
/* すべてのCapSenseウィジェットをスキャンします */
CapSense_ScanAllWidgets();
for(;;)
{
/* CapSenseスキャンが完了したかどうかを確認します */
if (!CapSense_IsBusy())
{
/* すべてのCapSenseウィジェットを処理します */
CapSense_ProcessAllWidgets();
/* ボタン0の最大カウントの計算 */
/* 変調器クロック分周器の値を取得するAPI = HF_CLK_FREQ / MOD_CLK_FREQ */
CapSense_GetParam (CapSense_MOD_CSX_CLK_PARAM_ID , &modulator_clock_divider);
/ *センスクロック分周器の値を取得するAPI = MOD_CLK_FREQ / SNS_CLK_FREQ * /
CapSense_GetParam (CapSense_BUTTON0_SNS_CLK_PARAM_ID, &sense_clock_divider);
/* サブコンバージョンの数を取得するAPI */
CapSense_GetParam (CapSense_BUTTON0_RESOLUTION_PARAM_ID , &sub_conversions);
max_count = sense_clock_divider * sub_conversions ;
/* ボタン0のハードウェアrawカウントの計算 */
/* rawカウントの値を取得するAPI */
CapSense_GetParam (CapSense_BUTTON0_RX0_RAW0_PARAM_ID , &raw_count);
hardware_raw_count = max_count-raw_count ;
/* ボタン0の相互容量の計算 */
/* IDACコードを取得するためのAPI */
CapSense_GetParam (CapSense_BUTTON0_RX0_IDAC_COMP0_PARAM_ID , &IDAC_code);
mutual_capacitance = (hardware_raw_count * IDAC_code * IDAC_GAIN * sense_clock_divider * modulator_clock_divider) / (2 * max_count * TRANSMITTER_VOLTAGE * CYDEV_BCLK__HFCLK__MHZ);
/* すべてのCapSenseウィジェットをスキャンします */
CapSense_ScanAllWidgets();
}
}
}
相互容量は、次の条件下で数千フェムトファラッドの範囲になると予想されます。
HF_clock_fequency = 48 MHz
Modulator_clock_frequency = 48 MHz
Sense_clock_frequency = 300 kHz
Transmitter_voltage = 5 V
IDAC_gain = 300 nA/ bit
IDAC code= 32
Number_of_sub_conversions = 100
Modulator_clock_divider = 1
Sense clock divider = 160
Max_count = (48 * 100* 160 ) / 1 * 48 = 16000
例として、取得したrawカウントが6200の場合、
Raw_count_hardware = 16000 – 6200 = 9800
相互容量 = (9800*300*20*160) / ( 2*16000*5*48 ) = 1225 fF