DAC模块的定义
当MCU要把处理后的信息反馈到控制设备上时,其实就是把数字量转换成模拟量,完成这种转换的电路称为数模转换器,DA转换器的工作就是将输入的二进制数字量转换成模拟量,以电压或电流的形式输出。
DA转换器实际是一个译码器,一般为线形转换器,输出模拟电压VO和输入数字量Dn之间呈正比关系。
DA转换器在工作时将输入的每一位二进制代码Dn按其权值大小转换成相应的模拟量,然后将代表各位的模拟量相加,所得的总模拟量与数字量呈正比,这样实现了从数字量到模拟量的转换。
由上述转换过程,DA转换器输出电压VO=代码为1的各位所对应的各分模拟电压之和。
DA转换器一般由数码缓冲寄存器、模拟电子开关、参考电压、解码网络、求和电路等组成。
数字量以串行或并行方式输入,并存储在数码缓冲寄存器中;
寄存器输出的每位数码驱动对应数位上的电子开关,将在解码网络中获得的相应数位权值送入求和电路;
求和电路将各位权值相加,得到与数字量对应的模拟量。
使用DA转换器
分辨率
用于表示DA转换器对输入微小量变化的敏感程度。
指DA转换器模拟输出电压可能被分离的等级数。
对于MCU,输入数字量的位数n表示DA转换器的分辨率。
n越大,即输入的数字量位数越多,DA转换器的分辨率越高,对输入微小量的变化越灵敏。
转换精度
指输入模拟电压的实际值与理想值之差,即最大静态转换误差。
转换速度
在使用DA转换器的时候,转换速度指从输入的数字量发生突变开始,到输出电压进入与稳定值相差±0.5最低有效位范围所需要的时间,即建立时间。
目前单片集成DA转换器的建立时间最短到0.1微秒以内。
KL25的封装中,DA模块仅有一个对外引脚,因为在大部分情况下,可以使用PWM实现对外的不同电压输出,少部分需要稳定直流电源的用电设备才会用到DA模块。
DAC驱动构件
按构件思想,将DAC模块的操作封装成独立的功能函数。
DAC构件包括源文件dac.c文件、头文件dac.h文件。
构件文件功能
主要包括相关宏定义、DAC功能函数原型说明等内容。
DAC构件程序文件给出DA各功能的实现过程。
DAC模块功能函数
模块初始化函数
用于初始化DAC模块,要配置DAC0_C0寄存器,选择参考电压,设置软件触发、配置DAC0_C1寄存器来禁用DMA。
数据读取函数
在初始化完成后,使用dac_convert()函数来设置DAC缓冲区的值,值大小在0~4095之间,在DAC模块使能时,DAC模块会将缓冲区中的值转换为对应的模拟电压。
KL25的DAC模块呼吸灯案例
DAC构件的使用方法
- 初始化DAC模块,选择参考电压VDDA=3.3V;
- 在主循环中,使用DAC对数字量VReference进行转换,VReference的取值范围在2200~2600之间。
- 将一个发光二极管的正负极接入对应引脚,即可看到小灯的呼吸效果。
比较器模块CMP
用途:比较两路模拟电压;用作模拟电路和数字电路的接口,可以用作波形产生和变化电路等,利用简单电压比较器可将正弦波变为同频率的方波或矩形波。
例如:湿度报警器。
传感器模拟信号经过放大后直接与比较器输入端连接,跟参考电压比较,当大小发生变化时,就可以产生中断,实现可控的输出结果。
比较器根据比较对象不同分为模拟比较器和数字比较器。
模拟多路复用器可以从八路通道中选择一路模拟信号作为输入信号。六位的DAC可以提供一个信号。MUX电路可以在整个电压范围内进行操作。
按照构建的思想,将CMP操作封装成独立的功能函数
主要完成对CMP模块工作的参数设定,包括工作时钟、正负通道、参考电压选择等一些基本设置。
设置6位DAC输出的值。从64个不同等级中选择输出电压,输出电压范围是Vin/64~Vin。
用于打开/关闭CMP中断,KL25芯片中CMP中断号为16。
以比较器模块引脚PIC7和dac的模拟输出值为例,介绍构件使用方法。
- 初始化CMP0模块,DAC参考电压Vin,正向通道0,负向通道7;
- 设置DAC的值,每次让dac_value值自加,并设置6位DAC输出;
- 使能CMP模块中断;
- 初始化DAC输出引脚PTD1,在主循环中定时反转其输出;
- 将PTD1接PTC7;
- 通过串口调试工具读取比较器的输出。(PTC7的值与6位DAC的值的比较结果)