找出微处理器ADC电压的十六进制编码值
这种设计方案针对低档八管脚flash存储的8位微处理器,例如Freescale的MC68HC908QT4A,但是它也同样适用于任何一款拥有ADC模块的8位微处理器。在芯片内,ADC转换输入的模拟电压成数字信号格式。数字信号格式为8位的十六进制编码值,如$00。微处理器从ADC端口采集输入模拟信号范围从VSS对应的 $00到VDD对应的$FF。基于这些十六进制编码,在VSS和VDD之间的输入电压呈现出总共256个电平的线性变换。换句话说,输入电压越高,十六进制编码值就越大。
最困难的地方在于写汇编代码实现算法的程序员必须知道不同输入模拟电平(例如1.6V)对应什么十六进制编码值。涉及到微处理器规格,甚至联系生产厂商也不能给出满意的答案。
然而,本文提出解决这个问题的方案。假定微处理器工作电源电压为VDD,应用下面这个简单公式得到十六进制编码值:VIN/(VDD/255)=result value=hex code(见编者按)。注意,在更高的十六进制编码转换精度之前,必须保证转换出的十六进制值能够覆盖整个模拟信号范围。下面的例子计算表明了使用已知电源电压5V的微处理器时,测量输入模拟信号电压为1.6V的十六进制编码值:1.6V/(5V/255)=81.6=82,或者$52。
编者按:
作者还提供了两个附件,一个查询表(PDF格式)和一个Excel格式的表格,读者可以对照这些附件与公式相互映证。最后,作者还在“反馈环”这篇文章为本篇文章提供了一些注释。
英文原文:
Find hex-code values for microcontroller’s ADC voltages
Ease 8-bit microcontroller programming with a simple formula to calculate hex values of ADC output.
Harry Gibbens Jr, Deafworks, Provo, UT; Edited by Charles H Small and Brad Thompson -- EDN, 4/12/2007
This Design Idea is for low-end, eight-pin, flash-memory, 8-bit microcontrollers, such as the MC68HC908QT4A from Freescale, but it would apply to any 8-bit microcontrollers that use the ADC feature. In a nutshell, the ADC converts an input-analog-voltage level to a digital-signal format. The digital-signal format has an 8-bit hex-code value, such as $00. The microcontroller “sees” the input-analog-voltage level from its ADC ports ranging from $00 at VSS to $FF at VDD. Based on those hex-code values, there are a total of 256 ticks. The input voltages between VSS and VDD represent a straight-line linear conversion. In other words, the higher the input voltage, the higher the hex-code value.
The difficulty is that a programmer who needs to write assembly code for a programming algorithm must know what the hex-code value is for a different input-analog-voltage level—1.6V, for example. Referring to the microcontroller’s specs and even contacting its manufacturers do not yield satisfactory answers.
However, this Design Idea presents a solution to the problem. Given the microcontroller’s power operating-voltage source, VDD, use the following simple formula to obtain the hex-code value corresponding to an identified input-analog-voltage level: VIN/(VDD/255)=result value=hex code (see Editor's note). Note that you must round off the result value to a whole number before converting to a hex-code value for better accuracy. The following sample calculation finds the hex-code value for a measured input-analog-voltage level of 1.6V when using a known microcontroller’s VDD of 5V:1.6V/(5V/255)=81.6=82, or $52
Editor's Note:
Correction and addition (4/27/2007): Due to an editing error, we originally printed the formula as VIN×VIN/(VDD/255). In addition, the author has provided two attachments, a lookup table (PDF) and an Excel spreadsheet that allows you to interact with the formula. Finally, the author has posted some comments in the Feedback Loop section for this article.
- 12位串行A/D转换器MAX187的应用(10-06)
- 低功耗、3V工作电压、精度0.05% 的A/D变换器(10-09)
- 12位串行A/D转换器的原理及应用开发(10-09)
- 在射击探测器中增加口径确定功能的简单电路(11-13)
- 一种折叠共源共栅运算放大器的设计(11-20)
- 深入解析:模拟前端模/数转换器的三种类型 (11-26)