OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7436|回复: 6

下面是STM32 DAC的配置,当数字为0时输出电压不是0而是1.8v 其他数字也不是按照数据手册上的公式

[复制链接]

5

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
123
金钱
123
注册时间
2012-11-29
在线时间
18 小时
发表于 2012-12-29 11:39:39 | 显示全部楼层 |阅读模式


int main(void)
{
...
  while (1)
  {
DAC_SetChannel1Data(DAC_Align_12b_R, 0x500);
DAC_SoftwareTriggerCmd(DAC_Channel_1,ENABLE);
Delay(0xffffee);

  }
}


void DAC_Configuration(void)
{
    DAC_InitTypeDef DAC_InitStructure;
    DAC_InitStructure.DAC_Trigger = DAC_Trigger_Software;             
    DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;   
    DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable;    
    DAC_Init(DAC_Channel_1, &DAC_InitStructure);

    DAC_DMACmd(DAC_Channel_1, DISABLE);     
    DAC_Cmd(DAC_Channel_1, ENABLE);
}
数字为0是1.8V,为4095是3.3V,但是其他输出的电压都比程序应该实现的大,0x500按公式应该是1V左右,但显示是2.3V左右。请教请教。谢谢!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-12-29 13:27:54 | 显示全部楼层
参考:

//DAC通道1输出初始化
void Dac1_Init(void)
{
RCC->APB2ENR|=1<<2;    //使能PORTA时钟   
RCC->APB1ENR|=1<<29;   //使能DAC时钟   
     
GPIOA->CRL&=0XFFF0FFFF; 
GPIOA->CRL|=0X00000000;//PA4 模拟输入    

DAC->CR|=1<<0; //使能DAC1
DAC->CR|=1<<1; //DAC1输出缓存不使能 BOFF1=1
DAC->CR|=0<<2; //不使用触发功能 TEN1=0
DAC->CR|=0<<3; //DAC TIM6 TRGO,不过要TEN1=1才行
DAC->CR|=0<<6; //不使用波形发生
DAC->CR|=0<<8; //屏蔽、幅值设置
DAC->CR|=0<<12; //DAC1 DMA不使能    

DAC->DHR12R1=0;
}
//设置通道1输出电压
//vol:0~3300,代表0~3.3V
void Dac1_Set_Vol(u16 vol)
{
float temp=vol;
temp/=1000;
temp=temp*4096/3.3;
DAC->DHR12R1=temp;
}


我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
123
金钱
123
注册时间
2012-11-29
在线时间
18 小时
 楼主| 发表于 2012-12-29 14:11:26 | 显示全部楼层
原子哥,用了你的程序,然后main里面调用了,也用了DAC_GetDataOutputValue(DAC_Channel_1)使串口显示这个电压数字量,值是正确的。但不知道为什么转换后的电压不对了,不知道是什么问题,只在1.8V-3.3V间变化,转换的也不对
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-12-29 14:25:19 | 显示全部楼层
回复【3楼】wxh1222:
---------------------------------
那你的硬件有问题了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
123
金钱
123
注册时间
2012-11-29
在线时间
18 小时
 楼主| 发表于 2012-12-29 14:33:00 | 显示全部楼层
公式是 DAC输出 = VREF x (DOR / 4095),就是vol=1000,输出电压应该是1V啊,但测出来是2.3V,我在百度知道看到有个人跟我一样的问题,他的程序是这样的
void DAC_Configurture(uint16_t Vout)
{
  DAC_InitTypeDef            DAC_InitStructure;
  GPIO_InitTypeDef           GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_4;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  /* DAC channel1 Configuration */
  DAC_InitStructure.DAC_Trigger = DAC_Trigger_None;
  DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
  DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable;
  DAC_Init(DAC_Channel_1, &DAC_InitStructure);
  DAC_Cmd(DAC_Channel_1, ENABLE);
  DAC_SoftwareTriggerCmd( DAC_Channel_1, ENABLE);
  DAC_SetChannel1Data(DAC_Align_12b_R, Vout);
  DAC_SoftwareTriggerCmd( DAC_Channel_1, ENABLE);
  }
供参考
回复 支持 反对

使用道具 举报

5

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
123
金钱
123
注册时间
2012-11-29
在线时间
18 小时
 楼主| 发表于 2012-12-29 14:35:05 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
好的,我再看看,谢谢原子哥!
回复 支持 反对

使用道具 举报

5

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
123
金钱
123
注册时间
2012-11-29
在线时间
18 小时
 楼主| 发表于 2012-12-29 16:00:24 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
确实是硬件的问题,虽然不明白怎么影响的PA4脚。O(∩_∩)O谢谢!
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-20 04:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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