TLV5639没有输出
部分程序如下:
/*******************************/
// 主函数
/*******************************/
int main(void)
{
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
TLV5639_Init(); //初始化TLV5639
TLV5639_WR(COMM,INTER_REF1_024_FASTMODE); //配置TLV5639工作模式:内部2.048V参考电压,快速模式
TLV5639_WR(DATA,1024); //DAC输出电压(Vout=Vref*CODE/4.096); CODE=0~4095
while(1);
}
----------------------------------------------------
/*******************************/
// TLV5639初始化
/*******************************/
void TLV5639_Init(void)
{
RCC->APB2ENR|=1<<2; //使能PORTA时钟
GPIOA->CRH&=0XFFFF0000; //PA8~PA11推挽输出,最大速度10MHz
GPIOA->CRH|=0X00001111; //PA8~PA11推挽输出,最大速度10MHz
GPIOA->CRL&=0X00000000; //PA0~PA7 推挽输出,最大速度10MHz
GPIOA->CRL|=0X11111111; //PA0~PA7 推挽输出,最大速度10MHz
RCC->APB2ENR|=1<<3; //使能PORTB时钟
GPIOB->CRH&=0X0000FFFF; //PB12~PB15推挽输出,最大速度10MHz
GPIOB->CRH|=0X11110000; //PB12~PB15推挽输出,最大速度10MHz
CS=1;
WE=1;
LOAC=1;
delay_ms(1);
}
/*******************************/
// TLV5639写数据函数
/*******************************/
void TLV5639_WR(u8 Type,u16 Dat)
{
CS=0;
delay_us(100);
REG=Type; //REG = 0 → DAC holding latch REG = 1 → control register
DATA=Dat; //DB0~DB12
WE=0;
delay_us(100);
WE=1;
delay_us(100);
LOAC=0; //LOAC active low ,used to load DAC output
delay_us(100);
CS=1;
LOAC=1;
}
-------------------------------------------
#ifndef __TLV5639_H
#define __TLV5639_H
#include "sys.h"
#define CS PBout(12)
#define WE PBout(13)
#define LOAC PBout(14)
#define REG PBout(15)
#define DATA GPIOA->ODR
#define COMM 1
#define DAT 0
//COMM模式的配置
#define INTER_REF2_048_FASTMODE 0X0009 //内部2.048v参考,快速模式
#define INTER_REF1_024_FASTMODE 0X0011 //内部1.024v参考,快速模式
#define INTER_REF2_048_SLOWMODE 0X0008 //内部2.048v参考,慢速模式
#define INTER_REF1_024_SLOWMODE 0X0010 //内部1.024v参考,慢速模式
#define EXTER_REF_FASTMODE 0X0001 //外部参考,快速模式,如果REF引脚接了外部参考电压,则外部参考模式必须被选择
#define EXTER_REF_SLOWMODE 0X0000 //外部参考,慢速模式,如果REF引脚接了外部参考电压,则外部参考模式必须被选择
#define POWER_DOWN 0X0002 //power down
void TLV5639_Init(void);
void TLV5639_WR(u8 Type,u16 Dat);
#endif
我看了芯片手册说输入电压最大 VDD-1.5V。但是我使用的是5v输入,不知道这块有没有问题。但是我调试TLV5618时,也是使用了5V输入,但是TLV5618工作正常,可能IO口电压太高对芯片有点损伤,但至少说明它还是能工作的吧。就是不知道TLV5639是不是在硬件上还有什么要求?
期待回复讨论,谢谢。
不知道你讲的“我看了芯片手册说输入电压最大 VDD-1.5V” 指什么?从datasheet看应该是reference有这个限制吧。
5V供电时,用5V的逻辑I/O口没有任何问题。
如果你用内部参考,注意去掉R5,在REF脚加个对地电容,用万用表看下参考对不对。
另外,程序大家看起来不方便,最好是把配置波形发上来,比较容易找时序的问题。
我后来看了datsheet,确实是reference才有VDD-1.5V限制。我用的是内部参考,本来就没有焊接R5和LM4040。不过还是不对,REF引脚测不到参考电压,接了103电容以后也没有(接地电容103应该没问题吧?)。至于你说的配置波形,没太理解?是指datasheet里头的时序图吗?
目前参考电压都没出来,我现在准备试试外部参考电压看看。
是的,就是这个时序图。内部参考需要配置才会输出。
估计你还是时序配置的问题,你可以先只调内部参考,把它调正常了在才信号。
最好拿个示波器对着看波形。
后来我外部接了一个LM4040-2.1做外部参考,R5接了1K电阻。用我上面程序配置,使用外部慢速模式。后来出来信号了。但是有个问题,如果我配置的数据值CODE小于2110,DAC输出电压不对。CODE小于2000,没有输出。这是为什么?