搜索
bottom↓
回复: 42

关于AVR产生正弦波的疑问[马老师请进]

[复制链接]

出0入0汤圆

发表于 2008-7-19 23:21:17 | 显示全部楼层 |阅读模式
马老师,你好。我这几天再写关于正弦波的程序,配合你的学习开发板以及你的书。
有一个疑问是:在程序demo_8_6.c中为什么取128个点,可以取256,512个点吗?如果可以,样本表又是怎么建立的呢?

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2008-7-20 12:25:53 | 显示全部楼层
作为教材,其根本的目的是让学习者掌握思想方法,而不是简单的照搬程序代码。

你的问题提的很好,我就先把它作为一个练习思考题吧,看各位的解答。

出0入4汤圆

发表于 2008-7-20 12:28:07 | 显示全部楼层
怕就怕简单照搬,没有自己的思考。

出0入0汤圆

发表于 2008-7-20 13:23:15 | 显示全部楼层
y=sin(x)
x=[-90,90];y=[-1,1]
正负值区间的波形
---------
单片机取值PWM波对应幅值【0-255】,sin幅值0-255
sin整体加1,则得到正值区间的波形
f(X)=sin(X)+1
x=[-90,90];y=[0,2]

2/256=1/128
f(X) = 128+127*sin(X);
360->2*PI
则只能分成128份[0-127]
X=2*PIx/127
f(x) =128+ 127×sin(2*PI*x/127)

出0入0汤圆

发表于 2008-7-20 13:40:33 | 显示全部楼层
3楼的回答只是一部分,“可以取256,512个点吗”没有回答。

还有我尽管使用了128点样本,但实际中并没有全部使用,考虑过吗?为什么?

出0入0汤圆

发表于 2008-7-20 14:27:26 | 显示全部楼层
-------------------------
跟风了,赶紧翻书看了完整程序x_SW作为步长取值。

1kHz使用128点则PWM的输出频率为128kHz
程序取得16kHz,输出一个电压点。电压输出PWM按128点采样得到的。
T0的溢出中断事件TIM0_OVF
128kHz->0.0078125ms->7.8125us
16kHZ->0.125ms

如果采用127kHz
每7.8125us一次中断调用
且系统时钟4mhz,一个nop只有0.25us,每次中断间隔只能执行31.25条nop语句,显然是不适用的。

所以,在分辨率与程序执行时间兼顾的情况下。使用了16kHz。
则需x_SW取8,则对应的是16分的表。128点样本每隔8点就为16分的样点。
----------
样本点是可以取,一个超集和子集的关系
128:
1 T0寄存器是8位的
2 在4Mhz情况下不好做了!

表达能力有限。。
马老师来个详细说明吧。

出0入0汤圆

发表于 2008-7-20 14:43:51 | 显示全部楼层
别看这个例子简单,但如何采用PWM方式产生正弦波,如何正确设计,则需要认真仔细学习和思考的,涉及到很多的基础知识。

还是继续讨论,看看那位能真正认真和全面的进行归纳和总结,给出比较好的回答。

这样的技术讨论,可以与AVR本身无关,因为32位的DD上也有PWM,也可能需要由PWM产生正弦波的。教材篇幅有限,不能深入,在这里可以深入的。

出0入0汤圆

发表于 2008-7-24 20:25:20 | 显示全部楼层
学习一下,期待下文

出0入0汤圆

发表于 2008-7-24 22:04:24 | 显示全部楼层
可能没有下文。

为何.......?更多的人希望送饭入口。知道的人。。。?!

悲哀的心情。
90%的帖子是希望要程序,而不是真正要去理解透和掌握。凡是希望大家讨论的东西,基本是虎头蛇尾。

出0入0汤圆

发表于 2008-7-26 16:29:14 | 显示全部楼层
关注,我认为mljda 说出了主要原因。256、512也可以,只要足够细分就行了,关键是有没有必要分得这么细。

出0入0汤圆

发表于 2008-7-26 16:30:56 | 显示全部楼层
再就是时间上是否来得及。

出0入0汤圆

发表于 2008-7-26 17:06:45 | 显示全部楼层
样本表可以用PC计算啥,变个PC程序,输入需要的参数,生成之后,直接Copy到AVR程序里面,个人理解,随便拍,当然,PWM正弦波形讲究对称,所以,在180度闭区间内,应该要有奇数个点

出0入0汤圆

发表于 2008-7-26 17:16:12 | 显示全部楼层
还有,machao同志,你是老师啥?传道授业解惑,为师之道!在一定启发的基础上,你就不要继续扭捏了啥,否则就。。。。。。有故作清高、装神弄鬼:P的嫌疑,反正就是不好的说法了。

还有,关于你的大家都是喜欢源码的说法,我是这样理解的:大家都是手艺人,靠解决问题吃饭,迅速逼近目标为第一要务,至于是不是理解了,那是有时间,有精力的时候干的事情,生吞活剥我看都是逼不得已。如果不相信,就出来实地考察,看看_中国的老板们是怎么对待技术工人(还有种说法叫工程师)的。毕竟,企业不是大学,不是研究所,赚钱为第一要务,国家压榨市场,市场压榨老板,老板压榨员工,员工呢,只好到网上来压榨一下了machao了,哈哈。

出0入0汤圆

发表于 2008-7-26 21:35:38 | 显示全部楼层
to thomasdu:

还好,我不拿你的工资,所以可以不受你的“压榨”,至于故作清高、装神弄鬼等嫌疑也不要紧,不会影响我的收入的。

出0入0汤圆

发表于 2008-7-28 18:46:37 | 显示全部楼层
machao,早晓得你要这样回复的话,我一定不这样写回帖,得罪一个大牛,肠子都悔青了!

请各位有求于machao解惑的坛友原谅我,我的回帖严重影响了machao的心情,不再讲课了,我有罪,我悔过!

在此顺祝machao的收入节节高升!

出0入0汤圆

发表于 2008-7-28 21:32:29 | 显示全部楼层
对于这个问题,我不知道马老师希望讨论的有哪些方面。根据我的理解,pwm输出正弦波的原理为:

这是一个采用了DDS(直接频率合成)技术的信号源,其中PWM加上rc滤波作为一个DA来使用。
DDS技术的基本思路是:把信号波形存储起来,再按照等间隔(T)的方式取出来,而且一个周期的波形理论上只需要取2个点就可以了。
取出来的>2点经过DA滤波平滑后,得到的信号就是存储的波形,信号的频率与T有关,在PWM频率远大于信号频率时,可以认为PWM频率与输出信号频率无关。

先看看一个信号传输系统:


信号1 ---> 等间隔采样 ---> 量化编码 ---> 理想数字信道 --->  DA转换 ---> 平滑滤波 ---> 信号2


根据采样定理,理论上等间隔采样频率是信号1最高频率2倍以上,就可以从采样结果中不失真的还原出信号1来,
而且信号2就是这个信号。如果信号1是正弦波,那么信号2也是正弦波;三角波,方波等也可。

DDS技术把前面采样等过程去掉,取而代之的是数学计算,对正弦波的一个周期计算128个或256、512、100个点出来,
吧计算得到的结果以表格形式存储在一个存储器里。现在在一个时钟脉冲clk的控制下,定时的从这个表格中取出数据,送到
DA再平滑滤波,这个得到的波形就是正弦波。同一个clk控制下,如果把表格中的数据一一取出,那么频率就低些,如果跳着取,
只要保证一个周期取到了2个以上,就仍然是正弦波,那么频率就高些。所以同一个clk控制下,可以控制跳着取的步进值来控制
频率。也就是这个最高频率理论上是clk的1/2。当然前面的讨论都没有考虑DA的速度。另外,128、256、512个点有什么区别呢?
点越多,生成的频率信号的分辨率就越好。

回到PWM上来,我不太清楚的是PWM能相当于一个多快的DA来用?

说得不对的地方,请指正。

出0入0汤圆

发表于 2008-7-28 22:36:49 | 显示全部楼层
一个周期的波形理论上只需要取2个点就可以了.(也就是信号频率的2倍) 这是理论,实际上我们不可能搭出一个理想的滤波器的,所以通常会多取一些点的,至少4倍以上。(在我的例子里取的8倍)。

因此,如果输出的波形好的有两个要点:一个周期中输出的点多;和每个点的精度高(8位,16位,32位)。

关于精度的问题,我们基于8位的PWM,所以精度只能是8位。(幅度0-255,1个字节)。

那么一个周期中的点多也可以使输出波形好。但输出点的多少与需要产生信号的频率有关。

我们可以简单的计算一下,假定系统时钟为16M,T/C采用系统时钟直接计数,那么它输出1个点的时间为256/16M,也就是PWM的周期是62500Hz。
按2个点的输出是一个信号周期,最高可以输出31250Hz的正弦波。不过从上面讨论,这个波形肯定不好。

如果按16点输出是一个信号周期,那么只能产生3906.05Hz的正弦波。

可见,一个信号周期中用的点越多,产生的正弦波的频率就越低,但波形越好。

如果按128点输出是一个信号周期,产生的正弦波的频率为488.28125Hz.

可见,如果你需要产生的正弦波频率比较低,系统的PWM频率比较高的话,你可以在一个信号周期中输出多于128点,此时你就要做一个256,512个点的表了。

在我的例子中,系统时钟为4M,要产生1K的正弦波,这样构成一个正弦波周期最多只能用16个点了,我的表为128也就够了,多了反而浪费了程序空间了。

如果你使用32的系统,那么系统时钟可以非常高,PWM的位数也有16位,速度也非常快。此时产生要产生正弦波的话,就要使用256、或512个点,16位的表了。

因此我在书的前言里讲,学好8位也是为进军32位打基础。8位的都玩不转,就不要谈32位了。况且在32位的系统里,中断、定时器,PWM、键盘、I2C、UART、等都是基础的东西,至少要上USB、网络、处理图象、处理声音......吧。

我希望大家不要仅仅局限书里的程序,(我已经看到有的读者说程序太少了)而是多考虑和学习更深入的东西。系统是千变万化的,程序也是多种多样的。重要的是你是否真正了解和理解基本的思想和方法,这样才能根据实际的要求编写出更适合你的系统的好程序。

出0入0汤圆

发表于 2008-7-29 06:47:56 | 显示全部楼层
标记 , 水平未到这 先记下

出0入0汤圆

发表于 2008-7-30 22:22:32 | 显示全部楼层
我看不懂马教师关于生成正弦波的程序。最搞不懂的就是那个公式。公式怎么来的也不懂。从公式也推不出来下面的正弦波样表。唉,个人水平不行啊。
但是我也搞成了一次。最近在搞一个程序,其中有关于生成50赫兹非正弦波的一段。程序做好了。生成了波形,效果很好。
说实在的,真是不太懂这个PWM的原理。但就是实际试验,摸着石头过河,竟也成了。

出0入0汤圆

发表于 2008-8-7 17:40:14 | 显示全部楼层
正弦波不一定取128个点啊。一般取2的N次方个点。都是用来做变频的,而且在三相变频中方便产生120度的相位差。

出0入0汤圆

发表于 2008-10-31 08:41:22 | 显示全部楼层
先标记一下。

出0入0汤圆

发表于 2008-11-16 16:48:09 | 显示全部楼层
标记,学习,谢谢

出0入0汤圆

发表于 2008-11-17 10:15:58 | 显示全部楼层
有两个问题请教:1:用PWM方式生成的正弦波时,那个控制通断的三极管是否工作在开关状态?

                2:如果采用带DA的单片机来生成正弦波,可否用DA来代替PWM来控制输出正弦波呢?此时那个控制通断的三极管是工作在开关状态呢?还是工作在放大状态?需要再加RC滤波吗?

出0入0汤圆

发表于 2008-11-17 13:11:52 | 显示全部楼层
实在不愿意多做解释了。



希望有那些“十天”学会了单片机的朋友给予帮助吧。

出0入0汤圆

发表于 2009-2-2 13:06:59 | 显示全部楼层
16楼:

一个周期的波形理论上只需要取2个点就可以了.(也就是信号频率的2倍)



----------

这句话对吗?

感觉马老师的例子,在理论上是由欠缺的.

出0入0汤圆

发表于 2009-2-2 18:39:51 | 显示全部楼层
楼上,学习参考一下采样定理后再提出问题。

出0入0汤圆

发表于 2009-2-2 19:53:15 | 显示全部楼层
采样定理的原文我找不到,我翻了一下<<数字信号处理>>的第4章,"模拟信号数字处理"(高西全等等著,电子工业出版社),其中的"时域采样定理"的大意是(P98):

从模拟信号到时域离散信号的采样频率仍要按照理想采样定理确定,即采样频率必需大于等于模拟信号的最高;频率的2倍以上.

------------------------

我不理解的是,马老师说的

"一个周期的波形理论上只需要取2个点就可以了"这句话.它可以与

"采样频率必需大于等于模拟信号的最高;频率的2倍"

等效吗?

出0入0汤圆

发表于 2010-11-11 13:54:40 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-11 13:54:59 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-11 17:00:00 | 显示全部楼层
回复【26楼】louravr
采样定理的原文我找不到,我翻了一下<<数字信号处理>>的第4章,"模拟信号数字处理"(高西全等等著,电子工业出版社),其中的"时域采样定理"的大意是(p98):
从模拟信号到时域离散信号的采样频率仍要按照理想采样定理确定,即采样频率必需大于等于模拟信号的最高;频率的2倍以上.
------------------------
我不理解的是,马老师说的
"一个周期的波形理论上只需要取2个点就可以了"这句话.它可以与
"采样频率必需大于等于模拟信号的最高;频率的2倍"
等效吗?

-----------------------------------------------------------------------

理论:“即采样频率必需大于等于模拟信号的最高;频率的2倍以上”

那么我取“等于”

对于一个1K的正弦波采样,使用“等于”,那么采样频率就是2K,每采样一次就是一个点,因此"一个周期的被采样波形中只有2个采样点"!这个就是从采样定理的理论中得到的。

这个是小学生算术,我没有算错吧。有什么问题吗?

出0入0汤圆

发表于 2010-11-20 12:12:04 | 显示全部楼层
回复【29楼】machao
-----------------------------------------------------------------------

   马老师您好,我想问您个今年TI杯中SPWM的问题,他要求用SPWM,1k截止频率的滤波器,做出频率500Hz到1KHz的频率可调的正弦波,我们使用的是MSP430,移植您书上的那个例子,的确是可以做出1KHz的正弦波,但是调频率就不行了,金豫老师和邱松老师和我们说改变每一次读点的间隔,比如在您的例子中是每隔8个点读一次,但是我们改变了每次读点的间隔之后之后,出来的波形就不对了。后来我们把PWM当成DA来用,勉强做出可调来了的正弦波来了。
    1)所以我们对SPWM的理解始终是采样控制论中PWM窄脉冲的冲量和正弦波被分成N份以后,每一小部分的大小相等来实现的,不知道这样理解对不对,如果对的话,那如何做到1Hz的频率控制精度呢?
    2)另外我想和马老师提个建议,就是我们上AVR课的时候,可不可以让老师多讲讲关于这种PWM波形变换的原理,因为我们暑假里比完赛后,也自己查了很多资料,但是对SPWM始终没有很深刻的理解,而现在我们上AVR的课了,李老师也没有讲这方面的原理,只是解释了下程序,所以不知道如何深入理解这方面的知识,还望马老师指导。

出0入0汤圆

发表于 2010-11-20 12:47:12 | 显示全部楼层
回复【26楼】louravr
采样定理的原文我找不到,我翻了一下<<数字信号处理>>的第4章,"模拟信号数字处理"(高西全等等著,电子工业出版社),其中的"时域采样定理"的大意是(p98):
从模拟信号到时域离散信号的采样频率仍要按照理想采样定理确定,即采样频率必需大于等于模拟信号的最高;频率的2倍以上.
------------------------
我不理解的是,马老师说的
"一个周期的波形理论上只需要取2个点就可以了"这句话.它可以与
"采样频率必需大于等于模拟信号的最高;频率的2倍"
等效吗?

-----------------------------------------------------------------------

以为马老师说的没问题。不过有个前提,必须滤掉高于此信号的所谓噪声。由此,马老师有下文“这是理论,实际上我们不可能搭出一

个理想的滤波器的,所以通常会多取一些点的,至少4倍以上。(在我的例子里取的8倍)”。

呵呵,马老师就是老师,说话滴水不漏。

出0入0汤圆

发表于 2011-5-10 10:29:49 | 显示全部楼层
精彩的讨论。受教了!
头像被屏蔽

出0入0汤圆

发表于 2011-12-14 22:06:13 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2012-7-8 21:20:03 | 显示全部楼层
mark,,,还有点晕

出0入0汤圆

发表于 2012-7-17 10:42:08 | 显示全部楼层
machao想请教一下,mega16产生的正弦波的幅值怎样改变?

出0入0汤圆

发表于 2012-7-17 10:44:05 | 显示全部楼层
可以取256,512个点,这样点取的细波形更好

出0入0汤圆

发表于 2012-7-17 10:56:35 | 显示全部楼层
wangzheyu 发表于 2010-11-20 12:12
回复【29楼】machao
-----------------------------------------------------------------------

在马老师回复前,谈一谈俺的想法
PWM产生变频的正玄波(不说幅度),有两个参数可变,一个是输出周期固定,改变每个周期输出几个点(在128个数据中取几个),另一个是每周期输出点不变(比如输出8点),改变输出周期。
MCU做变频正弦输出,要根据输出波形的频率要求,PWM的时钟,采用以上两种方法,只用一个是不可取的!

出0入0汤圆

发表于 2012-7-17 10:57:51 | 显示全部楼层
tiantianyouyi 发表于 2012-7-17 10:44
可以取256,512个点,这样点取的细波形更好

细波形更好,可是能产生的正弦波频率会变低

出0入0汤圆

发表于 2012-7-17 12:04:03 | 显示全部楼层
jackielau 发表于 2012-7-17 10:57
细波形更好,可是能产生的正弦波频率会变低

可以改变取的点数,感觉没什么多大作用,你试过改变正弦波的幅值没

出0入0汤圆

发表于 2012-8-12 20:47:28 | 显示全部楼层
tiantianyouyi 发表于 2012-7-17 12:04
可以改变取的点数,感觉没什么多大作用,你试过改变正弦波的幅值没

PWM
你可以改变整体占空比啊!!

出0入0汤圆

发表于 2012-8-25 17:55:07 | 显示全部楼层
tiantianyouyi 发表于 2012-7-17 12:04
可以改变取的点数,感觉没什么多大作用,你试过改变正弦波的幅值没

我也有和你同样的疑问,取的点数只能改变频率,却不能改变幅值,不知道你做出来没 分享下

出0入0汤圆

发表于 2012-8-25 22:34:05 来自手机 | 显示全部楼层
马老师又被一群菜鸟给弄得无语了。看菜鸟们理直气壮提问、反问、抬杠真是乐死人。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 12:43

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表