MSP430AFE253 SD24 采样 24 位模式

2019-07-17 16:11发布

本帖最后由 ar_m_cu 于 2014-1-15 22:10 编辑

程序如下:
初始化函数:
void SD24Init(void)
{
  uint16_t i = 0;
  SD24CTL = SD24REFON | SD24SSEL0 | SD24DIV_3;  // 1.2V ref, SMCLK, 8 分频
  SD24CCTL0 = (SD24SNGL | SD24GRP | /*SD24DF |*/    // 单次转换,组合转换,补码形式 ,双极性模式
               SD24LSBTOG);                     // 24位结果
  SD24CCTL1 = (SD24SNGL | SD24GRP | /*SD24DF |*/    // 单次转换,组合转换,补码形式 ,双极性模式
               SD24LSBTOG);                     // 24位结果
  SD24CCTL2 = (SD24SNGL | SD24IE | /*SD24DF |*/     // 单次转换,使能中断,补码形式 ,双极性模式
               SD24LSBTOG);                     // 24位结果
  SD24INCTL0 = SD24INCH_5;                     // (AVcc - AVss) / 11
  SD24INCTL1 = SD24INCH_6;                     // 内部温度
  SD24INCTL2 = SD24INCH_7;                     // PGA 偏移
  //SD24AE = 0x07;
  for (i = 0; i < 0x3600; i++);                 // Delay for 1.2V ref startup
  
  SD24CCTL2 |= SD24SC;                          // Set bit to start conversion
}

中断处理函数:

int32_t ConvData[3];
float    SampValue[3];

#pragma vector=SD24_VECTOR
__interrupt void SD24AISR(void)
{
      switch (SD24IV)
      {
      case 2:
        break;
      case 4:
        break;
      case 6:
        break;
      case 8:
        ConvData[0] = SD24MEM0; // 高16位
        SD24CCTL0 |= SD24LSBACC; // 激活低16位
        ConvData[1] = SD24MEM1;
        SD24CCTL1 |= SD24LSBACC;
        ConvData[2] = SD24MEM2;
        SD24CCTL2 |= SD24LSBACC;
        ConvData[0] = (ConvData[0] << 16) + SD24MEM0; // 组合得到24位结果
        SD24CCTL0 &= ~SD24LSBACC; // 恢复 SD24MEM0 存储高 16 位 ,为下次转换准备
        ConvData[1] = (ConvData[1] << 16) + SD24MEM1;
        SD24CCTL1 &= ~SD24LSBACC;
        ConvData[2] = (ConvData[2] << 16) + SD24MEM2;
        SD24CCTL2 &= ~SD24LSBACC;
        SampValue[0] = 0.6 * ConvData[0] / (4194304.0); // 计算电压 4194304 = 1 << 22
        SampValue[1] = 0.6 * ConvData[1] / (4194304.0);
        SampValue[1] = SampValue[1] * 1000 / 1.32 - 273;
        SampValue[2] = 0.6 * ConvData[2] / (4194304.0);
        break;
      }
}

3个SD24通道分别采样 芯片模拟供电电压、内部温度传感器、PAG偏置,采用24位数据模式,单次转换,
但是得到结果却是完全不对,有人知道原因吗?是不是我的程序有什么问题?求指导

QQ图片20140115172449.jpg
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
ar_m_cu
1楼-- · 2019-07-18 09:56
泪点潇湘 发表于 2014-5-30 09:41
那输入电压的范围应该是多少呢?如果我要检测的电压输入大于参考电压,我需要怎么做呢?电阻分压吗?谢谢 ...

以内部增益为1为例,输入电压范围为 ±0.6V,推荐±0.5V。如果信号电压超过这个范围,那就电阻分压吧。
泪点潇湘
2楼-- · 2019-07-18 15:16
 精彩回答 2  元偷偷看……
ar_m_cu
3楼-- · 2019-07-18 18:10
泪点潇湘 发表于 2014-5-30 12:01
我如果使用的是但单端输入,是不是最高检测的电压也是0.6V呢?
如果信号做电阻分压,为了保证信号不会损 ...

单端也是0.6.会不会损耗得问TI的技术支持了,我不清楚
泪点潇湘
4楼-- · 2019-07-18 18:37
ar_m_cu 发表于 2014-5-30 14:04
单端也是0.6.会不会损耗得问TI的技术支持了,我不清楚

谢谢~~
ar_m_cu
5楼-- · 2019-07-18 22:40
泪点潇湘 发表于 2014-5-30 14:12
谢谢~~

不客气
42142269
6楼-- · 2019-07-18 23:04
泪点潇湘 发表于 2014-5-30 12:01
我如果使用的是但单端输入,是不是最高检测的电压也是0.6V呢?
如果信号做电阻分压,为了保证信号不会损 ...

同问: 在单片机AD口前是接跟随器好 还是直接接分压电阻好  分别有什么影响

一周热门 更多>