This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/EK-TM4C1294XL:使用 PWM 实时采样 ADC 以实现简单相移的问题

Guru**** 2325420 points
Other Parts Discussed in Thread: EK-TM4C1294XL
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/588331/ccs-ek-tm4c1294xl-issue-with-adc-sampling-in-real-time-with-the-pwm-to-implement-simple-phase-shift

器件型号:EK-TM4C1294XL
主题中讨论的其他器件: TM4C123

工具/软件:Code Composer Studio

大家好、

本周、我将稳步学习 C/IDE/固件编程、并率先尝试合并此 Tiva 芯片的两个示例:single_end.c 和 dead_band.c、以构建使用5V 电源分压器中的 POT 的随机 PWM 相移电路。 请参阅以下代码:

#include 
#include 
#include "inc/hw_types.h"
#include "deg/hw_memmap.h"
#include "inc/tm4c1294ncppdt.h"
#include "driverlib/adc.h"
#include "driverlib/pio.h"
#include "driverlib/pin_map.h"
#define "driverlib/mctrateg/sym_delt/sym_delt count


#包含"40960.40960"  


浮空周期1;
浮子死区1;
浮子循环1;
浮点周期2;
浮子死区2;
float cycle2;
};

int
main (void)
{
浮点 PS;
结构 PWM_PAIR 占空比;

//该数组用于存储从 ADC FIFO 读取的数据。 它
//必须与正在使用的序列发生器的 FIFO 一样大。 此示例
//使用 FIFO 深度为1的序列3。 如果是另一个序列
//与更深的 FIFO 一起使用,则必须更改数组大小。
//
uint32_t pui32ADC0Value[1];

//
//使用 PLL 将时钟设置为以16MHz 运行。 时间
//使用 ADC,您必须使用 PLL 或提供16 MHz 时钟
//源。

SysCtlClockFreqSet (SYSCTL_SYSDIV_1 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHz、16000000);// ADC 对此感到满意、PWM 不满意!

//启用系统时钟并将晶振频率设置为16MHz
//SysCtlClockSet (SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_XTAL_16MHz | SYSCTL_OSC_MAIN);//PWM 对此感到满意、但 ADC 不满意!

//必须启用 ADC0外设才能使用。
SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);

//
//对于此示例、ADC0与端口 E7上的 AIN0一起使用。
//您使用的实际端口和引脚可能有所不同,请参阅
//数据表以了解更多信息。 需要启用 GPIO 端口 E
//因此可以使用这些引脚。
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE);

//
//为这些引脚选择模拟 ADC 功能。
//请查阅数据表以查看每个引脚分配的函数。
GPIOPinTypeADC (GPIO_Porte _BASE、GPIO_PIN_3);

//
//使用处理器信号触发器启用采样序列3。 序列3
//将在处理器发送信号启动时执行单次采样
//转换。 每个 ADC 模块有4个可编程序列、序列0
//至序列3。 此示例任意使用序列3。
//
ADCSequenceConfigure (ADC0_BASE、3、ADC_TRIGGER_PROCESSOR、0);

//
//在序列3上配置步骤0。 对中的通道0 (ADC_CTL_CH0)进行采样
//单端模式(默认)并配置中断标志
//(ADC_CTL_IE)将在采样完成时置1。 告诉 ADC 逻辑
//这是序列3上的最后一次转换(ADC_CTL_END)。 序列
// 3只有一个可编程步骤。 序列1和2有4个步骤、和
//序列0有8个可编程步骤。 因为我们只做一个
//使用序列3进行转换,我们将仅配置步骤0。 了解详情
//有关 ADC 序列和步骤的信息、请参考数据表。
//
ADCSequenceStepConfigure (ADC0_BASE、3、0、ADC_CTL_CH0 | ADC_CTL_IE |
ADC_CTL_END);

//
//由于采样序列3现在已配置,因此必须将其启用。
//
ADCSequenceEnable (ADC0_BASE、3);

//
//清除中断状态标志。 这样做是为了确保
//中断标志在我们进行采样之前被清除。
//
ADCIntClear (ADC0_BASE、3);
//
//将 PWM 时钟设置为与系统时钟相同的频率
SysCtlPWMClockSet (SYSCTL_PWMDIV_1);

占空比1 = 800;//开关频率= 20kHz
duty.deadband1 = Duty.period1 * 0/100;//1%死区= 500ns
Duty.Cycl1 = Duty.period1 * 0.5;//50%占空比
Duty.period2 = Duty.period1;//在两个开关频率下的第二个 PWM 模块
duty.deadband2 = Duty.period2 * 0/100;//1%死区
Duty.cycle2 = Duty.Cycle1;
//PS = 0.5;

SysCtlPeripheralEnable (SYSCTL_Periph_PWM0);//启用 PWM 模块0的控制

SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);//启用 GPIO B 的控制

GPIOPinConfigure (GPIO_PF0_M0PWM0);//将 PF0映射到 PWM0 Gen0、OP 0
GPIOPinConfigure (GPIO_PF1_M0PWM1);//将 PF1映射到 PWM0 Gen0、OP 1
GPIOPinConfigure (GPIO_PF2_M0PWM2);//将 PWM1、P1 OP2映射到 PF2
GPIOPinConfigure (GPIO_PF3_M0PWM3);//将 PWM1、P1 OP3映射到 PF3

GPIOPinTypePWM (GPIO_PORTF_BASE、GPIO_PIN_0);//将 PF0配置为 PWM
GPIOPinTypePWM (GPIO_PORTF_BASE、GPIO_PIN_1);//将 PF1配置为 PWM
GPIOPinTypePWM (GPIO_PORTF_BASE、GPIO_PIN_2);//将 PF2配置为 PWM
GPIOPinTypePWM (GPIO_PORTF_BASE、GPIO_PIN_3);//将 PF3配置为 PWM

PWMGenConfigure (PWM0_BASE、PWM_GEN_0、PWM_GEN_MODE_DOWN |
PWM_GEN_MODE_NO_SYNC);//将 PWM0 Gen0配置为递减计数器、不同步更新
PWMGenConfigure (PWM0_BASE、PWM_GEN_1、PWM_GEN_MODE_DOWN |
PWM_GEN_MODE_NO_SYNC);//将 PWM1、Gen1配置为递减计数器、不同步更新

PWMGenPeriodSet (PWM0_BASE、PWM_GEN_0、Duty.period1);//设置 PWM0 Gen0的周期
PWMGenPeriodSet (PWM0_BASE、PWM_GEN_1、Duty.period2);//设置 PWM0、Gen1的周期

PWMPulseWidthSet (PWM0_BASE、PWM_OUT_0、Duty.Cycl1);//设置 PWM0 Gen0的占空比
//PWMPulseWidthSet (PWM0_BASE、PWM_OUT_1、Duty.Cycl1);//设置 PWM0 Gen0的占空比
PWMPulseWidthSet (PWM0_BASE、PWM_OUT_2、Duty.cycle2);//设置 PWM0 Gen1的占空比
//PWMPulseWidthSet (PWM0_BASE、PWM_OUT_3、Duty.cycle2);//设置 PWM0 Gen1的占空比

PWMDeadBandEnable (PWM0_BASE、PWM_GEN_0、duty.deadband1 / 2、duty.deadband1 / 2);//在 PWM0 Gen0上配置死区
PWMDeadBandEnable (PWM0_BASE、PWM_GEN_1、duty.deadband2 / 2、duty.deadband2 / 2);//设置死区

PWMOutputState (PWM0_BASE、PWM_OUT_0_BIT | PWM_OUT_1_BIT、TRUE);//在 PWM0 Gen0上启用 OP 0、1
PWMOutputState (PWM0_BASE、PWM_OUT_2_BIT | PWM_OUT_3_BIT、TRUE);//启用运算2、3.

PWMGenEnable (PWM0_BASE、PWM_GEN_0);//启用 PWM0、Gen0
PWMGenEnable (PWM0_BASE、PWM_GEN_1);//启用 PWM0、Gen1

//永久采样 AIN0。 显示控制台上的值。

while (1)
{
//
//触发 ADC 转换。
//
ADCProcessorTrigger (ADC0_BASE、3);

//
//等待转换完成。
//
while (!ADCIntStatus (ADC0_BASE、3、false)//使用 OSC 设置 SysClock 时、这永远不会退出!!!
{
}

//
//清除 ADC 中断标志。
//
ADCIntClear (ADC0_BASE、3);

//
//读取 ADC 值。
//
ADCSequenceDataGet (ADC0_BASE、3、pui32ADC0Value);

//
//在控制台上显示 AIN0 (PE3)数字值。

//
//此函数提供了生成恒定长度的方法
//延迟。 函数延迟(以周期为单位)= 3 *参数。 延迟
//任意地250ms。
SysCtlDelay (SysCtlClockGet ()/12);
PS = pui32ADC0Value[0]* DEG_PER_COUNT;
//PWM0_1_CMPA_R = pui32ADC0Value[0]* DEG_PER_COUNT * Duty.period2; //相对于 Gen0比较器 A 的比例移动 Gen1比较器 A
PWM0_1_CMPA_R = PS *占空比2 / 2; //相对于 Gen0比较器 A 的比例移动 Gen1比较器 A
PWM0_1_CMPB_R = PWM0_1_CMPA_R + Duty.period2 / 2;
PWM0_1_GENA_R = 0x0C80;

}

} 

第41行和第44行似乎会引起很多问题、因为 ADC 仅在我使用 PLL 时流动、但 PWM 就在这里。 然后、正如我所说的、如果我尝试使用 OSC、它会在第152行挂起而不返回、这也不是很好... 寻找一个解决方案、让它能够实时地将 PWM1相对于 PWM0移位、乍一看、这个代码是否应该能够避免时钟问题...?

提前感谢、

B

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您在 EK-TM4C1294XL 上、则主振荡器上的晶体为25MHz、而不是16MHz。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Ben Davis"] SysCtlClockFreqSet (SYSCTL_SYSDIV_1 | SYSCTL_USE_PLL[/引用]

    请注意我在重点部分中提到的两个参数-这两个参数是否合在一起-合法?

    PLL 以高得多的频率运行-因此第一个参数(将"F_PLL"除以1")(可能)需要您注意。

    您注意到(一些)系统时钟问题-最好找到一种有效的方法来"监控"系统时钟-以确保它"设置为您的规格。"   您对 SysCtlClockFreqSet()的调用有缺陷!

    对这一基本问题"发挥作用",对其余问题的审查/分析似乎为时过早,难道不是吗?

    而且...虽然您的代码得到了很好的评价、但您实现计划目标的"策略"似乎没有完全描述。   通常、详细的"代码段细分"(叙述、描述)会尝试"明确-代码目标的每一部分。   缺少(每个)代码段的正确描述/目标会增加寻求帮助的人员的时间/精力(这可能并不总是向您证明)...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Bob、CB1、Closer、Closer Still ... 我实施了这两个建议、现在正在进行采样、我看到的计数与我在提供的结点处的电压相称、但也存在问题。 当我从 dead_band.c 示例复制时、我留下了 SysCtlClockSet()输入的痕迹、现在 ADC 和 PWM 模块似乎都在工作、但我的更新策略已关闭。

    1) 1)采样似乎只提供一次正确的值、然后在输入保持稳定的情况下、它在几乎最小值"0"和最大值计数"4096"之间反弹。

    2) 2) PWM0 Gen1未更新、或者至少没有如预期的那样、我在样本的中点值处看到信号的鬼影、我认为这与我的第一点更相关。 所有这一切都发生在170-180号线附近。

    我假设我的数学有点偏离、我将会捕捉到这一点、但采样会发生抖动、这将导致一些严重问题:

    #include 
    #include 
    #include "inc/hw_types.h"
    #include "inc/hw_memmap.h"
    #include "inc/tm4c1294ncppdt.h"
    #include "driverlib/adc.h"
    #include "driverlib/pin_map.h"
    
    #include "driverlib/pin/sysctwm"#driverlib/m_swm.h
    
    
    
    浮空周期1;
    浮子死区1;
    浮子循环1;
    浮点周期2;
    浮子死区2;
    float cycle2;
    };
    
    int
    main (void)
    {
    浮点 PS;
    结构 PWM_PAIR 占空比;
    
    //Section 1-此模块激活 ADC0及其关联的 GPIO 端口
    //*********
    //该数组用于存储从 ADC FIFO 读取的数据。 它
    //必须与正在使用的序列发生器的 FIFO 一样大。 此示例
    //使用 FIFO 深度为1的序列3。 如果是另一个序列
    //与更深的 FIFO 一起使用,则必须更改数组大小。
    //
    uint32_t pui32ADC0Value[1];
    
    //
    //使用 PLL 将时钟设置为在25MHz 下运行。 时间
    //使用 ADC,您必须使用 PLL 或提供一个25MHz 的时钟
    //源。
    
    SysCtlClockFreqSet (SYSCTL_XTAL_25MHz |
    SYSCTL_OSC_MAIN |
    SYSCTL_USE_PLL |
    SYSCTL_CFG_VCO_480、25000000);
    
    //必须启用 ADC0外设才能使用。
    SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);
    
    //
    //需要启用 GPIO 端口 E
    //因此可以使用这些引脚。
    SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE);
    
    //
    //为这些引脚选择模拟 ADC 功能。
    //请查阅数据表以查看每个引脚分配的函数。
    GPIOPinTypeADC (GPIO_Porte _BASE、GPIO_PIN_3);
    
    //
    //使用处理器信号触发器启用采样序列3。 序列3
    //将在处理器发送信号启动时执行单次采样
    //转换。 每个 ADC 模块有4个可编程序列、序列0
    //至序列3。 此示例任意使用序列3。
    //
    ADCSequenceConfigure (ADC0_BASE、3、ADC_TRIGGER_PROCESSOR、0);
    
    //
    //在序列3上配置步骤0。 对中的通道0 (ADC_CTL_CH0)进行采样
    //单端模式(默认)并配置中断标志
    //(ADC_CTL_IE)将在采样完成时置1。 告诉 ADC 逻辑
    //这是序列3上的最后一次转换(ADC_CTL_END)。 序列
    // 3只有一个可编程步骤。
    //
    ADCSequenceStepConfigure (ADC0_BASE、3、0、ADC_CTL_CH0 | ADC_CTL_IE |
    ADC_CTL_END);
    
    //
    //由于采样序列3现在已配置,因此必须将其启用。
    //
    ADCSequenceEnable (ADC0_BASE、3);
    
    //
    //清除中断状态标志。 这样做是为了确保
    //中断标志在我们进行采样之前被清除。
    //
    ADCIntClear (ADC0_BASE、3);
    
    //Section 2 -这个块激活 PWM0模块0和1及其
    //相关 GPIO 端口
    //*********
    //将 PWM 时钟设置为与系统时钟相同的频率
    SysCtlPWMClockSet (SYSCTL_PWMDIV_1);
    
    占空比1 = 800;//开关频率= 20kHz
    duty.deadband1 = Duty.period1 * 0/100;//1%死区= 500ns
    Duty.Cycl1 = Duty.period1 * 0.5;//50%占空比
    Duty.period2 = Duty.period1;//在两个开关频率下的第二个 PWM 模块
    duty.deadband2 = Duty.period2 * 0/100;//1%死区
    Duty.cycle2 = Duty.Cycle1;
    //PS = 0.5;
    
    SysCtlPeripheralEnable (SYSCTL_Periph_PWM0);//启用 PWM 模块0的控制
    
    SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);//启用 GPIO B 的控制
    
    GPIOPinConfigure (GPIO_PF0_M0PWM0);//将 PF0映射到 PWM0 Gen0、OP 0
    GPIOPinConfigure (GPIO_PF1_M0PWM1);//将 PF1映射到 PWM0 Gen0、OP 1
    GPIOPinConfigure (GPIO_PF2_M0PWM2);//将 PWM1、P1 OP2映射到 PF2
    GPIOPinConfigure (GPIO_PF3_M0PWM3);//将 PWM1、P1 OP3映射到 PF3
    
    GPIOPinTypePWM (GPIO_PORTF_BASE、GPIO_PIN_0);//将 PF0配置为 PWM
    GPIOPinTypePWM (GPIO_PORTF_BASE、GPIO_PIN_1);//将 PF1配置为 PWM
    GPIOPinTypePWM (GPIO_PORTF_BASE、GPIO_PIN_2);//将 PF2配置为 PWM
    GPIOPinTypePWM (GPIO_PORTF_BASE、GPIO_PIN_3);//将 PF3配置为 PWM
    
    PWMGenConfigure (PWM0_BASE、PWM_GEN_0、PWM_GEN_MODE_DOWN |
    PWM_GEN_MODE_NO_SYNC);//将 PWM0 Gen0配置为递减计数器、不同步更新
    PWMGenConfigure (PWM0_BASE、PWM_GEN_1、PWM_GEN_MODE_DOWN |
    PWM_GEN_MODE_NO_SYNC);//将 PWM1、Gen1配置为递减计数器、不同步更新
    
    PWMGenPeriodSet (PWM0_BASE、PWM_GEN_0、Duty.period1);//设置 PWM0 Gen0的周期
    PWMGenPeriodSet (PWM0_BASE、PWM_GEN_1、Duty.period2);//设置 PWM0、Gen1的周期
    
    PWMPulseWidthSet (PWM0_BASE、PWM_OUT_0、Duty.Cycl1);//设置 PWM0 Gen0的占空比
    //PWMPulseWidthSet (PWM0_BASE、PWM_OUT_1、Duty.Cycl1);//设置 PWM0 Gen0的占空比
    PWMPulseWidthSet (PWM0_BASE、PWM_OUT_2、Duty.cycle2);//设置 PWM0 Gen1的占空比
    //PWMPulseWidthSet (PWM0_BASE、PWM_OUT_3、Duty.cycle2);//设置 PWM0 Gen1的占空比
    
    PWMDeadBandEnable (PWM0_BASE、PWM_GEN_0、duty.deadband1 / 2、duty.deadband1 / 2);//在 PWM0 Gen0上配置死区
    PWMDeadBandEnable (PWM0_BASE、PWM_GEN_1、duty.deadband2 / 2、duty.deadband2 / 2);//设置死区
    
    PWMOutputState (PWM0_BASE、PWM_OUT_0_BIT | PWM_OUT_1_BIT、TRUE);//在 PWM0 Gen0上启用 OP 0、1
    PWMOutputState (PWM0_BASE、PWM_OUT_2_BIT | PWM_OUT_3_BIT、TRUE);//启用运算2、3.
    
    PWMGenEnable (PWM0_BASE、PWM_GEN_0);//启用 PWM0、Gen0
    PWMGenEnable (PWM0_BASE、PWM_GEN_1);//启用 PWM0、Gen1
    
    //Section 3 -本部分的目的是在输入电压发生变化时使 ADC0持续采样
    //以更改存储在 pui32ADC0Value 中的值,该值随后应更新比较器
    PWM0第1代的//寄存器、以便实现 PWM0第1代的相移、并使用.r.t PWM0第0代从0到180度 
    //或0 < PS < 1 // //永久采样 AIN0。 while (1) { // //触发 ADC 转换。 // ADCProcessorTrigger (ADC0_BASE、3); // //等待转换完成。 // while (!ADCIntStatus (ADC0_BASE、3、false)) { } // //清除 ADC 中断标志。 // ADCIntClear (ADC0_BASE、3); // //读取 ADC 值。 // ADCSequenceDataGet (ADC0_BASE、3、pui32ADC0Value); // //此函数提供了生成恒定长度的方法 //延迟。 SysCtlDelay (SysCtlClockGet ()/12); PS = pui32ADC0Value[0]/(2 ^ 12);//使用存储的采样值作为比率、最多具有来自 ADC 的12位计数 PWM0_1_CMPA_R = PS *占空比2 / 2; //相对于 Gen0比较器 A 的比例移动 Gen1比较器 A PWM0_1_CMPB_R = PWM0_1_CMPA_R +占空比2 / 2;//将 Gen1比较器 B 与.r.t 比较器 A 相移 PWM0_1_GENA_R = 0x0C80;//PWM0第1代控制-在 B 复位时无负载操作和 A 置1 } }

    非常接近、非常感谢您迄今提供的输入!

    B

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    可以看到:"ADC、PWM 发生器和数字比较器(我相信)"都在"发挥作用"。 您的 MCU 具有(也是)模拟比较器-不是吗?

    现在公司/我不知道-也不雇佣- 129x。 然而、对于其他供应商的 MCU (123)、我们发现数字比较器比模拟版本"受限得多"。 数字比较器施加的限制是否可能会妨碍您的工作?

    再次-您的代码被大量注释(良好)、但没有、"代码段目标"-每个代码块-仍然显示。   这样可以简化和加快他人的工作-(真正)掌握您的意图。   我认为这种努力将证明是有益的...  您当然"了解"您的关键/关键目标-决策点-选择。   (此处有其他人-请勿!)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我将要研究板载模拟比较器、其中有3个、这不仅仅是粗略的一瞥、但它似乎是一个相当精确的选择、即您将采样纯模拟、也会更加灵活、正如您所注意到的那样。

    但是、我的问题是由垃圾输入引起的、我几乎无法呼吸来自 V 分压器的测试线、信号就在这里。 不用说、这种最简单电路的关键在于现在有一个很好的脂肪电解电容器分流到地面...

    当我有时间时、我将进一步对代码进行注释、但是这里的输入对于捕捉 s/w 侧的主要问题非常有帮助、不正确的函数输入将时钟设置为上面针对 SysCtlClockFreqSet()的解决方案中的那样。

    再次感谢大家、
    B
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Ben 您好。
    问题的原因可能是使用了 SysCtlPWMClockSet (...) 功能。 根据 TivaWare 外设驱动程序库用户指南第509页的注释:在该页的末尾、显示此函数仅用于 TM4C123器件。 对于 TM4C1294、请使用 PWMClockSet (...) 功能。
    希望这对您有所帮助、
    John
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我怀疑(或希望)使用非法函数调用会引起(部分)标志。 但完全可能、它不会-因为 API 必须"足够宽"以适应多种类型的供应商 MCU。 也请注意-系统时钟是馈送到 PWM 模块的"默认"时钟。 (123系列的情况确实如此-我们不使用129)

    也就是说-尝试以全 PLL 速度运行系统时钟-正如海报(早期/不良)代码显示(通过 SysDiv_1参数)-是明确的原因代理! (并获得了正确的"验证答案"。)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    嘿、John、
    一切都很好、但在我通过示例了解如何使用 API 的过程中、确保使用的所有函数确实与特定目标兼容是非常重要的一部分、如您所见! 谢谢您的关注、我将深入了解。
    谢谢、
    B