您好,
我正在使用为LC SENSE提供的示例代码,以便使用单电感器进行感应。
我正在使用SIFCH0(WFP 6.0)针作为电感器和SIFCOM的DAC输出,作为示例原理图。我相信我的硬件是完美的,但我没有得到任何中断来感应金属的电感器。 所提供的代码是否需要任何更改,请尽快执行Plzz帮助。
此致,谢谢
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.
您好,
我正在使用为LC SENSE提供的示例代码,以便使用单电感器进行感应。
我正在使用SIFCH0(WFP 6.0)针作为电感器和SIFCOM的DAC输出,作为示例原理图。我相信我的硬件是完美的,但我没有得到任何中断来感应金属的电感器。 所提供的代码是否需要任何更改,请尽快执行Plzz帮助。
此致,谢谢
您好Hari,
您是否有机会通过 MSP430扫描接口 应用手册通读旋转检测? 它有很多宝贵的信息。 另外,您使用的是哪种源代码? 您在哪里找到它?
在第3.1 .1节中,它提到在扫描接口模块的初始化过程中,必须配置所需的引脚以实现模块功能(例如,P6SEL=0x01)。 否则,数字输入会影响测量。 此外,如果未选择模块功能,当使用多个LC传感器时,其他扫描输入的阻尼将无法正常工作。 有关更多信息,请参阅第4.1 节。
此致,
詹姆斯
MSP客户应用程序
您好Hari,
您是否已将原理图与 SLAA222B图6中所示的示例原理图进行了比较? 接下来,我将参考数据表中的引脚命名图,以确保您的引脚连接(您的主板与使用源代码的主板)和引脚配置(例如 PxOUT,PxDIR,PxSEL等)正确。 如果您只是使用SIFFCH0,将P6SEL从0x03更改为0x01是有意义的。
只有LC传感器,用于VMID电压生成的旁路电容器(在SIFCOM和SIFVSS之间)和32.768 kHz参考时钟(晶体)需要连接到MSP430MCU以建立正确的扫描IF模块操作。 请确认这些问题存在且工作正常,然后再深入探讨问题。
此致,
詹姆斯
MSP客户应用程序
您好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客户应用程序
您好,
我读取了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值
}
此致,谢谢
您好,
我怀疑中断未触发的原因是如何设置SIFCTL3。 这里,它设置为0x0100,这意味着SIFFINT1必须等于4,然后才能设置SIIFG3。 如果您将金属放置在附近,则SIFCNT1可能仅达到1。 请参阅 《用户指南》中的图32-13。
是否可以尝试将SIFCTL3更改为0x0000? 这应该可以使SIIFG3更频繁地进行设置。
此致,
詹姆斯
MSP客户应用程序