我使用 MSP430F2013来获取模拟输入电压。 它使用 SD16并每0.256ms 将计数值保存在 SD16MEM0中。 它在运行几个月后停止工作。 当我插入 MSP430编程器以检查 SD16值时、即使我们有电压输入、它也显示为0。 我们40%的生产都有这个模拟问题。
如何解决该问题或 此制造问题?
谢谢
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.
我使用 MSP430F2013来获取模拟输入电压。 它使用 SD16并每0.256ms 将计数值保存在 SD16MEM0中。 它在运行几个月后停止工作。 当我插入 MSP430编程器以检查 SD16值时、即使我们有电压输入、它也显示为0。 我们40%的生产都有这个模拟问题。
如何解决该问题或 此制造问题?
谢谢
SD16不再工作、SD16MEM0即使有电压输入也显示为0。 看起来它无法再读取输入
2.其他功能仍然有效
3、SD16不使用定时器。 我使用频率来触发标志
--------------------------------------------------
int SD16_init (void){
/*在端口 A0上设置 SD16_A 为1MHz*/
SD16CTL =(SD16XDIV16 + SD16REFON + SD16VMIDON+ SD16DIV4);
// SD16XDIVx=010源时钟/16.
// SD16LP=0禁用低功耗
// SD16DIVx = 00 SD16_A 时钟分频/ 1.
// SD16SSELx = 00源时钟为 MCLK
// SD16VMIDON = 0 VMID 缓冲区关闭
// SD16REFON = 1.2V 基准生成
// SD16OVIE = 0溢出中断被禁用
SD16CCTL0 =(SD16SNGL + SD16OSR_64);
// SD16UNI = 0双极模式-Vref/2 ->+Vref/2
// SD16XOSR = 0
// SD16SNGL = 1单次转换模式
// SD16OSRx = 00 256随采样率变化
// SD16LSBTOG=0 SD16LSBACC 不会在读取 SD16MEM0时切换
// SD16LSBACC = SD16MEMx 16位转换数据0:MSB 1:LSB
// SD16OVIFG =溢出中断条件
// SD16DF = 0偏移二进制
// SD16IE = 1 SD16_A 中断被使能
// SD16IFG = SD16_A 中断标志条件
// SD16SC =开始转换位
SD16AE =(SD16_A0p | SD16_A0n);
// SD16输入使能寄存器使能 SD16_A0引脚
SD16INCTL0 =(SD16INCH_0);
// SD16INTDLYx = 00第四个采样引起中断
// SD16GAINx=000 x1前置放大器增益
// SD16INCHx = 000通道 A0
返回1;
}
------------------------------------------------------
4.完全没有变化
5、我复位、但没有任何变化
6.仍然没有变化
7.也不起作用、如果我更改新的 MSP430、它起作用
额外好处: 如果我一直以1MHz 运行 SD16、它的持续时间是多久。 我是说持续时间。 如果我将频率降低到250kHz、它可以持续更长时间吗?
谢谢
Quan、您好!
Katie 目前不在办公室、因此我将尽力为您提供支持。 感谢您提供部分原理图。 最初、我感到惊讶的是、差分电压输入没有直接连接到 MSP430F2013 SD16模块的+/-引脚、但您似乎添加了一些外部器件来执行隔离(ACS)和其他功能。 我将假定这些器件正常工作。
我同意 Katie 的看法、在所有其他器件施加输入电压之前、MSP430F2013必须加电。 假设您使用3.3VDC 为 MSP430F2013供电(不幸的是、您的原理图中未显示此情况)、这很可能来自5VDC 电源轨。 因此、所有这些器件(以及可能未显示的其他器件)将首先加电、并且可能会在 VCC 等于3.3VDC 之前向 MSP430的引脚施加高于最大值的电压。 您能否在启动期间使用示波器对此进行检查? 这将解释为什么 MSP430会工作一段时间、然后停止工作、以及为什么更换器件是解决此问题的唯一方法(至少暂时)。
此外、我注意到您正在将 SD16模块配置为使用内部1.2V 基准、但您似乎也在使用外部1.2V 基准电压。 我强烈建议您使用其中一个。 如果要输出1.2V 内部基准电压,则需要启用输出缓冲器,并确保 Vref 和 AVss 之间连接470nF 电容器。 如果要使用外部基准输入、则需要禁用内部1.2V 基准电压并正确配置 P1.3/VREF。
请仔细执行这些测量、并在继续之前解决基准电压源差异。
此致、
James
MSP 客户应用
尊敬的 James:
我认为我使用内部1.2V 基准。 它由引脚 P1.3和引脚 A0生成-得到0.6V、由1.2V 和2个电阻器提供。 我还在 P1.3和 VSS 之间连接470nF (原理图中的下部)。
我也设置了使能输出缓冲器(SD16VMIDON=1)并且 MSP430F2013一直处于打开 状态、所以我确实确信 MSP430F2013在所有其他器件施加输入电压之前已加电。
我在上一个帖子中的代码是正确的、但我放置了错误的描述 (SD16VMIDON = 1 VMID 缓冲器打开)
--------------------------------------------------
int SD16_init (void){
SD16CTL =(SD16XDIV16 + SD16REFON + SD16VMIDON+ SD16DIV4);
// SD16XDIVx=010源时钟/16.
// SD16LP=0禁用低功耗
// SD16DIVx = 00 SD16_A 时钟分频/4
// SD16SSELx = 00源时钟为 MCLK
// SD16VMIDON = 1 VMID 缓冲器打开
// SD16REFON = 1.2V 基准生成
// SD16OVIE = 0溢出中断被禁用
SD16CCTL0 =(SD16SNGL + SD16OSR_64);
// SD16UNI = 0双极模式-Vref/2 ->+Vref/2
// SD16XOSR = 0
// SD16SNGL = 1单次转换模式
// SD16OSRx = 10 64随采样率变化
// SD16LSBTOG=0 SD16LSBACC 不会在读取 SD16MEM0时切换
// SD16LSBACC = SD16MEMx 16位转换数据0:MSB 1:LSB
// SD16OVIFG =溢出中断条件
// SD16DF = 0偏移二进制
// SD16IE = 1 SD16_A 中断被使能
// SD16IFG = SD16_A 中断标志条件
// SD16SC =开始转换位
SD16AE =(SD16_A0p | SD16_A0n);
// SD16输入使能寄存器使能 SD16_A0引脚
SD16INCTL0 =(SD16INCH_0);
// SD16INTDLYx = 00第四个采样引起中断
// SD16GAINx=000 x1前置放大器增益
// SD16INCHx = 000通道 A0
返回1;
}
------------------------------------------------------
您好!
由于您之前提到您的差分电压输入范围为-0.6V 和0.6V、我查看 了《MSP430x2xx 用户指南 》中的第26.2.2节、其中提到对于增益为1的1.2V 电压基准、最大满量程输入范围为+/-0.6V。 在 MSP430F2013 的数据表中查看第43页 、您可以看到、对于增益为1的情况、建议的满量程范围(FSR)为+/-0.5V (500mV)、而不是+/-0.6V。 此外、您可以看到脚注1指定"模拟输入范围不应超过 VFSR+或 VFSR-的80%"。
此外、由于您使用双极偏移二进制格式、这意味着等于-FSR 的模拟输入将导致 SD16MEM0等于所有零。 这意味着输入电压将等于零、因为0V (A0+)- 0.6V (A0-)=-0.6V。 您提到了"您有电压输入"。 您是否测量了 MSP430引脚上的电压、以确认当向前端输入施加高电压时其他外部器件实际施加了电压?
此致、
James
MSP 客户应用