|
回复【43楼】ifree64
回复【4楼】machao
如果用16位的pwm实现44k的da,那么定时器时钟要达到2884m!
而用8位pwm实现44k的da,定时器时钟只要达到12m就可以了,这个很容易实现的。
所以要另外考虑的。
-----------------------------------------------------------------------
刚开始对这个结论有点疑问,后来一想,原来是如此得到的:
8位pwm实现44k的da,44000*256 = 11264000,约为12m
16位pwm实现44k的da,44000*65536=2883584000,约为2884m
用pwm实现8位精度的da,x/256的占空比的信号经过lpf后和x/256的模拟电压值有多大的差别?
而且对于一个44k采样率的信号,采样值最坏情况下每个采样点的值都会不同,用pwm来模拟da,
......
有没有一些理论分析呢?还是就是觉得它可以当作那个DA?
-----------------------------------------------------------------------
理论就是采样定理。
下面看点介绍的DD
PWM Audio Theory
Audio samples are converted to a train of ON and OFF pulses. The average ON period of each pulse is proportional to the amplitude of the audio sample being played at that point in time. The PWM frequency, i.e. the total pulse period of ON plus OFF time, must be greater than the sampling rate of the audio being played. The output will then consist of a train of pulses where the average output voltage over the period is a function of the amplitude & frequency of the audio being played. This output signal contains unwanted noise from the PWM frequency and its harmonics. This noise can either be ignored because it is outside of the human hearing range, or it can be minimized by use of a low pass filter (integration).
History
In 1981, IBM released the IBM PC. It had a single, cheap internal speaker for audio, but to keep costs low, there was no DAC. The hardware would allow for applying power to the speaker on or off, but nothing in between.
Programmers found they could program the PC's Programmable Interval Timer (PIT) chip to drive the PC Speaker with varying pulse widths. Unfortunately, the PIT chip was only clocked at 1.2MHz. If the PWM frequency was set to 22KHz, this gave only 54 different output levels (1,193.182KHz / 22KHz = 54). If a PWM frequency of 11KHz is used, 108 possible output levels can be achieved (1,193.182KHz / 11KHz = 108), but this puts the unwanted PWM pulse frequency well into the human ear's audible frequency range, producing an undesirable 11KHz squeal on top of the audio.
Standard 8-bit audio has 256 different output levels (2 ^ 8 = 256), so playing audio on the PC Speaker had to be scaled down to the lower resolution. This made the sound quality fairly poor, but still recognizable.
More information about programming the PC's internal speaker using the PIT chip can be found here: Programming the PC Speaker.
Also during this period, some folks wired together a pile of resistors to their PC's Parallel Port to produce an 8-bit Binary Weighted DAC. This type of DAC used a specially designed resistor voltage divider network to produce the analog output. The resulting audio using this hardware could in theory be significantly better than the PWM PC Speaker method, but in practice it was difficult to get exact resistor values to make this solution work very well. Plus, not all parallel ports behaved properly either (some have internal pull-up/down resistors, etc).
High Speed Microcontrollers
Today's microcontrollers provide significantly better hardware. For example, the PIC24HJ64GP206 from Microchip provides 8 PWM pins, clocked at up to 40MHz. If a PWM frequency of 78KHz is used, each PWM output would be capable of producing 512 different output levels (40,000KHz / 78KHz = 512), or in other words, 9 bits of resolution. 10-bit resolution could be achieved, but this would limit the playback frequency to 39KHz.
What would it take to get to 16-bit resolution? Unfortunately, using the PWM technique by itself would require a clock rate of over 2.89GHz to achieve 16-bits of resolution. 2.89GHz divided by a PWM frequency of 44.1KHz allows for 16-bit resolution (2890137.6KHz / 44.1KHz = 65536). Few devices other than highly advanced microprocessors from Intel or AMD can operate at these frequencies. Obviously, using PWM alone is not going to be a feasible solution with today's equipment. |
|