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

Version 1

    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