[蓝桥杯国赛]AD/DA

序言

按照时序图配置即可及说明配置即可


AD操作代码
u8 read_adc(u8 add)
{
	u8 temp;
	IIC_Start();
	IIC_SendByte(0x90);
	IIC_WaitAck();
	IIC_SendByte(add);
	IIC_WaitAck();
	
	IIC_Start();
	IIC_SendByte(0x91);
	IIC_WaitAck();
	temp=IIC_RecByte();
	IIC_WaitAck();
	
	IIC_Stop();
	return temp;
}
DA操作代码

模拟输出量Vout= VREF/255*dat; (VREF为参考电压mv)

void adc_set(uint8 dat)
{
	IIC_Start(); 
	IIC_SendByte(0x90); // 地址+写
	IIC_WaitAck();
	IIC_SendByte(0x40);// DAC输出模式
	IIC_WaitAck();
	
	IIC_SendByte(dat);  //DAC写入数据
	IIC_WaitAck();
	IIC_Stop();
}

<think>嗯,用户想了解蓝桥杯单片机AD/DA转换的相关知识、教程和实例。首先,我需要回忆蓝桥杯常用的单片机型号,比如STC15系列,特别是STC15F2K60S2,这个型号在竞中经常出现。AD/DA转换是单片机应用中的一个重要部分,涉及模拟信号与数字信号的转换。 接下来,要分清楚ADDA的基本概念。AD转换是把模拟信号(如电压)转换为数字量,而DA则是反过来。蓝桥杯的题目可能会涉及到具体的电路连接、寄存器配置以及编程实现。需要确定用户是否需要基础理论,还是更偏向于实际操作的代码示例。 然后,考虑AD/DA转换在竞中的常见应用场景,比如温度测量、光强检测、波形生成等。这些应用通常需要结合传感器和单片机的外设。用户可能需要具体的实例代码,包括初始化配置、数据读取和处理的步骤。 另外,硬件电路部分也很重要。比如,AD转换可能需要连接电位器或光敏电阻,DA转换可能需要连接运放电路来生成模拟电压。需要说明如何连接这些硬件,并确保电路设计正确,避免短路或信号干扰。 寄存器配置是关键步骤。对于STC15系列,AD转换涉及到的寄存器包括ADC_CONTR、ADC_RES和ADC_RESL,需要设置通道选择、转换速度、启动转换等位。DA转换可能使用PWM模拟或者专用的DA芯片,比如使用PCA模块生成PWM波,再通过滤波电路得到平滑的电压。 可能还需要提到一些常见问题,比如转换精度、参考电压的选择、滤波处理的方法,以及如何通过软件校准提高测量精度。此外,代码示例中的关键点,如延时等待转换完成、数据拼接,都需要详细说明,避免用户在实际操作中出现错误。 最后,生成相关问题时要覆盖AD/DA的基本原理、编程步骤、硬件连接、性能优化和应用实例,这样用户可以从多个角度深入理解。需要确保回答结构清晰,分点说明,并引用相关的知识点,比如寄存器配置参考蓝桥杯官方文档或教程。</think># 蓝桥杯单片机AD/DA转换专题解析 ## 一、AD/DA基础概念 1. **AD转换原理** 将模拟信号(如电压)转换为数字量,公式:$$D = \frac{V_{in}}{V_{ref}} \times 2^n$$ 其中$V_{ref}$为参考电压,$n$为ADC位数(蓝桥杯常用12位ADC) 2. **DA转换原理** 将数字量转换为模拟电压,公式:$$V_{out} = \frac{D}{2^n} \times V_{ref}$$ 蓝桥杯常用PWM模拟DA输出[^2] ## 二、硬件电路设计要点 1. **AD转换电路** - 使用P1口连接电位器/光敏电阻 - 参考电压选择:$V_{ref}=5V$(STC15系列内置) - 输入阻抗匹配:需加滤波电容(典型值0.1μF) 2. **DA输出电路** ```circuit PWM输出 → RC滤波 → 运算放大器 → 电压输出 ``` ## 三、STC15F2K60S2编程实现 ### AD转换示例代码 ```c #include <stc15.h> uint16_t ADC_Read(uchar channel) { P1ASF = 1 << channel; // 设置模拟输入通道 ADC_RES = 0; ADC_RESL = 0; ADC_CONTR = 0x80 | channel; // 使能ADC+选择通道 _nop_(); _nop_(); // 等待稳定 ADC_CONTR |= 0x08; // 启动转换 while (!(ADC_CONTR & 0x10));// 等待完成 return (ADC_RES << 8) | ADC_RESL; } ``` ### DA输出实现(PWM模拟) ```c void PWM_Init() { P_SW2 |= 0x80; // 使能访问XSFR PWMCFG = 0x00; // 配置为普通PWM模式 PWMCKS = 0x00; // 时钟选择 PWMCH = 0x00; // 周期设置高字节 PWMCL = 0xFF; // 周期设置低字节 PWMCR |= 0x80; // 使能PWM输出 } ``` ## 四、典型应用场景 1. **温度测量系统** - 使用NTC热敏电阻 - 采集公式:$$R_t = \frac{V_{adc} \times R_{ref}}{V_{ref} - V_{adc}}$$ 2. **波形发生器** - 通过DA输出正弦波/方波 - 采用查表法生成波形数据 ## 五、竞技巧 1. **精度提升方法** - 软件滤波(滑动平均/中值滤波) - 参考电压校准 - 温度补偿(对高精度测量) 2. **常见问题排查** - 检查P1ASF寄存器配置 - 验证ADC时钟分频设置 - 确保PWM输出引脚配置正确 [^1]: 参考蓝桥杯官方训练教程第5章 [^2]: STC15系列单片机数据手册PWM章节
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值