STM32
直播中

龙献益

7年用户 947经验值
私信 关注
[问答]

如何采用STM32F103指南者DAC输出正弦波?

什么是DAC?
如何采用STM32F103指南者DAC输出正弦波?

回帖(1)

张玲

2021-11-19 09:50:37
一、DAC简介

数模转换器,又称D/A转换器,简称DAC,它是把数字量转变成模拟的器件。D/A转换器基本上由4个部分组成,即权电阻网络、运算放大器、基准电源和模拟开关。模数转换器中一般都要用到数模转换器,模数转换器即A/D转换器,简称ADC,它是把连续的模拟信号转变为离散的数字信号的器件。
采用于百度百科.
二、输出一个周期2khz的正弦波

本文示例程序采用于野火的STM32F103指南者DAC输出正弦波的示例程序
1、修改周期计算

我们可以通过工程里的正弦波点数和定时器配置生成特定频率的正弦波,这里我们需要输出一个周期为2kHz的正弦波,通过计算公式,我们可以得到,一共需要3600个采样点










打开修改为:

%用于产生正弦数据表,输出到文件dac_sinWave.c 文件中,复制到c语言数组即可


n = 2*pi/3600 : 2*pi/3600 : 2*pi      %分成3600等份


a = sin(n)+1;                     %求取sin函数值并向上平移一个单位,消除负数值
a = a * 3.3/2;                    %调整幅值,使范围限制为0~3.3   
r = a* (2.^12) /3.3               %求取dac数值,12位dac LSB = 3.3/2.^12
r = uint16(r);                     %把double型数据转化成16位整型数据


for i = 1:32                        
if r(i) > 4095                      %限制数据最大不超过4095
    r(i) = 4095
end
end


dlmwrite('dac_sinWave.c',r);      %把数据写入到文件,方便添加到stm32工程中
plot(n,r,'.')                     %把这些点画出来
打开MATLAB运行此程序,就会将3600个点生成到这个文件。





2、修改keil程序

进入工程后,我们需要找到存放数据的数组,将我们之前取到的3600个采样点,放进去





修改main

int main(void)
{
                        /*DAC初始化*/
         while(1)
                {       
                        DAC_Mode_Init();


}
            
}
2、硬件连接

指南者开发板DAC输出通道为PA4和PA5,所以我们可以使用这两个引脚来观测输出波形





注意: PA5 引脚连接到 FLASH 芯片的 CLK 引脚中,这可能会干扰 DAC 实验输出的电压信 号,导致得不到正确的波形。所以DAC 和 SPI-FLASH 不能同时使用。
3、效果展示











以听到滴滴滴的声音,因为频率太小,所以蜂鸣器发生可能听不清,只有很小的声音
三、将一段数字音频歌曲数据转换为模拟音频波形输出

1、音频剪辑

打开音频剪辑器,选着片段建议时长仅仅5~10秒





设置采样8khz,量化16bit,单通道





2、转码






3、修改keil工程文件






硬件连线与前面一样。
4、效果展示



举报

更多回帖

发帖
×
20
完善资料,
赚取积分