小小码字员 发表于 2012-7-28 20:37:19

MSP430写TLV5616的驱动,输出线性关系不正确,求帮助!


如题,写TLV5616DR的驱动,主体如下。
void TLV5616_SetOutput_Voltage(unsigned int nVoltage)
{
    //数据处理
    unsigned char Mode_Byte =0;
    unsigned char Msb = 0;
    unsigned char Lsb = 0;
    unsigned char i=0;
    nVoltage %= 4096;                  //屏蔽高四位
    Msb = nVoltage/256;                //高8位,数据在高8位的后四位中
    Lsb = nVoltage%256;                //低8位
    Msb = Msb << 4;                  //将数据移到高8位中的前四位
    //时序开始
    SET_SCLK;
    SET_FS;
    SET_CS;
    _NOP();
    _NOP();
    CLR_CS;
    CLR_FS;
    //模式设置
    Mode_Byte = Slow_Speed_Mode;
    for(i=0;i<4;i++)
    {
      SET_SCLK;
      if((Mode_Byte&0x80) != 0)      
      {
            SET_DIN;
      }
      else
      {
            CLR_DIN;
      }
      CLR_SCLK;
      Mode_Byte <<= 1;
    }
    for(i=0;i<4;i++)                   //先传输高四位
    {
      SET_SCLK;
      if((Msb&0x80) != 0)            //最高位为1
      {
            SET_DIN;
      }
      else
      {
            CLR_DIN;
      }
      CLR_SCLK;
      Msb <<= 1;
    }
    for(i=0;i<8;i++)
    {
      SET_SCLK;
      if((Lsb&0x80) != 0)
      {
            SET_DIN;
      }
      else
      {
            CLR_DIN;
      }
      CLR_SCLK;
      Lsb <<= 1;
    }
    //时序恢复
    SET_FS;
    SET_CS;
    SET_SCLK;
}
实际结果是这样的:用数字面板表显示。设定输入 0 对应 0.0输入 5对应 0.01 输入10 对应0.02   .。。。。
                           输入1000对应是 1.61      输入2000对应 3.21   输入3000对应 4.82 输入4000(接近最大值4095)对应的是5.01
而芯片供电电源是 VDD = 5V,REFIN接的是3.3。出现现在这样的结果找不到解决办法。

小小码字员 发表于 2012-7-29 09:06:34

本帖最后由 小小码字员 于 2012-7-29 09:09 编辑



输出电压的公式为 2* REF*CODE/0x1000      按这个公式,CODE取2000时,那么输出就达到最大了(REF)值了。怎么解释这个公式啊?

小小码字员 发表于 2012-7-29 11:50:56

自己解决了,从TLV5616输出电压公式看出,参考电压REF一定要小于或等于供电电压的一半,如供电电压选择5V,REF要小于等于2.5V.我刚开始选择的是供电电压 5V,参考电压 3.3V。结果就是 输入0~3300时,输出线性增长。但超过3300,后面全是供电电压5V.将REF改为2.5V后,正常了。

vala 发表于 2012-7-31 13:41:27

好东西,留着好好学习

小小码字员 发表于 2012-8-3 21:14:03

我写好的模块。

chenchaoting 发表于 2012-8-8 13:59:25

VREF要小,不然满足不了上式

peecehood 发表于 2012-10-8 13:43:02

本帖最后由 peecehood 于 2012-10-8 13:45 编辑

写程式最好还是看清楚规格书,这颗我也有用。
另外,MSP430不是有硬体SPI?

小小码字员 发表于 2012-10-16 00:37:27

peecehood 发表于 2012-10-8 13:43 static/image/common/back.gif
写程式最好还是看清楚规格书,这颗我也有用。
另外,MSP430不是有硬体SPI?

哦,用的是MSP430F149,这个没有SPI。是啊,要好好看手册啊!

peecehood 发表于 2012-10-17 08:07:12

本帖最后由 peecehood 于 2012-10-17 08:38 编辑

MSP430F149官方的规格书是有硬体的喔,不过没用149所以要看看如何使用。
请参考官方文件中的fet140_spi0_04.c,就是使用TLV5616。
页: [1]
查看完整版本: MSP430写TLV5616的驱动,输出线性关系不正确,求帮助!