刚学习msp430f169 ,想用169的DA输出任意电压值。
可发现DAC12_0DAT 低于一定的值时,P6.6就等于0.68V(虽然还没有凑出具体是多少),想知道能DA输出的电压,能低于0.68V吗?希望知道具体操作。谢谢
#include <msp430f169.h>
#define uchar unsigned char
// 初始化DAC12通道0
void InitDAC12_0(void)
{
// 效验DAC
ADC12CTL0=REF2_5V+REFON;
DAC12_0CTL |= DAC12CALON; // 启动效验DAC
while((DAC12_0CTL & DAC12CALON) != 0){_NOP();} // 等待效验完成
// 控制寄存器设置
// 选择输入缓冲器中速中电流,输出缓冲器中速中电流,12位DAC,满电压输出为内基准,自动更新数据
DAC12_0CTL = DAC12AMP_5 + DAC12IR + DAC12LSEL_0;
DAC12_0CTL |= DAC12SREF_0;
DAC12_0CTL |= DAC12ENC; // 启动DAC模块(DAC12LSEL_0时此句可以省)
DAC12_0DAT = 0x03ff; // 初始化电压
}
//时钟
void Clock_Init()
{
uchar i;
BCSCTL1&=~XT2OFF; //打开XT2振荡器
BCSCTL2|=SELM1+SELS; //MCLK为8MHZ,SMCLK为8MHZ
do{
IFG1&=~OFIFG; //清楚振荡器错误标志
for(i=0;i<100;i++)
_NOP();
}
while((IFG1&OFIFG)!=0); //如果标志位1,则继续循环等待
IFG1&=~OFIFG;}
void main(void)
{ WDTCTL = WDTPW + WDTHOLD; ; //看门狗初始化
Clock_Init(); //时钟初始化
InitDAC12_0() ;
}
王七七:
感觉你的参考电压源设置有问题。对于12位DAC模块来说,分辨率可以达到0.024%,即1/4096,建议你先看一下输入数字量为0时,输出模拟量对0的偏移值是多少。
yu lv:
回复 王七七:
当DAC12_0DAT = 0x0000时, 输出的电压就是0.68V了
wang li3:
回复 王七七:
你好,如果MSP430F169单片机的Veref引脚接的是3.3V那么DAC12IR=0,那么DAC_0的的p6.6最大输出能大于3.3V吗?
kqian0327:
你好,
你给的DAC参考电压即为你能输出的最大DAC值,多少位的DAC决定了DAC输出的最小步长。
例如12位的DAC,3.3V的参考电压,最小步长即为3.3/4096。
根据这个道理你就可以输出你需要的电压X : )
希望对你有帮助。
user5943759:
回复 kqian0327:
我与题主遇到了同样的问题。关键问题是另DAC12_0DAT=0x0000时,p6.6输出不为0V而是0.68V。请问如何解决?谢谢!
user5939424:
回复 kqian0327:
您好,我用的板子是MSP430F5529, 请问使用内部DAC想输出模拟电压时,需要设置引脚为DAC输出复用功能吗?我看了datasheet貌似没有有DAC复用功能的引脚?
灰小子:
回复 user5939424:
楼上,您好。
msp430f5529内部没哟dac,建议选用其他带dac的msp430