查看: 4570|回复: 3

【DAC】DAC输出问题咨询

[复制链接]

2

主题

4

帖子

90

积分

中级工程师

Rank: 2

积分
90
发表于 2021-7-27 14:38:09 | 显示全部楼层 |阅读模式
void DACInit(void)
{
    FL_GPIO_InitTypeDef         GPIO_InitStruct = {0};
    FL_DAC_InitTypeDef          DAC_InitStruct = {0} ;

    //配置引脚为模拟功能
    //DAC_OUT引脚 PC5
    GPIO_InitStruct.pin        = FL_GPIO_PIN_5;
    GPIO_InitStruct.mode       = FL_GPIO_MODE_ANALOG;
    GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
    GPIO_InitStruct.pull       = FL_DISABLE;
    GPIO_InitStruct.remapPin   = FL_DISABLE;
    GPIO_InitStruct.analogSwitch = FL_DISABLE;
    FL_GPIO_Init(GPIOC, &GPIO_InitStruct);


    //DAC寄存器设置
    DAC_InitStruct.sampleHoldMode  = FL_DISABLE;//采样保持使能配置
    DAC_InitStruct.sampleTime = 0xFF;        //采样时间
    DAC_InitStruct.holdTime = 0X0;            //保持时间
    DAC_InitStruct.triggerMode = FL_ENABLE;         //触发模式使能配置
    DAC_InitStruct.triggerSource = FL_DAC_TRGI_SOFTWARE;//触发源配置
    DAC_InitStruct.bufferMode = FL_DISABLE;             //buffer模式配置
    DAC_InitStruct.switchMode = FL_ENABLE;       //输出开关模式配置

    FL_DAC_Init(DAC, &DAC_InitStruct);

}


void DAC_SWTrigger(void)
{
    FL_DAC_Enable(DAC);
    FL_DAC_WriteData(DAC, 4095);
    FL_DAC_EnableSoftwareTrigger(DAC);
    FL_DAC_WriteData(DAC, 2047);
    FL_DAC_EnableSoftwareTrigger(DAC);
}



int main(void)
{
    MF_Clock_Init();
    MF_SystemClock_Config();
    FL_Init();
    MF_Config_Init();
    UserInit();

    DACInit();
    DAC_SWTrigger();

    while(1){}
}

在例程“DAC正常输出模式_连续”和例程“DAC正常输出模式_触发NODMA”中,初始化DAC未软件触发后使用DAC_SWTrigger()函数进行数字量写入,
写入后通过FL_DAC_EnableSoftwareTrigger(DAC);语句将SWTRIG寄存器置位,以开始数字量的转换,但是测试未能正常输出,想咨询一下原因?谢谢。

回复

使用道具 举报

155

主题

847

帖子

4665

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4665
发表于 2021-7-27 16:06:06 | 显示全部楼层
VREFP 引脚需要接 电压。进行DAC模块供电
回复

使用道具 举报

2

主题

4

帖子

90

积分

中级工程师

Rank: 2

积分
90
 楼主| 发表于 2021-7-27 20:29:30 | 显示全部楼层
顾博文 发表于 2021-7-27 16:06
VREFP 引脚需要接 电压。进行DAC模块供电

void DAC_SWTrigger(void)
{
    PMU->VREFP_CR=0X1U <<0;
    PMU->VREFP_CFGR=0X0U<<1;
    PMU->VREFP_CFGR=0X1U<<9;
    FL_DAC_Enable(DAC);
    FL_DAC_WriteData(DAC, 4095);
    FL_DAC_EnableSoftwareTrigger(DAC);
    FL_DAC_WriteData(DAC, 2047);
    FL_DAC_EnableSoftwareTrigger(DAC);
}
这样修改,启用内部基准电压源,并修改为3.0V基准电压。这边应该不是供电吧,应该是缺少基准电压源。
启用外部电压更加精确,感谢解惑。
回复

使用道具 举报

155

主题

847

帖子

4665

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4665
发表于 2021-7-28 08:57:22 | 显示全部楼层
zhuhongzhous 发表于 2021-7-27 20:29
void DAC_SWTrigger(void)
{
    PMU->VREFP_CR=0X1U

你的说法是对的, vrefp是参考源,vdda是供电。精度的话能用外部尽量用外部的吧。内部肯定没那么精准的,还有温飘啊什么的。要求高就用外部
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表