首页/外设速查/DAC
📈

DAC 数模转换

基础外设
把数字量变成模拟电压输出,用于波形生成、信号发生与音频输出。
🧩 核心原理
📈 时序 / 工作过程图
PWM 波形与占空比频率决定周期,占空比决定平均电压/有效输出PWM高电平时间 T_on周期 T = 1/频率占空比 = T_on / T × 100% · 例:50Hz 周期20ms,占空比5% = 高电平1ms(舵机中位)
⚙️ 配置 / 使用要点
  1. 使能 DAC + 引脚(PA4/PA5)为模拟输出
  2. 选择输出缓冲/非缓冲、触发源
  3. 写入 DHR 寄存器或启动 DMA 传输波形表
  4. HAL_DAC_Start 使能通道
🛠️ 项目示例
DMA 循环输出 16 点正弦波
// 16点正弦表:sin(i/16*2π)*2047+2048, i=0..15
const uint16_t sine[16] = {2048,2812,3438,3757,3757,3438,2812,2048,
                           1284,658,339,339,658,1284,2048,0};  // 示例16点
DAC_HandleTypeDef hdac;
hdac.Instance = DAC;
HAL_DAC_Init(&hdac);

DAC_ChannelConfTypeDef cfg = {0};
cfg.DAC_SampleAndHold = DAC_SAMPLEANDHOLD_DISABLE;
cfg.DAC_Trigger = DAC_TRIGGER_T6_TRGO;    // 定时器6触发
cfg.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;
HAL_DAC_ConfigChannel(&hdac, &cfg, DAC_CHANNEL_1);

HAL_DAC_Start_DMA(&hdac, DAC_CHANNEL_1, (uint32_t*)sine, 16,
                  DAC_ALIGN_12B_R);
// 触发频率决定输出波形频率:16点×10kHz = 160kHz采样率
❓ 面试高频
DAC输出电压公式?
Vout = DAC_data/2^N × Vref。12位、Vref=3.3V、写入2048 → 1.65V
怎么生成指定频率正弦波?
波表+DMA+定时器触发:采样率=触发频率,输出频率=采样率/点数
DAC输出要驱动重负载怎么办?
外部加运放电压跟随器/缓冲级,提高带载能力
✅ 自查清单 (点击勾选,本地保存)
0/0
会算DAC输出公式
理解波表+DMA+定时器生成波形
知道缓冲输出与带载
知道DAC与ADC配合场景