一、前言
手边有几片24bit 的ADC芯片,型号为TM7707。下面通过单片机 STC32 来测试一下它的基本电路性能。
▲ 图1.1 一个成品TM7707的原理图
设计测试电路。利用STC32G12单片机控制TM7707,接口为 SPI,TM7707的时钟信号也来自32G12的主时钟分频信号。利用 TL431给出基本的参考电压信号。电路工作电源为5V。设计单面PCB,适合一分钟制板。
▲ 图1.2.1 测试电路原理图
一分钟之后得到了测试电路板,焊接电路,清洗之后准备测试。
下面开始软件调试。
使用自制的 STC 软件下载模块对单片机进行编程。设计一个简单的 LED 闪烁程序。下载之后,单片机工作正常。为了给 TM7707提供工作时钟,设置 系统时钟分频输出。分频倍数为 7倍,这样在单片机时钟为 35MHz下,输出时钟信号频率为 5MHz 左右,能够满足 TM7707 的需求。下面通过 SPI编程,控制 TM7707进行采集模拟信号。
▲ 图1.3.1 输出的时钟信号
下面对TM7707进行软件编程。
根据 TM7707的数据手册,结合者网络上给出的调试软件参考,编写了TM7707的驱动软件。下面,读取它的数据,通过串口显示在上位机。在通道1 输入 1V的直流电压。可以看到读取的 16bit的数据,基本上符合1V对应的数值。也可以读取24bit的数据,只是在现在设计的电路板上,24bit 的数据后面 8bit实际上都是噪声了。
下面测量一下这个ADC的测量结果。使用DG1766提供从0V到3V的电压,使用TM7707的第一个通道读取该电压值。利用串口发送到上位机。开始编程的时候,忘记了将输出结果按照无符号整形数字进行转换,所以出现了数值 溢出的情况。将数字按照无符号整型数传输,所得到的数字从0变化到 65535。当输入电压超过 2.5V,输出数据便饱和了。这是读取的从0V 变化到 0.1V对应的ADC数值,可以看到ADC有一个 0 偏,当,输入电压小于 0.02V的时候,ADC输出数值都为 0。
▲ 图1.4.1 不同输入电压对应的输出数值
▲ 图1.4.2 不同电压对应ADC
▲ 图1.4.3 从0V到0.1V对应的ADC数值
本文基于STC32单片机,测试了 24bit ADC。在读取它的16bit的情况下,ADC转换的精度非常好。幸亏阅读了网络上别人给出的调试经验。在参考了别人的代码的基础上,编写了 TM7707的驱动代码。
参考资料
[1]
32G12K128 驱动 TM7707的24位ΣADC开源教程: https://www.stcaimcu.com/forum.php?mod=viewthread&tid=4952
[2]
TM7707 Datasheet: https://www.semiee.com/3cf58249-3798-439f-946b-61a3f4737b9f.html