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.

[参考译文] MSP430FW425:关于LC SENSE

Guru**** 2613135 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/659241/msp430fw425-regarding-lc-sense

部件号:MSP430FW425

您好,

我正在使用为LC SENSE提供的示例代码,以便使用单电感器进行感应。
我正在使用SIFCH0(WFP 6.0)针作为电感器和SIFCOM的DAC输出,作为示例原理图。我相信我的硬件是完美的,但我没有得到任何中断来感应金属的电感器。 所提供的代码是否需要任何更改,请尽快执行Plzz帮助。
此致,谢谢

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

    您好Hari,

    您是否有机会通过 MSP430Tm扫描接口 应用手册通读旋转检测? 它有很多宝贵的信息。 另外,您使用的是哪种源代码? 您在哪里找到它?

    在第3.1 .1节中,它提到在扫描接口模块的初始化过程中,必须配置所需的引脚以实现模块功能(例如,P6SEL=0x01)。 否则,数字输入会影响测量。 此外,如果未选择模块功能,当使用多个LC传感器时,其他扫描输入的阻尼将无法正常工作。 有关更多信息,请参阅第4.1 节。

    此致,

    詹姆斯

    MSP客户应用程序

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

    您好,James:
    我参考了应用手册 SLAA222B,它有源代码的链接,它有一个传感器代码和两个传感器代码。 我正在使用一个传感器代码并注释了液晶屏代码(已将P6SEL=0x03更改为P6SEL=0x01)。 如果需要,我会将原理图设计发送给您。
    此致,谢谢。

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

    您好Hari,

    您是否已将原理图与 SLAA222B图6中所示的示例原理图进行了比较? 接下来,我将参考数据表中的引脚命名图,以确保您的引脚连接(您的主板与使用源代码的主板)和引脚配置(例如 PxOUT,PxDIR,PxSEL等)正确。 如果您只是使用SIFFCH0,将P6SEL从0x03更改为0x01是有意义的。



    只有LC传感器,用于VMID电压生成的旁路电容器(在SIFCOM和SIFVSS之间)和32.768 kHz参考时钟(晶体)需要连接到MSP430TmMCU以建立正确的扫描IF模块操作。 请确认这些问题存在且工作正常,然后再深入探讨问题。

    此致,

    詹姆斯

    MSP客户应用程序

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

    尊敬的James:

    我检查过旁路电容器和引脚也是一样的,用示波器也检查了振荡。 当我在电感器附近获取金属时,振荡会受到压缩,但我没有得到中断。

    我附上原理图供您参考,但仅使用单传感器,即SIFFCH0

    此致,谢谢。

    A. Hari Adinarayana。

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

    您好Hari,

    感谢您分享您的示意图。 我看了看后没有发现任何问题。

    您指的是哪种中断? 您是否正在尝试在单传感器代码示例中的ISR_ScanIF() ISR中设置断点?

    /*------------------ */
    
    #pragma vector=SCANIF_vector
    __interrupt void ISR_ScanIF(void)
    {
    SIFCTL1 &=~0x0020;//重置中断标志
    DisplayWord(SIFCNT);//显示SIFCNT值
    } 

    在上述ISR中,是否可以尝试在DisplayWord()函数后添加一个NOP,并在其中放置一个断点?

    __no_operation(); 

    如果无法到达此断点,您能否确认代码进入main()中的while ()循环?

    //此程序按"原样"提供。 TI不作
    任何明示,暗示或法定的担保或//陈述,
    //包括对适销性,特定
    用途的适用性//,病毒的缺乏,
    响应的准确性或//完整性,结果和疏忽的任何暗示担保。
    // TI不对任何
    第三方的所有权,安静享受,安静//拥有和不侵权提供任何担保
    //与程序或
    //您使用程序相关的知识产权。
    ////
    在任何情况下,TI都不对任何特殊的,偶然的,
    //后果性的或间接的损害负责, 无论出于
    何种责任理论,也无论TI是否已被告知
    此类损害的可能性,此类损害可能以任何方式产生于
    本协议,程序或您对程序的使用。
    //排除的损害包括但不限于
    //移除或重新安装的成本,计算机时间,人工成本,
    商誉损失//,利润损失,储蓄损失,
    //使用损失或业务中断。 在任何情况
    
    
    下,TI //根据本协议或由//您使用本计划而产生的累计责任都不会超过500美元//(500美元)。
    ////
    除非另有说明,
    否则由德州仪器(TI)编写并拥有版权的程序将作为“免费软件”分发。 您只能
    在TI的本程序版权下使用和修改
    //本程序,而不需任何费用或限制。 您可以
    //向第三方分发,前提是您将
    本许可证的//副本转让给第三方,并且第三方
    //通过首次使用本程序而同意这些条款。 您
    //必须在
    程序的每个副本或部分副本上复制版权声明和//所有权的任何其他图例。
    ////
    您承认并同意,本程序包含
    //版权材料,商业秘密和其它TI专有
    //信息,并受版权法,
    //国际版权条约,商业秘密法以及
    //其它知识产权法的保护。 为了保护TI
    在程序中的//权利,您同意不对
    
    程序的任何目标代码//版本进行反编译,反向//工程,反汇编或以其他方式转换为可读形式。 您同意
    //在任何情况下都不会更改,删除或销毁
    本程序中包含的任何//版权声明。 TI保留
    本许可中未明确授予的所有//权利。 除
    //此处特别规定外
    ,本协议//中的任何内容均不应被解释为通过暗示,禁止反言
    ,//或其他方式授予您任何
    // TI专利,版权或商业机密下的任何许可或其他权利。
    ////
    您不得在非TI器件中使用本程序。
    //*************************************************************************************************
    //*
    MSP430FW427 */*
    简单1传感器演示。 如果线圈在金属*//*上方
    (LED熄灭),或者coild在金属上方(LED亮起),那么WFP 1.7 上的LED将显示。 在液晶屏*/*
    上显示SIFCNT值。 */*
    Texas Instruments Deutschland GmbH */
    /* 2003年11月,Christian Hernitschcheck*/
    /************************************************************************************************* /
    #include "msp430xw42x.h"
    
    /***函数来自文件"LCD.s43"***/
    void InitScanIF(void);
    void InitLCD(void);
    void DisplayWord(无符号int数据);
    
    /***用于简单单传感器系统的处理状态机***/
    const unsigned char psm[]={
    0x00, //状态0
    0x00, //***未使用
    0x00, //***未使用
    0x03, //状态3 -计数器被触发
    0x00, //状态4.
    0x00, //***未使用
    0x00, //***未使用
    0x01, //第7国
    0x00, //***未使用
    0x00, //***未使用
    0x00, //***未使用
    0x00, //***未使用
    0x00, //***未使用
    0x00, //***未使用
    0x00, //***未使用
    0x00, //***未使用
    };
    
    unsigned int Counter;/*------------------
    
    */
    void main (void)
    {
    WDTCTL = WDTPW + WDTHOLD; //禁用看门狗
    FLL_CTL0 |= XCAP10PF; //配置加载上限
    InitLCD();
    InitScanIF(); //初始化ScanIf模块
    
    P1OUT = 0x00;
    P1DIR = 0xFF;
    P2DIR = 0x7F;
    P3DIR = 0xFF; //未使用的引脚端接
    P4DIR = 0xFF;
    P5DIR = 0xFF;
    P6DIR = 0xFF;
    
    计数器= 0;
    DisplayWord (0x0000);
    
    _EINT();
    while (1)
    {
    IF (SIFCTL3和SIF0OUT)
    P1OUT |= 0x80;
    否则
    P1OUT &=~0x80;
    };
    }/*--------------------------------------------------
    
    */
    void InitScanIF(void)
    { int I;
    
    P6SEL |= 0x03;
    //初始化定时状态机器
    SIFFSM0 = 0x0000;// DAC=off,CA=off,1xSIFFCLK
    SIFFSM1 = 0x002C;// DAC=off,CA=off,1xSIFFCLK,激励
    SIFFSM2 = 0xSIFF3,ACSM3
    = 0xIFF; DAC=034; DAC=OFF // DAC=ON,CA=ON,2xSIFCLK,DAC的设置和比较
    器SIFTSM4 = 0x3174;// DAC=ON,CA=ON,7xSIFCLK,测量
    SIFTSM5 = 0x0220;// stop
    
    // DAC初始化数字控制值
    SIFDACR0 = 0x0330;//请注意,本示例中未使用滞后!!!
    SIFDACR1 = 0x0330;
    
    //初始化扫描接口控制寄存器
    SIFCTL2 = 0x0140;// DAC和比较器由TSM打开,
    //打开SIFVCCEx
    (i=0;i<=857;i++);//等待回路。 SIFVCCEx必须满足
    SIFCTL3 = 0x0100;//为S1和S2选择SIF0OUT (S1和S2为输入)
    //处理状态机的信号)
    // SIIFG3的SIFCNT1计数
    SIFCTL4 = 0x13F0;// SIFNT2 disabled,SIFCNT1 UP Enabled,SIFCLK/450
    SIFCTL5 = 0x0045;// SIFCLK由TSM打开,SIFCLK NOM Freq = 1MHz
    Unsigned SIFPSMV =(IFint)&CLINT;// PSM的偏移地址位置
    S1001 SCTL1=传真/}-->启用-----
    
    
    */
    
    #pragma vector=SCANIF_vector
    __interrupt void ISR_ScanIF(void)
    {
    SIFCTL1 &=~0x0020;//重置中断标志
    DisplayWord(SIFCNT);//显示SIFCNT值
    } 

    此致,

    詹姆斯

    MSP客户应用程序

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

    您好,James:


    我没有在我的主板上使用任何显示器,因此我已经按照你的建议对显示部分进行了评论,并添加了一个nop(),在中断功能中保留了一个中断点,但当金属接近并且也进入时,却无法得到任何中断 While (1)循环。

    我正在发送我使用的代码。

    即将推出Plzz帮助

    #include "msp430xw42x.h"
    
    /*** functions from file "LCD.s43"***/
    void InitScanIF(void);
    //void InitLCD(void);
    //void DisplayWord(无符号int数据);
    
    /***用于简单单个传感器系统的处理状态机***/
    const unsigned char PSM[]={
    0x00, //状态0
    0x00, //***未使用
    0x00, //***未使用
    0x03, //状态3 -计数器被触发
    0x00, //状态4.
    0x00, //***未使用
    0x00, //***未使用
    0x01, //第7国
    0x00, //***未使用
    0x00, //***未使用
    0x00, //***未使用
    0x00, //***未使用
    0x00, //***未使用
    0x00, //***未使用
    0x00, //***未使用
    0x00, //***未使用
    };
    
    unsigned int Counter;/*------------------
    
    */
    void main (void)
    {
    WDTCTL = WDTPW + WDTHOLD; //禁用看门狗
    FLL_CTL0 |= XCAP10PF; //配置加载上限
    //InitLCD();
    InitScanIF(); //初始化ScanIf模块
    
    P1OUT = 0x00;
    P1DIR = 0xFF;
    P2DIR = 0x7F;
    P3DIR = 0xFF; //未使用的引脚端接
    P4DIR = 0xFF;
    P5DIR = 0xFF;
    P6DIR = 0xFF;
    
    Counter=0;
    
    
    _EINT();
    while (1)
    {
    IF (SIFCTL3和SIF0OUT)
    P1OUT |= 0x80;
    否则
    P1OUT &=~0x80;
    };
    }/*--------------------------------------------------
    
    */
    void InitScanIF(void)
    { int I;
    
    P6SEL |= 0x03;
    //初始化定时状态机器
    SIFFSM0 = 0x0000;// DAC=off,CA=off,1xSIFFCLK
    SIFFSM1 = 0x002C;// DAC=off,CA=off,1xSIFFCLK,激励
    SIFFSM2 = 0xSIFF3,ACSM3
    = 0xIFF; DAC=034; DAC=OFF // DAC=ON,CA=ON,2xSIFCLK,DAC的设置和比较
    器SIFTSM4 = 0x3174;// DAC=ON,CA=ON,7xSIFCLK,测量
    SIFTSM5 = 0x0220;// stop
    
    // DAC初始化数字控制值
    SIFDACR0 = 0x0330;//请注意,本示例中未使用滞后!!!
    SIFDACR1 = 0x0330;
    
    //初始化扫描接口控制寄存器
    SIFCTL2 = 0x0140;// DAC和比较器由TSM打开,
    //打开SIFVCCEx
    (i=0;i<=857;i++);//等待回路。 SIFVCCEx必须满足
    SIFCTL3 = 0x0100;//为S1和S2选择SIF0OUT (S1和S2为输入)
    //处理状态机的信号)
    // SIIFG3的SIFCNT1计数
    SIFCTL4 = 0x13F0;// SIFNT2 disabled,SIFCNT1 UP Enabled,SIFCLK/450
    SIFCTL5 = 0x0045;// SIFCLK由TSM打开,SIFCLK NOM Freq = 1MHz
    Unsigned SIFPSMV =(IFint)&CLINT;// PSM的偏移地址位置
    S1001 SCTL1=传真/}-->启用-----
    
    
    */
    
    #pragma vector=SCANIF_vector
    __interrupt void ISR_ScanIF(void)
    {
    SIFCTL1 &=~0x0020;//重置中断标志
    __NO_OPERATION();
    } 

    此致,

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

    您好Hari,

    将来附加代码时,请在主题中单击"回复"后单击"插入代码,附加文件及其他..."链接,然后单击"插入代码"图标粘贴您的代码。 它有助于提高可读性,这可能会吸引更多的社会反应。 我已经在上面设置了您的代码的格式。

    之前,您提到您已将 P6SEL ||= 0x03更改为 P6SEL ||= 0x01。 因为这里连接了两个传感器,所以我建议您使用 P6SEL |= 0x03 (参见下面的注释)。

    此外,您是否尝试使用两个传感器配置的示例代码或尝试移除另一个LC传感器?

    接下来,您是否可以将while ()环路中的GPIO端口和引脚更改为连接到测试点或连接器的端口和引脚,并查看其是否切换?

    此致,

    詹姆斯

    MSP客户应用程序

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

    此外,您可能需要检查和调整DAC级别。 请参阅3.3 和4.3 部分。

    此致,

    詹姆斯

    MSP客户应用程序

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,James:
    我已将P6SEL || 0x03更改为P6SEL || 0x01 (因为我目前只使用单个传感器),并且我已将DAC SIFDACR0 = 0x0330和SIFDACR1 = 0x0330更改为DAC之一;当我将其中一个DAC更改为0x0200时,它将持续中断,而不使用任何金属。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,

    您是否阅读了第4.1 章节并了解了连接两个传感器时端口选择的重要性? 否则,我建议移除另一个未使用的传感器。

    此致,

    詹姆斯

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

    您好,  

    我读取了4.1 ,但我只在PCB中使用单个传感器(即6.0)。其它传感器不存在。因此我更换 了P6SEL |= 0x03至P6SEL |= 0x01。

    代码如下所示

    //此程序按"原样"提供。 TI不作
    任何明示,暗示或法定的担保或//陈述,
    //包括对适销性,特定
    用途的适用性//,病毒的缺乏,
    响应的准确性或//完整性,结果和疏忽的任何暗示担保。
    // TI不对任何
    第三方的所有权,安静享受,安静//拥有和不侵权提供任何担保
    //与程序或
    //您使用程序相关的知识产权。
    ////
    在任何情况下,TI都不对任何特殊的,偶然的,
    //后果性的或间接的损害负责, 无论出于
    何种责任理论,也无论TI是否已被告知
    此类损害的可能性,此类损害可能以任何方式产生于
    本协议,程序或您对程序的使用。
    //排除的损害包括但不限于
    //移除或重新安装的成本,计算机时间,人工成本,
    商誉损失//,利润损失,储蓄损失,
    //使用损失或业务中断。 在任何情况
    
    
    下,TI //根据本协议或由//您使用本计划而产生的累计责任都不会超过500美元//(500美元)。
    ////
    除非另有说明,
    否则由德州仪器(TI)编写并拥有版权的程序将作为“免费软件”分发。 您只能
    在TI的本程序版权下使用和修改
    //本程序,而不需任何费用或限制。 您可以
    //向第三方分发,前提是您将
    本许可证的//副本转让给第三方,并且第三方
    //通过首次使用本程序而同意这些条款。 您
    //必须在
    程序的每个副本或部分副本上复制版权声明和//所有权的任何其他图例。
    ////
    您承认并同意,本程序包含
    //版权材料,商业秘密和其它TI专有
    //信息,并受版权法,
    //国际版权条约,商业秘密法以及
    //其它知识产权法的保护。 为了保护TI
    在程序中的//权利,您同意不对
    
    程序的任何目标代码//版本进行反编译,反向//工程,反汇编或以其他方式转换为可读形式。 您同意
    //在任何情况下都不会更改,删除或销毁
    本程序中包含的任何//版权声明。 TI保留
    本许可中未明确授予的所有//权利。 除
    //此处特别规定外
    ,本协议//中的任何内容均不应被解释为通过暗示,禁止反言
    ,//或其他方式授予您任何
    // TI专利,版权或商业机密下的任何许可或其他权利。
    ////
    您不得在非TI器件中使用本程序。
    //*************************************************************************************************
    //*
    MSP430FW427 */*
    简单1传感器演示。 如果线圈在金属*//*上方
    (LED熄灭),或者coild在金属上方(LED亮起),那么WFP 1.7 上的LED将显示。 在液晶屏*/*
    上显示SIFCNT值。 */*
    Texas Instruments Deutschland GmbH */
    /* 2003年11月,Christian Hernitschcheck*/
    /************************************************************************************************* /
    #include "msp430xw42x.h"
    
    /*** functions from file "LCD.s43"***/
    void InitScanIF(void);
    //void InitLCD(void);
    //void DisplayWord(无符号int数据);
    
    /***用于一个简单传感器系统
    的处理状态机PSM/ const unsigned char[]={
    0x00, //状态0
    0x00, //***未使用
    0x00, //***未使用
    0x03, //状态3 -计数器被触发
    0x00, //状态4.
    0x00, //***未使用
    0x00, //***未使用
    0x01, //第7国
    0x00, //***未使用
    0x00, //***未使用
    0x00, //***未使用
    0x00, //***未使用
    0x00, //***未使用
    0x00, //***未使用
    0x00, //***未使用
    0x00, //***未使用
    };//unsigned
    
    int Counter;/*----------------------------------
    
    */
    void main (void)
    {
    WDTCTL = WDTPW + WDTHOLD; //禁用看门狗
    FLL_CTL0 |= XCAP10PF; //配置加载上限
    //InitLCD();
    InitScanIF(); //初始化ScanIf模块
    
    P1OUT = 0x00;
    P1DIR = 0xFF;
    P2DIR = 0x7F;
    P3DIR = 0xFF; //未使用的引脚端接
    P4DIR = 0xFF;
    P5DIR = 0xFF;
    P6DIR = 0xFE;
    
    //Counter=0;
    // DisplayWord (0x0000);
    
    _EINT();
    while (1)
    {
    IF (SIFCTL3和SIF0OUT)
    P6OUT |= 0x10;
    否则
    P6OUT &=~0x10;
    };
    }/*--------------------------------------------------
    
    */
    void InitScanIF(void)
    { int I;
    
    P6SEL |= 0x01;//
    初始化计时状态机器
    SIFFSM0 = 0x0000;// DAC=off,CA=off,1xSIFFCLK
    SIFFSM1 = 0x002C;// DAC=off,CA=off,1xSIFFCLK,激励
    SIFFSM2 = 0xSIFF3,ACSM3
    = 0xIFF; DAC=034; DAC=OFF // DAC=ON,CA=ON,2xSIFCLK,DAC的设置和比较
    器SIFTSM4 = 0x3174;// DAC=ON,CA=ON,7xSIFCLK,测量
    SIFTSM5 = 0x0220;// stop
    
    // DAC初始化数字控制值
    SIFDACR0 = 0x0330;//请注意,本示例中未使用滞后!!!
    SIFDACR1 = 0x0330;
    
    //初始化扫描接口控制寄存器
    SIFCTL2 = 0x0140;// DAC和比较器由TSM打开,
    //打开SIFVCCEx
    (i=0;i<=857;i++);//等待回路。 SIFVCCEx必须满足
    SIFCTL3 = 0x0100;//为S1和S2选择SIF0OUT (S1和S2为输入)
    //处理状态机的信号)
    // SIIFG3的SIFCNT1计数
    SIFCTL4 = 0x13F0;// SIFNT2 disabled,SIFCNT1 UP Enabled,SIFCLK/450
    SIFCTL5 = 0x0045;// SIFCLK由TSM打开,SIFCLK NOM Freq = 1MHz
    Unsigned SIFPSMV =(IFint)&CLINT;// PSM的偏移地址位置
    S1001 SCTL1=传真/}-->启用-----
    
    
    */
    
    #pragma vector=SCANIF_vector
    __interrupt void ISR_ScanIF(void)
    {
    SIFCTL1 &=~0x0020;//重置中断标志
    //DisplayWord(SIFCNT);//显示SIFCNT值
    }
    

    此致,谢谢

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

    听起来您需要调整硬件的DAC级别。 此外,您是否测量过SIFCH0上的信号并将其与图15中的波形进行比较(附在先前的POST中)?

    此致,

    詹姆斯

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

    您好,先生,

    我在SIFCH0检查了波形,它与图中所示的匹配,而且当我放置金属时,波形也被压缩,但它不会在代码中产生任何中断。

    此致,谢谢

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

    您好,

    我怀疑中断未触发的原因是如何设置SIFCTL3。 这里,它设置为0x0100,这意味着SIFFINT1必须等于4,然后才能设置SIIFG3。 如果您将金属放置在附近,则SIFCNT1可能仅达到1。 请参阅 《用户指南》中的图32-13。

    是否可以尝试将SIFCTL3更改为0x0000? 这应该可以使SIIFG3更频繁地进行设置。

    此致,

    詹姆斯

    MSP客户应用程序