繁体   English   中英

如何使用Arduino-Atmega 2560微控制器实现8位DAC(数模转换)?

[英]How to implement 8-bit DAC (Digital to Analog conversion) with Arduino - atmega 2560 microcontroller?

我正在做一个录音机和播放器项目。 我想同时实现ADC(模拟到数字)和DAC(数字到模拟)转换器。 该代码应在Arduino-Atmega 2560(Atmel Microcontroller)中实现。 我尝试实现ADC,发现以下代码:

void setup() 
{
    Serial.begin (9600);
    ADCSRA |= ((1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0));
    ADMUX |=(1<<REFS0);
    ADCSRA |= (1<<ADEN);
    ADCSRA |= (1<<ADSC);
}

int read_adc( int channel )
{
    ADMUX &=0xE0;
    ADMUX |= channel & 0x07l;
    ADCSRB = channel & (1<<ADSC);
    ADCSRA |= (1<<ADSC);
    while (ADCSRA & (1<<ADSC))
    {
        return ADCW;
    }
}

void loop() 
{
    int w = read_adc(0);
    Serial.write(w);
}

在这里,我将数字化信号发送到串行端口。 我有两个问题:1-如何修改此代码以用作8位ADC? 2-如何像以前一样实现DAC? 我的意思是如何从串行中读取数字信号,然后将其转换为模拟信号,如上面的算法?

谢谢您的帮助。

ATMega2560没有DAC外设,但是,如果您的带宽要求相对较低,则可以将PWM输出与适当的外部模拟滤波配合使用,以产生可变的输出电压(与脉冲宽度成比例)。

PWM频率越高,带宽越高,但是分辨率越低,因此需要进行权衡。 一个简单的低通RC滤波器就足够了。 在某些情况下(例如,LED或DC电动机驱动器),您根本不需要任何滤波,而在任何情况下,PWM都是驱动此类负载的更有效方法。 但是,对于音频应用程序,通常需要进行滤波,除非直接驱动D类放大器

要实现8位DAC,您需要将PWM配置为每个周期256个计数,然后只需将脉冲宽度设置为从0到255个计数即可。 经过充分滤波后,将产生一个模拟电压。 为了使滤波尽可能简单,PWM频率应尽可能高,并且滤波器的截止频率至少应设置为该频率的一半,最好小于f / 5或更高。 这将确定您的音频带宽。 对于语音来说,3Khz足够了(电话质量); 4.5KHz是AM广播质量,而15KHz是FM广播/ HiFi质量。

有许多在线资源可供参考,有关使用PWM作为DAC和必要的滤波的文章。 例如http://ltwiki.org/images/8/82/PWM_Filters.pdf

如果您的电路板上没有DAC,则可以使用附加的DAC IC,并将其与GPIO端口简单连接。 我在一个项目中做到了这一点,在该项目中,我使用了CortexM0微控制器的GPIO和DAC为直流电动机生成模拟输出。 根据您的应用类型,您可能还需要一个opAmp来放大DAC输出。

市场上有许多使用SPI总线输入的DAC器件,分辨率从8位到16位(及更高)。 我研究了所有其他选择,恕我直言,价格和分辨率之间最好的折衷方案是MCP4xxx系列。

Adafruit的MCP4921分支电路板可轻松提供12位单通道。 我选择使用MCP4822提供12位双通道分辨率。 MCP48xx系列还具有一个内部基准电压源,可以在面对可变电源电压时确保稳定的输出电压。 这比使用外部Vref的MCP49xx系列的灵活性差。

由于AVR(Arduino)电源上的数字噪声通常超过20mV,因此使用12位以上的分辨率(1mv LSB)似乎无法获得更高的精度。 同样,16位DAC的成本也大大超过MCP4xxx系列。

如果需要直流输出,则可以使用OpAmp缓冲DAC。 另外,如果您只需要AC(音频),那么可以买到便宜的耳机放大器 ,作为放大器发挥很大的作用。

如果您需要使用AVR SPI总线作为数据源(例如uSD卡),并且该源很慢,则可以中断状态下使用ATSPI2560上的USART端口以MSPI模式驱动DAC,而不会干扰SPI主接口。

这是在ATmega1284p平台上实现的模拟接口的快照,我碰巧很方便。

金发姑娘模拟原理图

DAC.h代码可以在AVRfreeRTOS的 sourceforge上找到

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM