实验目的: 用STM32F103的DAC功能完成以下波形输出,用示波器观察波形,并用蜂鸣器或手机耳机收听输出声音效果、感受歌曲的音质差异。
1)输出一个周期2khz的正弦波(循环)。此波形驱动作用至蜂鸣器或喇叭,会呈现一个“滴…”的单音;
2)将一段数字音频歌曲数据转换为模拟音频波形输出(循环)。
实验环境:STM32—F103-MINI开发板,串口调试助手,keil5及以上,示波器
参考资料:野火stm32mini教程38-DAC—输出正弦波 【野火®】零死角玩转STM32—F103-MINI.pdf,38章DAC—输出正弦波
一、DAC简介
数模转换器,又称D/A转换器,简称DAC,它是把数字量转变成模拟的器件。D/A转换器基本上由4个部分组成,即权电阻网络、运算放大器、基准电源和模拟开关。模数转换器中一般都要用到数模转换器,模数转换器即A/D转换器,简称ADC,它是把连续的模拟信号转变为离散的数字信号的器件。
STM32 具有片上 DAC 外设,它的分辨率可配置为 8 位或 12 位的数字输入信号,具有两个 DAC 输出通道,这两个通道互不影响,每个通道都可以使用 DMA 功能,都具有出错检测能力,可外部触发。
二、2KHz正弦波实验
1.用MATLAB计算
打开野火的教程
野火STM32F103-mini开发板资料1-程序源码_教程文档1《STM32库开发实战指南》(标准库源码)【优先学习】1-书籍配套例程-F103RCMINI38-DAC—输出正弦波
找到dac.m
将里面的代码改为
TIM_Period = 19;
%定时周期数 TIM_Prescaler = 0;
%定时时钟分频fsin = 2000;
%正弦波频率Tsysclk=1/72000000;
%系统时钟周期Ttim = Tsysclk * (TIM_Prescaler+1);
%定时时钟周期Tupdate = Ttim * (TIM_Period +1);
%定时器触发周期Tsin = 1/fsin ;
%周期point = Tsin/Tupdate
%单周期信号点数
这样就可以求出2KHz的正弦波需要多少信号点数
求出来需要1800个点。
接着打开sinWave.m,代码改为:
n = 2*pi/1800 : 2*pi/1800 : 2*pi
%分成1800等份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:1800
if r(i) 》 4095
%限制数据最大不超过4095 r(i) = 4095endend dlmwrite(‘dac_sinWave.c’,r);
%把数据写入到文件,方便添加到stm32工程中plot(n,r,‘。’)
%把这些点画出来 运行ta
2.keil编程
生成的dac_sinWave.c,将里面的内容复制到波形数据里面。
#define POINT_NUM 1800/* 波形数据 ----------------------------------------------------*/const uint16_t Sine12bit[POINT_NUM] = {} 编译并下载到开发板上。
3.示波器显示
示波器夹子接GND,笔接PA4或者PA5。
因为DAC输出正弦波例程 PA4 PA5双通道输出(板子的PA4引脚复用会影响输出电压)。
实验目的: 用STM32F103的DAC功能完成以下波形输出,用示波器观察波形,并用蜂鸣器或手机耳机收听输出声音效果、感受歌曲的音质差异。
1)输出一个周期2khz的正弦波(循环)。此波形驱动作用至蜂鸣器或喇叭,会呈现一个“滴…”的单音;
2)将一段数字音频歌曲数据转换为模拟音频波形输出(循环)。
实验环境:STM32—F103-MINI开发板,串口调试助手,keil5及以上,示波器
参考资料:野火stm32mini教程38-DAC—输出正弦波 【野火®】零死角玩转STM32—F103-MINI.pdf,38章DAC—输出正弦波
一、DAC简介
数模转换器,又称D/A转换器,简称DAC,它是把数字量转变成模拟的器件。D/A转换器基本上由4个部分组成,即权电阻网络、运算放大器、基准电源和模拟开关。模数转换器中一般都要用到数模转换器,模数转换器即A/D转换器,简称ADC,它是把连续的模拟信号转变为离散的数字信号的器件。
STM32 具有片上 DAC 外设,它的分辨率可配置为 8 位或 12 位的数字输入信号,具有两个 DAC 输出通道,这两个通道互不影响,每个通道都可以使用 DMA 功能,都具有出错检测能力,可外部触发。
二、2KHz正弦波实验
1.用MATLAB计算
打开野火的教程
野火STM32F103-mini开发板资料1-程序源码_教程文档1《STM32库开发实战指南》(标准库源码)【优先学习】1-书籍配套例程-F103RCMINI38-DAC—输出正弦波
找到dac.m
将里面的代码改为
TIM_Period = 19;
%定时周期数 TIM_Prescaler = 0;
%定时时钟分频fsin = 2000;
%正弦波频率Tsysclk=1/72000000;
%系统时钟周期Ttim = Tsysclk * (TIM_Prescaler+1);
%定时时钟周期Tupdate = Ttim * (TIM_Period +1);
%定时器触发周期Tsin = 1/fsin ;
%周期point = Tsin/Tupdate
%单周期信号点数
这样就可以求出2KHz的正弦波需要多少信号点数
求出来需要1800个点。
接着打开sinWave.m,代码改为:
n = 2*pi/1800 : 2*pi/1800 : 2*pi
%分成1800等份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:1800
if r(i) 》 4095
%限制数据最大不超过4095 r(i) = 4095endend dlmwrite(‘dac_sinWave.c’,r);
%把数据写入到文件,方便添加到stm32工程中plot(n,r,‘。’)
%把这些点画出来 运行ta
2.keil编程
生成的dac_sinWave.c,将里面的内容复制到波形数据里面。
#define POINT_NUM 1800/* 波形数据 ----------------------------------------------------*/const uint16_t Sine12bit[POINT_NUM] = {} 编译并下载到开发板上。
3.示波器显示
示波器夹子接GND,笔接PA4或者PA5。
因为DAC输出正弦波例程 PA4 PA5双通道输出(板子的PA4引脚复用会影响输出电压)。
举报