本帖最后由 林堪堪 于 2022-3-28 20:15 编辑
1.1 案例 DAC输出
1.1.1 简介DAC(数模转换器)是一个将数字信号转换为模拟输出信号的外设,AT32F437拥有2个DAC,两个DAC相互独立,可以独立进行数模转换,也可以双DAC同时触发进行转换。DAC采用8位或者12位数字输入,产生0至参考电压之间的模拟输出。输入参考电压VREF+可以使转换操作更加精确。 AT32F437 DAC主要具有以下特性: ― 数字部分可以配置为8位或者12位模式 ― 支持单/双DAC的左对齐或者右对齐 ― 支持参考电压VREF+ ― 支持DMA ― 支持噪声波/三角波产生 ― 双DAC或者单个DAC1/DAC2独立转换 ― 每个DAC1/DAC2支持DMA模式 ― 软件触发或者外部触发转换
由于AT32-SUFR板DAC电路连接到了可调电阻,使用时需要先将跳线帽JP6断开。
1.1.2 资源准备1) 硬件环境: 对应产品型号的AT-SURF-F437 Board 2)软件环境: AT32F435_437_Firmware_Library_V2.x.x\project\at_sufr_f437\examples\dac 1.1.3 硬件设计本案例使用的硬件资源有TFTLCD液晶显示屏、DAC外设,对应的引脚如下:
对应的电路原理如下:
1.1.4 软件设计1) DAC测试 n 初始化DAC n 每过300ms增加0.1V输出,将输出电压显示在LCD上 2) 代码介绍 -- main函数代码描述 int main(void) { uint16_t voltage = 0;
/* 初始化系统时钟 */ system_clock_config();
/* 初始化中断优先级分组 */ nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);
/* 初始化延时函数 */ delay_init();
/* 初始化LCD */ lcd_init(LCD_DISPLAY_VERTICAL);
/* DAC初始化 */ dac_init();
/* 显示信息*/ lcd_string_show(10, 20, 200, 24, 24, (uint8_t *)"DAC Test");
while(1) { /* 每一次输出增加0.1V */ voltage += 100;
if(voltage > 3300) { voltage = 0; }
/* 显示标题 */ lcd_string_show(10, 60, 310, 24, 24, (uint8_t *)"Output Voltage:");
/* 显示输出电压 */ lcd_float_num_show(200, 60, 310, 24, 24, voltage / 1000.0, 1);
/* DAC输出设置 */ dac_output_voltage_set(voltage);
delay_ms(300); } } |
-- void dac_init(void)函数代码描述 /** * @param none. * @retval none. */ void dac_init(void) |
1.1.5 下载验证1) 每过300ms增加0.1V输出,LCD上显示输出电压 2) 用万用表测量PA5引脚电压,可以看到测量出的电压和LCD上显示的输出电压相对应
|