打印

stm32 的DA怎么输出不到参考电压

[复制链接]
7152|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jinjing999|  楼主 | 2011-1-6 10:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
参考电压是2.5V,数值是4095的时候,输出的电压竟然是2.0189V,输出到是挺稳定。

我现在不明白,为什么输出不到2.5V.
是那种原因?
沙发
香水城| | 2011-1-6 11:10 | 只看该作者
请关闭输出缓冲,输出缓冲不是轨到轨的。

使用特权

评论回复
板凳
IJK| | 2011-1-6 12:17 | 只看该作者
还要注意,输出buffer关掉后,DAC的带负载能力会更差

使用特权

评论回复
地板
jinjing999|  楼主 | 2011-1-6 18:11 | 只看该作者
谢谢

明天我试试

使用特权

评论回复
5
jinjing999|  楼主 | 2011-1-10 15:13 | 只看该作者
不行啊?

DAC_InitStructure.DAC_Trigger = DAC_Trigger_Software;
DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
  //DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bits8_0;
DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable;
  DAC_Init(DAC_Channel_1, &DAC_InitStructure);
关闭后出现的现象,把缓存关闭后,数据从0v和2.011两个值换。

使用特权

评论回复
6
jinjing999|  楼主 | 2011-1-10 15:37 | 只看该作者
搞定了
为什么这样行

刚好相反呢?
void dac_out_value_data(INT16U value)
{
        DAC_InitTypeDef            DAC_InitStructure;  

         DAC_InitStructure.DAC_Trigger = DAC_Trigger_Software;
           DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
           //DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bits8_0;
           DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable;//

           DAC_Init(DAC_Channel_1, &DAC_InitStructure);
         DAC_SetChannel1Data(DAC_Align_12b_R, value);
         DAC_SoftwareTriggerCmd(DAC_Channel_1, ENABLE);

         DAC_InitStructure.DAC_Trigger = DAC_Trigger_Software;
           DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
           //DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bits8_0;
           DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable;//DAC_OutputBuffer_Enable;//
           DAC_Init(DAC_Channel_1, &DAC_InitStructure);
}

使用特权

评论回复
7
negiul| | 2014-7-30 12:03 | 只看该作者
jinjing999 发表于 2011-1-10 15:37
搞定了
为什么这样行

来咨询个问题,那个DA输出固定电压,这个电压的值是在哪里设置的呀?比如说我想它输出20mv的电压,在程序中能直接设置吗?

使用特权

评论回复
8
smliang| | 2017-3-29 13:10 | 只看该作者
我也查了好久,网上都说要关闭缓冲区,我甚至怀疑过是否IO口用50MHz频率就不行或者用VET6就不行。因为以前用STM32F103RBT6用10MHzIO口频率都用在产品上批量出货了都没有问题。
最后发现是应该打开缓冲区,而且是程序上出错,应该是初始化前将结构体的每一个元素都初始化一下。
如下,第4行千万不能省。大家都会用库函数,尤其这种例程甚至出现在开发板的资料上,所以要注意。将第4行加上,并打开缓冲区就可以了,不然满电压只有2.94V左右.
        DAC_InitTypeDef DAC_InitStructure;
        DAC_InitStructure.DAC_Trigger=DAC_Trigger_Software;
        DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
        DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude=DAC_LFSRUnmask_Bit0;        // 大哥,这条不能少呀!
        DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable;        // 打开缓冲可以提高驱动能力
       
        DAC_Init(DAC_Channel_1, &DAC_InitStructure);

    至于以前为什么可以,估计是编译器的问题。第4条不加,随机数有可能导致DAC-CR控制寄存器BIT1位为1,即关闭了缓冲区,因此原本你是要打开缓冲区的就变成了关闭,所以出错了。

使用特权

评论回复
9
10299823| | 2017-3-29 21:04 | 只看该作者
最大电压不是2.5V能够到的。

使用特权

评论回复
10
10299823| | 2017-3-29 21:08 | 只看该作者
楼主使用的什么处理器?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

73

主题

363

帖子

1

粉丝