血战到底麻将

电工之家_电工基础知识学习网站
当前位置:电工之家 > 电工知识 > 单片机 > 正文

单片机实现模拟量输出的方法有哪些

时间:2019-10-07 09:10 来源:电工之家

单片机实现模拟量输出的方法还是比较多的,主要有两类方法,一类是通过一些常见的数模转换芯片实现、另一类是通过单片机内部专有的DAC模块进行转换实现。比如STC系列单片机、mPS430系列单片机、STM32系列单片机等内部都有DAC输出模块,我们通过编写程序对内部寄存器进行配置就可以实现模拟信号的输出。
单片机实现模拟量输出的方法有哪些
通过数模转换芯片实现的模拟量输出
我们常见的D/A转换芯片有PCF8591,它 是一个单电源低功耗的 8 位 CMOS 数据采集器件,具有 4 路模拟输入,1 路模拟输出和一个串行 I2C 总线接口用来与 MCU 通信。3 个地址引脚 A0、A1、A2 用于编程硬件地址,允许最多 8 个器件连接到 I2C 总线而不需要额外的片选电路。器件的地址、控制以及数据都是通过 I2C 总线来传输,其原理图如下
单片机实现模拟量输出的方法有哪些
我们用这个芯片实现一个数模转换的例子,例如我们制作一个函数信号发生器。有了 D/A芯片 这个武器,我们就不仅可以输出方波信号了,还可以输出任意波形,比如正弦波、三角波、锯齿波等。我们以正弦波为例,首先我们要建立一个各种波形的数组。我们可以通过这些数据表,然后可以根据时间参数自己选取其中一定量数据作为我们程序的各种波形的数组,我们选取一定数量的点,如下面的图所示。由于用的是I2C总线方式进行传送,这种电路的转换速率较慢,不适合高速场合下使用。
单片机实现模拟量输出的方法有哪些
另外我们还可以用单片机与外围DAC转换芯片实现模拟量的输出,常见的有AD7520(10位分辨率)、DAC1210(12位分辨率)、AK7546(16位分辨率)等,这里我们用一个8位单片机常用的DAC0832(8位分辨率)数模转换芯片来说明,由于DAC0832芯片数据输入有三种方式(双缓冲、单缓冲、直通),我们举的例子是采用的直通方式,它与单片机的接口电路如下面的图所示。
单片机实现模拟量输出的方法有哪些
这种芯片是电流输出型的DA芯片因此在I2加了运算放大器,实现了把电流信号转换为电压信号的功能,这个电路的缺点是需要正负12V电源。其输出的波形如下图所示。
单片机实现模拟量输出的方法有哪些
其参考程序如下:
/* 三角波数据,取值由小到大,再由大到小 */
uchar code tab_tri[40]={
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,
20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1
};
/* 正弦波数据,y=128*sin(x*PI/180)+127,x=0~360,△x=10 */
uchar code tab_sin[36]={
127,149,171,191,209,225,238,247,253,255,253,247,238,225,209,191,
171,149,127,105,83,63,45,29,16,7,1,0,1,7,16,29,45,63,83,104
};
delay(uint i){while(--i);} //延时函数
void main(){
uchar waveFlag=0; //波形标志
uchar i;
while(1){
/* 按键部分 */
if(!key_off) waveFlag = Flag_off;
else if(!key_tri)waveFlag = Flag_tri;
else if(!key_sin)waveFlag = Flag_sin;
/* 波形产生部分 */
switch(waveFlag){
case Flag_tri: //三角波
for(i=0;i
{ DA0832=tab_tri*255/20; delay(10); }
break;
case Flag_sin: //正弦波
for(i=0;i
{ DA0832=tab_sin; delay(10); }
break;
default : //关闭输出
DA0832=0;
}
}
}
单片机实现模拟量输出的方法有哪些
其他方法也可以实现模拟量的输出,比如SPWM波形的输出,用单片机I/O口模拟出一种类似模拟量的输出,在呼吸灯、直流电机调速等场合应用很广泛。

上一篇:单片机学习IIC总线EEPROM重要吗?有什么用
下一篇:没有了
看过《单片机实现模拟量输出的方法有哪些》的人还看了以下文章
单片机学习IIC总线EEPROM重要吗?有什么用 单片机学习IIC总线EEPROM重要吗?有什么用
EEPROM是非易失存储器的一种。 非易失存储器在掉电时数据不丢失,可以永久存储,一般用于存储设置相关的数据。 与之相对的为易失存储器,易失存储器在掉电时数据丢失,常用于存储运行过程的数据,其又分为DRAM(动态随机存储器)和SRAM(静态随机存储器),...
单片机输出模拟量方式及具体实现原理 单片机输出模拟量方式及具体实现原理
单片机输出模拟量,主要有两种方式,通过DA模块或者PWM模块输出; 以我目前经常使用的ST的Cortex-M0系列的处理STM32F051处理器为例。 在我负责的产品中,有一款产品需要由单片机产生铃声,为了节省成本,没有使用专用的铃声芯片,而是由单片机的D/A模块输出...
单片机如何实现模拟输出的 单片机如何实现模拟输出的
想要单片机输出模拟信号,属于数字信号转化为模拟信号,简称数模转换;而单片机内部的ADC模块属于模拟信号转化为数字信号,简称模数转换,比如电压电流采样、温度测量、湿度测量、压力测量等都属于模数转换。 由于带DA转换接口的单片机很少,可以使用DA芯片...
MSP430F5529型号的单片机引脚为什么这么乱 MSP430F5529型号的单片机引脚为什么这么乱
查看MSP430F5529这个单片机型号的数据手册发现,其引脚定义布局还是比较规范的,具体表现如下: (1)引脚Pin1~Pin8,全部都是普通IO引脚,可以被同时定义A4~A15,CB4~CB11或者P6.4~P7.3; (2)引脚Pin9~Pin20,几乎都是单功能定义引脚,软件或者硬件工程师在...
单片机程序怎么写占用资源少 单片机程序怎么写占用资源少
单片机一般是用汇编语言编程,尽量减少代码的数量是一个高级程序设计者所追求的。单片机编程中,第一部分一般是初始化,这段程序一点也少不了多少。以后的部分基本上是功能性的,所以在部分应该是结构化、模块化的编程可以实现程序代码最少,而且由于采用结...