STM32
直播中

刘刚

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

如何去实现定时器输出一路PWM波形的设计呢

PWM是什么?
如何去实现定时器输出一路PWM波形的设计呢?有哪些步骤?



回帖(1)

陈刚

2021-11-15 16:05:09
  一、定时器输出一路PWM波形
  1.1 PWM简介
  PWM(Pulse Width Modulation)控制——脉冲宽度调制技术,通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形(含形状和幅值)。
  对模拟信号电平进行数字编码,也就是说通过调节占空比的变化来调节信号、能量等的变化,占空比就是指在一个周期内,信号处于高电平的时间占据整个信号周期的百分比,例如方波的占空比就是50%。
  脉宽调制(PWM)基本原理:控制方式就是对逆变威廉希尔官方网站 开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。也就是在输出波形的半个周期中产生多个脉冲,使各脉冲的等值电压为正弦波形,所获得的输出平滑且低次谐波少。按一定的规则对各脉冲的宽度进行调制,即可改变逆变威廉希尔官方网站 输出电压的大小,也可改变输出频率。
  1.2 代码生成
  直接下载野火或者正点原子的代码,找到相应的PWM输出代码,再进行相关操作。
  方法一:
  野火官网慢慢找或者往期文章有链接;
  方法二:
  打开STM32cubemx,找到STM32103RB(指南者),设置芯片PWM功能,生成keil5代码(华清远见实训);
  1.3 示波器波形
  打开keil5(野火)
  第一步:先编译,否则会报错,找不到.axf文件:
  
  第二步:直接点击魔法棒(options for target),按照如图所示选中:
  
  只需要点一个,其他不要随便更改,否则容易报错。
  第三步:按照下图点击Debug:(这个已经成功了,个别地方与图不符)
  
  
  第四步:按照下图所示点击Analysis window:
  
  接着按照下图点击左上角set up添加信号:GPIOA_IDR.6
  
  输入信号GPIOA_IDR.6之后自动变成上图那个样子;
  第五步:点击运行RUN:
  
  结果如下所示:
  
  烧录到板子,连接示波器,调频之后得到如图所示的结果:
  二、DAC输出正弦波
  2.1 DAC简介
  数模转换器,又称D/A转换器,简称DAC,它是把数字量转变成模拟的器件。D/A转换器基本上由4个部分组成,即权电阻网络、运算放大器、基准电源和模拟开关。模数转换器中一般都要用到数模转换器,模数转换器即A/D转换器,简称ADC,它是把连续的模拟信号转变为离散的数字信号的器件。
  STM32具有片上DAC外设,它的分辯率可配置为8位或12位的数字输入信号,具有两个DAC输出通道,这两个通道互不影响,每个通道都可以使用DMA功能,都具有出错检测能力,可外部触发。DAC可以通过引脚输入参考电压VREF+以获得更精确的转换结果。
  DAC主要特征
  2个DAC转换器:每个转换器对应1个输出通道
  8位或者12位单调输出
  12位模式下数据左对齐或者右对齐
  同步更新功能
  噪声波形生成
  三角波形生成
  双DAC通道同时或者分别转换
  每个通道都有DMA功能
  外部触发转换
  输入参考电压VREF+
  2.2 代码生成
  下载野火或者正点原子的代码,找到相应的DAC功能,输出正弦波,在此基础上更改代码,进行相关操作。
  方法同上,这次采用野火的《38-DAC—输出正弦波》文件。
  2.3 生成正弦波
  第一步:打开keil5文件,找到bsp.dac.c文件,再找到第90行代码:(先放着不管)
  
  第二步:打开文件夹,按图所示,找到.m文件:
  
  用matlab打开修改:
  
  将32改为3600;
  点击运行,输出结果如下图所示:
  
  与此同时,dac.sinvave.c生成了3600个数据,如图所示:
  
  回到工程当中,如图所示修改:
  
  仍然将32改为3600,否则报错,之后编译,成功后烧录到板子上,连接示波器,通过调频得到结果:
  2.4 数字音频数据转换为模拟音频波形输出
  在Adobe Audtion中打开自己下载好的音乐,按照如图所示截取选段,
  右击点击选取另存为,
  选择格式为.wav格式:
  
  将保存的.wav文件在转换软件中打开:
  
  按如图所示转换:
  
  将生成的文件用.TXT形式打开:
  
  粘贴到代码中(与本博客上面的正弦波过程相同,这里不做赘述)
  
  编译烧录到板子,连接示波器。
举报

更多回帖

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