STC8A8K64S4A12系列单片机DAC数模转换器讲解

前言
今天介绍下stc8a8k64s4a12系列单片机dac数模转换原理及rc积分电路原理,掌握掌握stc8a8k64s4a12系列单片机实现dac功能的硬件和软件设计。
一、硬件设计
1.dac概念介绍
dac
(全称是digitaltoanalogconvertor)数模转换器是一种将数字信号转换为模拟信号(以电流、电压或电荷的形式)的设备,在很多数字系统中(例如计算机、单片机),信号以数字方式(0或者1)存储和传输,而数模转换器dac可以将这样的信号转换为模拟信号,从而使得他们能够被外界(人或其他非数字系统)识别。
数模转换器dac的常见用法是在音乐播放器中将数字形式存储的音频信号输出为模拟的声音。有的电视机的显像也有类似的过程。数模转换器dac有时会降低原有模拟信号的精度,因此转换细节常常需要筛选,使得误差可以忽略。
dac有几个常见且重要的性能参数,如分辨率、线性度、建立时间、绝对精度和相对精度等。这里简单说下分辨率和线性度的概念。dac的分辨率是输入数字量的最低有效位(lsb)发生变化时,所对应的输出模拟量(电压或电流)的变化量。其反映了输出模拟量的最小变化值。dac的线性度(也称非线性误差)是实际转换特性曲线与理想直线特性之间的最大偏差。常以相对于满量程的百分数表示。
现市场上越来越多的mcu芯片内部会集成dac外设,也有专用dac芯片,包括一些音频芯片都属于dac芯片,比如pcm5102a等。说到单片机dac外设,一定会给出这个dac外设是多少位的,比如单片机片内有16位dac,就意味着数字信号的范围是065535,假设该dac输出是03.3v的电压型模拟信号,那dac转换可分辨的最小电压(分辨率)就是3300mv/65535=0.05mv,这也就意味dac数字信号输出有1bit的抖动,那么实际输出的模拟信号就有0.05mv的偏差。
dac核心部分是由r-2r电阻网络(也称倒t型电阻网络)、模拟开关和运算放大器所组成。这里之所以说核心部分是因为有些专用dac芯片,比如音频芯片可能还有i2s接口相关的外围电路等。下面简单介绍下倒t型电阻网络。解析这个原理图时我们必须知道戴维南等效电源定理,然后从右侧向左去等效可分析出i7是i的1/2,i6是i的1/4,i5是i的1/8,i4是i的1/16,i3是i的1/32,i2是i的1/64,i1是i的1/128,i0是i的1/256,如此每一位都发挥了有效的位权,输出电压有256种变化,该t型电阻网络等效输出表达式为d0vref/256+d1vref/128+d2vref/64+d3vref/32+d4vref/16+d5vref/8+d6vref/4+d7vref/2。
图1:t型电阻网络示意图
☆注:本t型电阻网络是8位dac举例,若是10位、12位、16位依次按此方法增加r电阻和2r电阻电路部分。
2.开发板dac硬件电路介绍
stc8a8k64s4a12系列单片机内部没有集成dac外设,所以stc8a8k64s4a12开发板实现dac转换是基于将高速pwm信号通过rc电路整合成比较平缓的电压信号作为模拟输出,而改变高速pwm信号的占空比可改变输出电平信号的幅值。为了达到比较理想的电压信号输出,p7.0口输出的pwm信号经2级rc电路整合,如下图。
图2:开发板dac转换电路
☆注:开发板j27端子需使用短路帽短接p06||dac_o和p70||dac_i,并且将j27端子的p06||adc和p70||dht11短路帽去掉。
dac电路占用的单片机的引脚如下表:
表1:dac电路引脚分配
注:非独立gpio表示开发板有其他的电路使用这个gpio。
rc积分电路简介
由电阻r和电容c构成的电路称为阻容电路,简称rc电路。rc电路是电子电路中非常常见的一种电路,但rc电路的种类和变化很多,首先我们介绍下rc积分电路。
在rc电路分析中,有时要用到时间常数这一概念。时间常数为电容量与电阻值的乘积。在电容量大小不变时,电阻值决定了时间常数的大小。电阻值不变时,电容量的大小决定了时间常数的大小。输入信号加在电阻r1上,输出信号取自电容c1。输入信号是矩形脉冲,在积分电路中,要求rc电路中的时间常数远大于脉冲宽度。
图3:rc积分电路分析示意图
☆注:rc积分电路的作用是:消减变化量,突出不变量。故rc积分电路可将矩形脉冲波转换为锯齿波或三角波,还可将锯齿波转换为抛物波。
rc积分电路的条件是时间常数远大于输入信号的脉冲宽度,stc8a8k64s4a12开发板的rc电路中,r1取值3.3k、c1取值100nf,可计算时间常数为r1c1=3.3kω10010-9f=3.310-4。如果时间常数远大于输入信号的脉冲周期,则也一定满足rc积分电路的条件。换句话说如果时间常数的倒数远小于输入信号的频率,则也一定满足rc积分电路的条件。时间常数的倒数可计算出为3.3*10-4的倒数约为3030,所以输入信号的频率只要远大于3.03khz即可满足积分电路的条件(一般按照10倍来作为基本条件)。
stc8a8k64s4a12开发板控制p7.0口输出pwm信号的频率约是43.2khz(具体不详述),该频率满足rc积分电路的条件,所以可将p7.0口输出的pwm信号整合成比较平缓的电压信号(可使用示波器辅助测量之)。又因为单片机控制p7.0口输出的pwm信号频率不变、占空比变化,所以最后整合出的电压信号的幅值会不同,从而实现输出不同模拟量的目的。
rc微分电路简介
rc微分电路和rc积分电路在电路形式上相近,rc微分电路输出电压取自电阻,而且rc时间常数与积分电路不同。rc微分电路中,要求rc时间常数远小于输入信号的脉冲宽度。如下图所示。
图4:rc微分电路分析示意图
注:rc微分电路的作用是:消减不变量,突出变化量。故rc微分电路可把矩形波转换为尖脉冲波,电路的输出波形只反映输入波形的突变,即只有输入波形发生突变的瞬间才有输出。而对恒定部分则没有输出。
除了上面描述的rc微分电路和rc积分电路,rc电路还有很多不同应用,比如rc耦合电路、rc脉冲分压器以及rc滤波电路等。
二、软件设计
1.dac检测 - 串口调试助手实验
1.1.工程需要用到的c文件
本例需要用到的c文件如下表所示,工程需要添加下表中的c文件。
表2:实验需要用到的c文件
1.2.头文件引用和路径设置
需要引用的头文件
#include delay.h #include uart.h #include adc.h #include pca.h 需要包含的头文件路径
本例需要包含的头文件路径如下表:
表3:头文件包含路径
mdk中点击魔术棒,打开工程配置窗口,按照下图所示添加头文件包含路径。
图5:添加头文件包含路径
1.3.编写代码
首先,在adc.c文件中编写操作adc外设会用到的函数,如下表所示。
表4:adc操作函数汇集
关于上面2个adc基本操作函数,下面详细给出代码。
程序清单:adc口初始化函数
/************************************************************************** 功能描述:adc口初始化 入口参数:无 返回值:无 *************************************************************************/ void adc_config(void) { adc_contr|=0x80; //开ad转换电源 delay_ms(10); //适当延时等待ad转换供电稳定 adc_contr|=0x0e; //选择p0.6作为模拟功能ad使用 adc_contr&=0xfe; //选择p0.6作为模拟功能ad使用 adccfg&=0xfc; //ad转换速度为416个时钟数转换一次 adccfg|=0x0c; //ad转换速度为416个时钟数转换一次 adc_contr&=0xdf; //清ad转换完成标志 eadc=0; //禁止adc转换中断 adccfg|=0x20; //adc转换结果adc_res存高4位,adc_resl存低8位 adc_contr|=0x40; //启动ad转换,adc_start=1 }程序清单:读取adc转换原始值函数
/************************************** 功能描述:adc口检测ad转换值函数 入口参数:无 返回值:adc 12位数据 ***************************************/ uint16 get_adc12bitresult(void) { uint16 ad_dat=0; adc_contr&=0xdf; // 将adc_flag清0 adc_contr&=0xbf; //关闭ad转换,adc_start=0 //12位ad结果的高4位放adc_res的低4位,低8位在adc_resl ad_dat = adc_res; //将adc_res低4位移到应在的第9位至第12位 ad_dat <138) //占空比达到很大时重新设定占空比 tempdata=1; delay_ms(20); printf(\r\n adc_p06端口原始值: %d\r\n,get_adc12bitresult()); //串口打印上传的采集的原始值 delay_ms(200); } } 1.4.硬件连接
图6:开发板连接图
总结
以上是今天要讲的内容,希望对大家有帮助,如果有啥不明白的,欢迎讨论哦!

计算机通信与网络v2 实验课程(24)
智能魔镜在厨房的应用,提供一个智慧厨房的新环境
基于PC和单片机实现MODBUS RTU通信
电工知识—SIMATIC S7-1500 PLC监控表Watch Table
可插卡收音机,简约设计,细心品味 功能还多 贼高级
STC8A8K64S4A12系列单片机DAC数模转换器讲解
数据库数据恢复—断电导致Oracle数据库故障的数据恢复案例
S参数的基础知识简介
真的吗?新浪要造无人驾驶汽车啦!
基于LabVIEW和J1939协议的CAN总线通讯平台开发
oppo find x 潜望摄像头人气爆棚 科技再次被感知
转塔式贴片机
使用XR806联调控制四足马术机器人
MP3播放器自定义音效简介(别亏待耳朵)
CMET上海站开幕,移动医疗将成为本土厂商新机遇
“易航智能”宣布获得广汽资本旗下基金的1亿元人民币B+轮融资
奔驰已证实将推出纯电动版的G级越野车
日月光最先进扇出型堆栈封装(FOPoP)实现低延迟高带宽
区块链可解决新型肺炎物资分配难题
单电阻空气净化器电机驱动DEMO方案