论坛风格切换切换到宽版
  • 5968阅读
  • 8回复

MIM使用什么频率的PWM? [复制链接]

上一主题 下一主题
离线BD7CE
 
发帖
1288
只看楼主 倒序阅读 0楼 发表于: 2004-11-11
pwm的基础频率越高,为了保证精度,所需的正弦表越大。
step = freq * tablesize / samplerate
我取的tablesize是256,如果取samplerate=80000,则:
step1 = 1200 * 256 / 80000 = 3.84 = 4 ,误差:+50 hz
step2 = 2200 * 256 / 80000 = 7.04 = 7 ,误差:-12.5hz

因此我想80khz的频率是否太高了?对于bell202应用来说,我认为10k左右的取
样率最好,为了整除频率,取为10240以尽量减少误差。
step1 = 1200 * 256 / 10240 = 30
step2 = 2200 * 256 / 10240 = 55

mim用的pic芯片内存比avr小,所用的正弦表应该不会很大,所以请bv2ac
确认一下,它用的是80k还是8k的频率?最好给一个pwm的输出波形图。谢谢。
离线BD6CR
发帖
5950
只看该作者 1楼 发表于: 2004-11-11
我记得是70多khz,似乎是这样。
离线BD4OS
发帖
6198
只看该作者 2楼 发表于: 2004-11-11
'

因此我想80khz的频率是否太高了?对于bell202应用来说,我认为10k左右的取
样率最好,为了整除频率,取为10240以尽量减少误差。
'

这是pwm而不是dac,10k的取样率加上8bit的量化不就是80k的pwm吗?如果你说的10k是指pwm那么按照8bit量化大概只有1k多的取样率这对2200hz肯定不够,不知道我理解的对不对?
离线BD7CE
发帖
1288
只看该作者 3楼 发表于: 2004-11-11
波形发生器的算法是这样的:
首先需要一个正弦表,预先计算出来放在内存中(sine[0..255]), 然后以一个固定的周期到
正弦表中取数(sine[n]),送到pwm发生器或者dac。以取数的位置来控制频率, 由于要求
相位连续,因此取出的数必须和上次的有关联,即:sine[n] = sine[n'+step],这个step
可以变化,从而使输出频率发生变化。

pwm和dac的原理差不多,其基础频率就是采样率,不知道我的理解对不对。
离线BD4OS
发帖
6198
只看该作者 4楼 发表于: 2004-11-12
'
波形发生器的算法是这样的:
首先需要一个正弦表,预先计算出来放在内存中(sine[0..255]), 然后以一个固定的周期到
正弦表中取数(sine[n]),送到pwm发生器或者dac。以取数的位置来控制频率, 由于要求
相位连续,因此取出的数必须和上次的有关联,即:sine[n] = sine[n'+step],这个step
可以变化,从而使输出频率发生变化。
pwm和dac的原理差不多,其基础频率就是采样率,不知道我的理解对不对。
'

我的理解是设计的精度取决于tablesize里面的量化精度和取样率,而pwm的基础频率应该直接取决于tablesize的属性不能随意取值,另外我理解在pwm中基础频率不等于tablesize里面的采样率,而是等于采样率跟量化的乘积,所以10k取样率8bit输出的dac相当于80k的pwm,或者将pwm理解成1bit的dac。。。
离线BD7CE
发帖
1288
只看该作者 5楼 发表于: 2004-11-13
sine表里保存的是一个周期的正弦值,它和时间还没有关系,所以sine表本身并没有采样率的
问题,精度取决它的位数(bits)和它的长度(tablesize)。
离线BD4OS
发帖
6198
只看该作者 6楼 发表于: 2004-11-13
想了想上面我说的有些不对

重新计算了一下如果按照7ce的256大小的tablesize,要想达到mim的合成精度,需要使用高达144兆的时钟才能办到。。。

重新换算使用256大小的tablesize在4mhz时钟下可以合成的最高频率仅为60hz,在8mhz可以合成120hz,而在20mhz最高可以合成305hz。。。

tablesize的最大值应该取决于时钟/256,比如使用20mhz时钟每个sine的tablesize大概就是30@2200hz,60@1200hz,这样理解对吧?
离线bv2ac
发帖
14169
只看该作者 7楼 发表于: 2004-11-16
送上pwm 波形图, 示波器測到的頻率是 78khz...
离线bv2ac
发帖
14169
只看该作者 8楼 发表于: 2004-11-16
table size 不用大, tt 用的只有 4bit *16 而已.