Interfacing DAC with 8051 Microcontroller
在本节中,我们将了解如何使用Intel 8051微控制器进行DAC(数模转换器)。我们还将看到使用DAC产生的正弦波。
数模转换器(DAC)是一种广泛用于将数字脉冲转换为模拟信号的设备。有两种将数字信号转换为模拟信号的方法。这两种方法是二进制加权方法和R / 2R阶梯方法。在本文中,我们将使用MC1408(DAC0808)数模转换器。该芯片采用R / 2R梯形图方法。这种方法可以达到更高的精度。 DAC由其分辨率来判断。分辨率是二进制输入数量的函数。最常见的输入计数是8、10、12等。数据输入的数量决定了DAC的分辨率。因此,如果有n个数字输入引脚,则有2n个模拟电平。因此8输入DAC具有256个离散电压电平。
MC1408 DAC(或DAC0808)
在该芯片中,数字输入被转换为电流。通过将电阻器连接到输出以转换为电压,可以将输出电流称为I out sub>。 I out sub>引脚提供的总电流基本上是输入引脚D 0 sub>-D 7 sub>(D 0 sub>是DAC0808的LSB,D 7 sub>是MSB),参考电流I ref sub>。以下公式显示了I out sub>的功能
$$ I_ {Out} = I_ {ref} l组rac {D7} {2} + rac {D6} {4} + rac {D5} {8} + rac {D4} {16} + rac {D3} {32 } + rac {D2} {64} + rac {D1} {128} + rac {D0} {256}
组$$
I ref sub>是输入电流。必须将其提供给引脚14。通常将2.0mA用作I ref sub>
我们将I out sub>引脚连接到电阻器,以将电流转换为电压。但是在现实生活中,由于负载的输入电阻也会影响输出电压,因此可能会导致误差。因此,实际上,通过将I ref sub>电流输入连接到具有R f sub> =5KΩ的运算放大器作为反馈电阻来对其进行隔离。反馈电阻值可以根据要求进行更改。
使用DAC和8051单片机生成正弦波
为了生成正弦波,首先我们需要一个查找表来表示介于0°至360°之间的角度的正弦值的大小。正弦函数从-1到+1不等。在表中,仅整数值适用于DAC输入。在此示例中,我们将考虑30°的增量,并计算从度到DAC输入的值。我们假设DAC输出的满量程电压为10V。我们可以按照以下公式获得电压范围。
1 | V<sub>out</sub> = 5V + (5 ×sinθ) |
让我们根据角度和DAC的其他参数查看查找表。
角度(以θ为单位) th> | sinθ th> | V out sub>(电压幅值) th>
发送到DAC的值 th> | |
---|---|---|---|
0 | 0 | 5 | 128 |
30 | 0.5 | 7.5 | 192 |
60 | 0.866 | 9.33 | 238 |
90 | 1.0 td > | 10 | 255 |
120 | 0.866 | 9.33 | 238 |
150 | 0.5 | 7.5 | 192 |
180 | 0 | 5 | 128 |
210 | -0.5 | 2.5 | 64 |
240 | -0.866 | 0.669 | 17 td > |
270 | -1.0 | 0 < / td> | 0 |
300 | - 0.866 | 0.669 | 17 |
330 | -0.5 | 2.5 | 64 |
360 | 0 | 5 | 128 |
电路原理图:
源代码
1 2 3 4 5 6 7 8 9 10 11 12 | #include<reg51.h> sfr DAC = 0x80; //Port P0 address void main(){ int sin_value[12] = {128,192,238,255,238,192,128,64,17,0,17,64}; int i; while(1){ //infinite loop for LED blinking for(i = 0; i<12; i++){ DAC = sin_value[i]; } } } |
输出将如下所示: