OpenEdv-开源电子网

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

请问DAC双通道该如何设置,用库函数

[复制链接]

4

主题

18

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
216
金钱
216
注册时间
2015-3-23
在线时间
68 小时
发表于 2015-9-22 16:46:26 | 显示全部楼层 |阅读模式
5金钱
我照着例程void Dac1_Init(void)给dac.c里增加了一个void Dac2_Init(void)
头文件啦,主函数里该修改的都修改了
然后想试一下双通道的PA4输出正常,但是PA5怎么也没反应
所以想问下,是不是开启双通道还需要设置别的什么
因为一直用的固件库,所以寄存器没怎么研究
那本固件库使用手册里也没有DAC的章节
论坛里也搜不到双通道的帖子
所以希望有大神能拯救我啊
谢谢啦

最佳答案

查看完整内容[请看2#楼]

DAC_SetChannel1Data(DAC_Align_12b_R, 0);  //12位右对齐数据格式设置DAC值 上面初始化一样,加个PA5就行,然后这句话改成DAC_SetChannel2Data(DAC_Align_12b_R, X);X是要输出的值,就可以2通道同时输出了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

154

主题

289

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1067
金钱
1067
注册时间
2015-4-13
在线时间
189 小时
发表于 2015-9-22 16:46:27 | 显示全部楼层
DAC_SetChannel1Data(DAC_Align_12b_R, 0);  //12位右对齐数据格式设置DAC值
上面初始化一样,加个PA5就行,然后这句话改成DAC_SetChannel2Data(DAC_Align_12b_R, X);X是要输出的值,就可以2通道同时输出了
回复

使用道具 举报

4

主题

18

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
216
金钱
216
注册时间
2015-3-23
在线时间
68 小时
 楼主| 发表于 2015-9-22 18:35:35 | 显示全部楼层
莫名其妙的双通道输出又正常了
设置还是跟单通道步奏一样
不知道什么原因……
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-9-22 21:49:43 | 显示全部楼层
PA4,PA5,分别对应DAC1和DAC2.
DAC2是不能输出到PA4的才对.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

18

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
216
金钱
216
注册时间
2015-3-23
在线时间
68 小时
 楼主| 发表于 2015-9-24 11:56:31 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
谢谢原子哥,我是用的DAC2对应的PA5,现在程序已经没有问题了,虽然我也不知道怎么又好了……
回复

使用道具 举报

2

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2015-11-9
在线时间
26 小时
发表于 2015-11-9 15:03:35 | 显示全部楼层
回复【4楼】Exiler:
---------------------------------
请问你的程序怎么写的?我的第二个通道也不行,应该怎样整?谢谢
回复

使用道具 举报

0

主题

25

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-3-6
在线时间
43 小时
发表于 2017-2-7 09:42:54 | 显示全部楼层
我想用双DAC输出2个正弦波,二者的频率和振幅完全独立,没能实现,正在研究中。
事在人为,顺势而为。
回复

使用道具 举报

0

主题

25

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-3-6
在线时间
43 小时
发表于 2017-2-7 09:44:15 | 显示全部楼层
感觉双DAC跟单独一个差别很大,设置时会有很大不同,不是简单地多弄一套就完事了。
事在人为,顺势而为。
回复

使用道具 举报

28

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
437
金钱
437
注册时间
2017-2-13
在线时间
110 小时
发表于 2017-3-22 19:02:43 | 显示全部楼层
本帖最后由 爱奔跑的IT 于 2017-3-22 19:04 编辑

楼主代码能看一下吗?我也是按照DAC1同样的设置了DAC2但是PA5的值输出不正常PA4是正常的,论坛搜了也没解决,望指教一二,卡在这找不到问题所在。谢谢
回复

使用道具 举报

28

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
437
金钱
437
注册时间
2017-2-13
在线时间
110 小时
发表于 2017-3-22 19:05:17 | 显示全部楼层
啊溜溜 发表于 2015-11-9 15:03
回复【4楼】Exiler:
---------------------------------
请问你的程序怎么写的?我的第二个通道也不行,应 ...

朋友,你的双通道输出问题解决了吗??能否指点一二
回复

使用道具 举报

28

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
437
金钱
437
注册时间
2017-2-13
在线时间
110 小时
发表于 2017-3-22 19:31:17 | 显示全部楼层
jeraw 发表于 2015-9-22 16:46
DAC_SetChannel1Data(DAC_Align_12b_R, 0);  //12位右对齐数据格式设置DAC值
上面初始化一样,加个PA ...

前辈,能帮我看一下我这样设置双通道,为什么只有通道1输出正常,通道2输出不正常

//DAC通道1配置
void Dac1_Init(void)
{  
  GPIO_InitTypeDef  GPIO_InitStructure;
        DAC_InitTypeDef DAC_InitType;
       
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
          
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

        DAC_InitType.DAC_Trigger=DAC_Trigger_None;       
        DAC_InitType.DAC_WaveGeneration=DAC_WaveGeneration_None;
        DAC_InitType.DAC_LFSRUnmask_TriangleAmplitude=DAC_LFSRUnmask_Bit0;
        DAC_InitType.DAC_OutputBuffer=DAC_OutputBuffer_Enable ;       
  DAC_Init(DAC_Channel_1,&DAC_InitType);       

        DAC_Cmd(DAC_Channel_1, ENABLE);
  
  DAC_SetChannel1Data(DAC_Align_12b_R, 0);
}
//DAC通道2配置
void Dac2_Init(void)
{  
  GPIO_InitTypeDef  GPIO_InitStructure;
        DAC_InitTypeDef DAC_InitType;
       
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
          
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

        DAC_InitType.DAC_Trigger=DAC_Trigger_None;       
        DAC_InitType.DAC_WaveGeneration=DAC_WaveGeneration_None;
        DAC_InitType.DAC_LFSRUnmask_TriangleAmplitude=DAC_LFSRUnmask_Bit0;
        DAC_InitType.DAC_OutputBuffer=DAC_OutputBuffer_Enable ;       
        DAC_Init(DAC_Channel_2,&DAC_InitType);       

        DAC_Cmd(DAC_Channel_2, ENABLE);  
  
  DAC_SetChannel2Data(DAC_Align_12b_R, 0);
}

//设置输出电压
//vol:0~3300,表示0~3.3V
void Dac1_Set_Vol(u16 vol)
{               
        double temp=vol;
        temp=temp/1000;
        temp=temp*4095/3.3;
        DAC_SetChannel1Data(DAC_Align_12b_R,temp);
}

void Dac2_Set_Vol(u16 vol)
{
        double temp=vol;
        temp=temp/1000;
        temp=temp*4095/3.3;
        DAC_SetChannel2Data(DAC_Align_12b_R,temp);
}
回复

使用道具 举报

3

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
151
金钱
151
注册时间
2018-6-5
在线时间
23 小时
发表于 2018-6-9 10:14:43 | 显示全部楼层
爱奔跑的IT 发表于 2017-3-22 19:31
前辈,能帮我看一下我这样设置双通道,为什么只有通道1输出正常,通道2输出不正常

//DAC通道1配置

输出幅值吗?如果是输出固定幅值是需要调用DAC_SoftwareTriggerCmd(uint32_t DAC_Channel, FunctionalState NewState);函数的只要分别再加DAC_SoftwareTriggerCmd(DAC_Channel_1,ENABLE );和DAC_SoftwareTriggerCmd(DAC_Channel_2,ENABLE );应该就行了,试试看
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-29 06:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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