这里写目录标题
一、 PWM相关概念
占空比:就是输出的PWM中,高电平保持的时间 与 该PWM的时钟周期的时间 之比
如,一个PWM的频率是1000Hz,那么它的时钟周期就是1ms,就是1000us,如果高电平出现的时间是200us,那么低电平的时间肯定是800us,那么占空比就是200:1000,也就是说PWM的占空比就是1:5。
分辨率也就是占空比最小能达到多少,如8位的PWM,理论的分辨率就是1:255(单斜率), 16位的的PWM理论就是1:65535(单斜率)
频率就是这样的,如16位的PWM,它的分辨率达到了1:65535,要达到这个分辨率,T/C就必须从0计数到65535才能达到,如果计数从0计到80之后又从0开始计到80…,那么它的分辨率最小就是1:80了,但是,它也快了,也就是说PWM的输出频率高了。
双斜率 / 单斜率
假设一个PWM从0计数到80,之后又从0计数到80… 这个就是单斜率。
假设一个PWM从0计数到80,之后是从80计数到0… 这个就是双斜率。
可见,双斜率的计数时间多了一倍,所以输出的PWM频率就慢了一半,但是分辨率却是1:(80+80) =1:160,就是提高了一倍。
假设PWM是单斜率,设定最高计数是80,我们再设定一个比较值是10,那么T/C从0计数到10时(这时计数器还是一直往上计数,直到计数到设定值80),单片机就会根据你的设定,控制某个IO口在这个时候是输出1还是输出0还是端口取反,这样,就是PWM的最基本的原理了。
PWM控制的基本原理
理论基础:
冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同。冲量指窄脉冲的面积。效果基本相同,是指环节的输出响应波形基本相同。低频段非常接近,仅在高频段略有差异。
用一系列等幅不等宽的脉冲来代替一个正弦半波,正弦半波N等分,看成N个相连的脉冲序列,宽度相等,但幅值不等;用矩形脉冲代替,等幅,不等宽,中点重合,面积(冲量)相等,宽度按正弦规律变化。SPWM波形——脉冲宽度按正弦规律变化而和正弦波等效的PWM波形。
二、用STM32F103输出一路PWM波形
从参考网址获取完整代码
(点击这里)
打开并烧录连上示波器
得到如下波形
三、DAC的介绍
1.DAC(数字/模拟转换模块)
把输入的数字编码,转换成对应的模拟电压输出。
2.ADC(模拟/数字转换模块)
把输入的模拟信号,转换成对应的数字信号。
3.DAC的特点
2个DAC转换器
8位或12位单调输出
12位模式下数据的左对齐或者右对齐
同步更新功能
噪声波形生成
三角波形生成
双DAC通道同时或者分别转换
每个通道都有DMA功能
4.DAC模块功能框图
四、输出周期2khz的正弦波
用matlab打开sinwave文件
得到取样点并复制取样点
并将取样点保存到之前路径下的dac_sinWave.c文件
将这些数据复制到工程代码中的const uint16_t Sine12bit函数中
烧录并连接示波器得到波形图
五、将一段数字音频歌曲数据转换为模拟音频波形输出
1.使用Audition截取一段喜欢的音乐
将音频转为代码
随便复制其中一些数据替换掉工程程序中的const uint16_t Sine12bit数据
烧录并调试示波器得到两种波形(我也不知道那种是正确的)