你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32F767】四.实现函数发生之基础——PWM转DA(上)

[复制链接]
he129807 发布时间:2017-8-2 10:43
PWM转DA的方案分析
(注:本人原创贴。于2017.8.2 -10:30首发于其他技术论坛)
7 u: P0 v" t" a: K8 q) b& u0 G% Y一.概述; h5 A5 D3 P, @- Q, n
   我的项目目标是基于RTX嵌入式实时系统的可视化函数发生器。这一贴单讲函数产生,这部分功能的基础——DA转换。单片机实现DA转换有很多方式,你可以使用专用DA芯片;如果为了节省成本或者节省PCB布局空间,你可以使用单片机自带DA;如果你使用的单片机没有自带DA转换功能,你可以考虑PWM转DA。本帖分析PWM转DA的实现方法,下一贴编写代码实现PWM转DA的功能。本帖对原理尽量做简短介绍,一边手打一边做相关计算,可能会有错误,请有心的大兄弟留言指出。且本人水平有限,请多包涵。4 Y% v- i$ Z* P* R0 V; H7 H

7 `7 E$ b" q. C1 N/ f二.PWM转DA的原理分析
- G9 c( Y# s4 j# k0 E5 f+ q   1.原理简述  l1 R9 P; \' i: G' R4 K
   通俗的讲,PWM波就是占空比(高电平持续时间/周期)可调的方波,它有两个重要属性:占空比和频率。而PWM波经过积分器(例如有源低通滤波器或者多阶滤波器),将其中的高频成分滤掉,得到直流分量即得到一个平滑的直流信号。
. z$ \6 w  S/ \( W+ E0 I- v   2.影响DA结果的因素- s" B$ h" L7 }
   1)PWM频率越高,经过积分器输出得到的直流信号越平滑。这点很容易证明,你拿一个1HZ的方波滤个波试试,波形肯定很感人。。。
" h0 o) g" p# f8 h2 A   2)PWM占空比调节精度越高,DA转换结果也越平滑。占空比的调节精度决定了从0电压到Von电压,你可以描多少个点(PWM转DA其实就是用离散的点去描绘模拟电压信号)。可以想象一下,占空比1%可调的话,假设描述0-3V电压逐渐变化的直流信号;占空比+1%,电压步进30mV。放大波形你可以看到小锯齿。占空比20%可调的话。。。估计可以看到阶梯。
- ?) a4 l7 Y2 A
   3)电源电压的稳定度。如果Von都文波比较大的话,肯定没法得到高精度DA了。DA的结果就是Von和占空比的乘积啊。
$ c, c7 u& G  A7 m1 P0 s7 @1 c; \   这里面有个矛盾,就是单片机频率是一定的,PWM占空比分辨率和PWM频率不可兼得。分辨率高了,PWM自然就降下来了。后面讲程序实现的时候具体分析。( `6 _- s- A) g

/ t7 p1 b5 o& d( i; e% F三.硬件电路设计2 F$ s" Y. _; S! ^. g% a, B7 C8 n8 H
   硬件的基本框图如下,这里不讲第二部分的实现,那不在我的讨论范畴(精度低就低吧,反正需要超高精度DA,你也不会选择PWM转DA是不是)。我是个做嵌入式软件的哇~~算个二阶滤波器都能要了老命 - -!这里只给两个简单电路做参考,我测试过了的。
) l7 Q% G4 z0 e0 k: @. ?( z            
# f+ h' u8 B: G5 T: F( ]9 r3 B6 f   1.使用光耦之类的器件进行隔离,并能直接提升Von电压。请忽略这个光耦,大家根据自己的PWM频率选型。
4 m$ D# \( c" T! B6 J) I             3 g# w; K1 x" C, x1 C9 J$ j

% ~6 R, u2 ]/ }$ }1 q: ^& V   2.使用运放进行放大(需要rail to rail运放),普通运放接近0与接近VCC都会失真。顺便无视这两个电路的二阶滤波器参数,我不会告诉你我算不出来用Multisim随便仿真了一下- -8 I4 Z6 L$ s) @/ D( R
             % G( X, e+ }$ `- L, O( ?- m. ^

" m, z/ u9 i: D7 Y* _' Q7 s四.程序实现分析
: K4 v4 J# g9 j1 ~, s; O9 ?   使用上述电路2(运放有2倍放大作用,电源改成6V),假设我想要产生峰峰值6V的正弦波,幅值10mV可调。下面我们从STM32F767的性能来推算函数的指标。
9 `! [+ a9 z5 o' O- S3 O   1.占空比的调节精度
1 @& p: F% G9 {   10mV/6V=0.17%。要达到赋值10mV可调,占空比必须0.17%可调。我们给TIMx_ARR寄存器赋值600的话。TIMx_CCRx寄存器赋值每增加1,占空比就变化0.17%。也可以给TIMx_ARR寄存器赋值600*x,那么TIMx_CCRx寄存器赋值每增加x,占空比就变化0.17%。但是为了PWM有尽可能高的频率,TIMx_ARR就用能满足电压幅值步进要求的最小值即600。
: V6 N# S0 P9 b7 A   这样的话,我要产生3V直流电压,只需要TIMx_CCRx寄存器赋值300。要得到5.5V,TIMx_CCRx寄存器赋值550。' `7 _/ J0 O+ M+ ?
   2.能够达到的最高频率(函数波形的频率)指标
% e: z  L& u+ y' Z& ~' n   为了满足幅值10mV可调,TIMx_ARR最小只能600了。先看一下,此时我们的PWM频率是多少。查看STM32F767的手册。由STM32F767的时钟树可以看到AHB总线、SYSCLK、TIMER时钟都能达到200MHz。那PWM频率只有200M/600=333KHz了。。。如果我们用255个离散的点去描述一个正弦波。那我们可以得到的正弦波最大频率只有333K/255=1.3KHz。不过要是用少一半的描点数量去描述一个函数波形,那么函数波形的频率可以提高一倍到2.6KHz。以STM32F767的超高性能,也只能做到这样了。所以PWM转DA的应用场合有限,大家根据自己的项目要求进行取舍。! b) [" c  g# A/ d. _3 v$ O& o
    / o% Y4 m( `, v4 u2 ]( j& {# T

. V, H3 ~( d: ~' J8 k, \4 ~  g总结:- X1 ]# g+ r3 [' n3 K. q3 W: |( i& p
   使用256个点去描述一个函数周期的波形,这个指标固定不变的话。如果要函数波形的频率可调,即可用函数频率*256得到PWM频率。那么函数波形的产生,只需要控制两个参数:修改PWM频率来改变函数波形频率;修改占空比来改变输出电压。有了上面的分析,就不为难STM32F767了,后面要实现的函数波形的指标就这么定了:正弦波、三角波、锯齿波可切换;锯齿波占空比1%可调;峰峰值6V;电压步进10mV;频率1Hz可调(这点后面再验证吧- -)。: g! s% M7 s" `6 x
赞 收藏 1 评论1 发布时间:2017-8-2 10:43

举报

1个回答
zero99 回答时间:2017-8-2 10:44:55
谢谢分享

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版