Tip / ログイン to post questions, reply, level up, and achieve exciting badges. Know more

cross mob

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

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

SivaK_96
Employee
Employee
50 questions asked 10 questions asked 5 questions asked

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

290 件の閲覧回数
寄稿者