历史上的今天
今天是:2025年05月28日(星期三)
2021年05月28日 | cortex_m3_STM32嵌入式学习笔记18之DAC实验
2021-05-28 来源:eefocus
STM32 的 DAC 模块(数字/模拟转换模块)是 12 位数字输入,电压输出型的 DAC。 DAC可以配置为 8 位或 12 位模式,也可以与 DMA 控制器配合使用。 DAC 工作在 12 位模式时,数据可以设置成左对齐或右对齐。 DAC 模块有 2 个输出通道,每个通道都有单独的转换器。在双 DAC 模式下, 2 个通道可以独立地进行转换,也可以同时进行转换并同步地更新 2 个通道的输出。
本节实验,我们将利用按键(或 USMART) 控制 STM32 内部 DAC1来输出电压,通过 ADC1的通道1 采集 DAC的输出电压,在 LCD 模块上面显示 ADC 获取到的电压值以及 DAC 的设定输出电压值等信息。
STM32 的 DAC 模块主要特点有:
① 2 个 DAC 转换器:每个转换器对应 1 个输出通道
② 8 位或者 12 位单调输出
③ 12 位模式下数据左对齐或者右对齐
④ 同步更新功能
⑤ 噪声波形生成
⑥ 三角波形生成
⑦ 双 DAC 通道同时或者分别转换
⑧ 每个通道都有 DMA 功能
当 DAC 的参考电压为 Vref+的时候(对 STM32F103RC 来说就是 3.3V), DAC 的输出电压是线性的从 0~Vref+, 12 位模式下 DAC 输出电压与 Vref+以及 DORx 的计算公式如下:
DACx 输出电压=Vref*( DORx/4095)
我的ADC和DAC的理解是:
ADC可以采集电压把电压转换为数字,DAC可以把数字转换为电压的形式并输出
配置步骤:
1)开启PA口时钟,设置PA4为模拟输入。
STM32F103RCT6 的 DAC 通道 1 在 PA4 上,所以,我们先要使能 PORTA 的时钟,然后设置 PA4 为模拟输入。 DAC 本身是输出,但是为什么端口要设置为模拟输入模式呢?因为一但使能 DACx 通道之后,相应的 GPIO 引脚( PA4 或者 PA5)会自动与 DAC 的模拟输出相连,设置为输入,是为了避免额外的干扰。
2)使能DAC1时钟。
3) 初始化DAC,设置DAC的工作模式。
4) 使能DAC转换通道
5) 设置DAC的输出值。
主函数。。通过按键来调节DAC输出电压的强度,WKUP增强,KEY0减弱(也可以通过USMART组件设置)
intmain(void) { u16adcnum=0; u16dacnum=0; floattem; u8key,t=0; init(); while(1) { t++; key=KEY_Scan(0); if(key==WK_UP_PRES) { if(dacnum<4000)dacnum+=200; DAC_SetChannel1Data(DAC_Align_12b_R,dacnum); } elseif(key==KEY0_PRES) { if(dacnum>200)dacnum-=200; elsedacnum=0; DAC_SetChannel1Data(DAC_Align_12b_R,dacnum); } if(t==10||key==WK_UP_PRES||key==KEY0_PRES) { adcnum=Dac1_Get_Vol();dacnum=adcnum; LCD_ShowxNum(124,150,adcnum,4,16,0);//显示DAC寄存器值 tem=(float)adcnum*(3.3/4096);//得到DAC电压值 adcnum=tem; LCD_ShowxNum(124,170,tem,1,16,0);//显示电压值整数部分 tem-=adcnum;tem*=1000; LCD_ShowxNum(140,170,tem,3,16,0X80);//显示电压值的小数部分 adcnum=Get_Adc_Average(ADC_Channel_1,10); tem=(float)adcnum*(3.3/4096); adcnum=tem; LCD_ShowxNum(124,190,tem,1,16,0); tem-=adcnum;tem*=1000; LCD_ShowxNum(140,190,tem,3,16,0X80); t=0; LED0=!LED0; } delay_ms(10); } }
最后在通过杜邦线将PA1和PA4连起来就好了。。至于为什么要连这两个口 看图
ADC1 和DAC1 分别挂在了 PA1和PA4上,所以我们想要通过ADC1采集DAC1输出的电压,就要将这两点连起来
上一篇:STM32单片机的通用定时器
史海拾趣
|
各位英雄: 本人想在PXA27x处理器下用WMMX指令对H.264编解码做优化,本人的开发环境是Visual Studio.NET 2005,在Windows CE操作系统下。 暂时没有安装任何其它的编译器,请问该怎么编译WMMX ...… 查看全部问答> |
|
1 在bsp中可以放入应用程序:SOURCES,MAKEFILE,DIRS,应用程序代码。但是在platform.bib/.reg里并没有任何该应用程序的信息,所以这个应用程序,只能被编译,但并不会被加到nk里?如果要加到nk里,就要在platform.bib里将它导入?在bsp里的应用 ...… 查看全部问答> |
|
有谁愿意转让TI EKK8962评估套件,TI LM3S9000系列开发套件,或者周立功 EasyARM8962开发板。要求物品齐全,资料齐全。请联系QQ:25159290.… 查看全部问答> |
|
【为C2000做贡献】基于TMS320F2812的USB通讯C源码(初始化) 本想收费,看在maylove美女的面子上就不收费了,我发了我两年多时间收集的资料。本来有更多的资料,可以因为系统重装,有些资料就丢失了,真可惜。 [ 本帖最后由 fxw451 于 2011-4-7 09:29 编辑 ]… 查看全部问答> |
|
手把手教你Altium Designer如何将SCH设计更新到PCB 之一 手把手教你Altium Designer如何将SCH设计更新到PCB 之一 手把手教你Altium Designer如何将SCH设计更新到PCB 之十 手把手教你Altium Designer如何将SCH设计更新到PCB 之九 手把手教你Altium Designer如何将SCH设计更新到 ...… 查看全部问答> |
|
现在使用过程中出现一个问题,在很偶然的情况下,上电后6201直接烧掉了。原来都用的好好的,怎么会突然烧掉呢?出现三四次了 大家有没有用过,碰到过这种情况没有?… 查看全部问答> |
|
救命呀各位大神!救救我的期末考试!是关于MSP430G2553的!! 只是一个很小的问题。。我们期末考试要用开发板做一个作品,我和我的组员想做电子琴。但是。。。。。我们不知道使用薄膜键盘的简易电子琴的蜂鸣器代码是什么?(其实我觉得这个问题好拗口,但是我的搭档是这样描述的,那大概就是类似的问题了)。 ...… 查看全部问答> |




