Blogs

调制软件工程师的替代品

杰森萨赫斯2011年11月8日1条评论

在我谈论调制之前,这是一个简短的转移。

很久以前 - 1993年,要精确 - 我在数字电子和处理器上播放了我的第一场课程。在那个课堂上,我们不得不从德州仪器购买TTL数据簿*的副本。

如果您在数字逻辑设计中有任何经验,您可能知道TTL代表 晶体管晶体管逻辑 (从而制作短语“TTL逻辑”示例 ras综合征),第一个真正广泛成功的数字逻辑组件系列,也许你知道7400系列的逻辑芯片 - 不是第一系列数字逻辑芯片甚至是TTL,但肯定是最广泛的系列逻辑芯片 - 首先是由德州仪器设计的,从那时起,许多其他公司已被广泛的第二次源。

你可能不知道的是,德州仪器始于石油工业的地质服务公司(看Ti Logo的时候:这是一个“我”,形成一个“T”形孔的钻孔,这变形为生产者20世纪50年代和20世纪60年代的集成电路,并回到了7400系列在20世纪60年代中期发布时,这些芯片的原因并不像今天的“胶逻辑”,以接口更复杂的设备,而是作为基本构建块制作计算机。在集成电路之前,需要由离散晶体管制成的电脑。一旦标准数字逻辑IC在那里,你可以刚刚购买它们,而不是必须从晶体管中脱离晶体管,然后使用一行的7400逻辑芯片行使用板设计一台计算机。

似乎似乎有点陈旧,与今天的单片机,​​但时间发生了变化。

无论如何,我在1993年购买了我的TTL数据书的副本,并开始浏览它。本书描述了7400,74S00和74LS00家庭中的全系列不同的数字芯片,从花园多样,触发器,多路复用器,柜台和移位寄存器,到一些奇怪的小专用芯片4x4寄存器文件(670),可寻址锁存器(259)。在我的数字逻辑类中,我们实际上没有建立了一个基本的电脑,除了74LS00系列芯片和一个水晶振荡器和一些SRAM和DRAM芯片。

但是有一种小奇怪的奇怪,我一直想尝试: 7497 6位同步速率倍增器。没有74HC97 - 它从未将任何其他逻辑交给原来的7400系列,而且从未在任何较小的封装中产生的东西,但你仍然可以从Ti购买它 - 有点贵。

该芯片所做的是采用6位二进制数M和时钟信号,它产生输出波形,该输出波形具有用于输入时钟的每个64个脉冲的M脉冲,缺失脉冲以填充间隙。

如果有人把它作为描述,你如何实施它?

嗯,如果它是4位同步速率乘数(这里减少用于说明目的),我可能会使用4位计数器,然后将计数与数字M进行比较,以在输入时钟脉冲和恒定的逻辑之间复用低(或高)以产生以下模式:

m = 0: 000000000000000000000000000000000000000000000000

m = 1:  10000000000000001000000000000000001000000000000000000000.

m = 2: 1100000000/110000000000000000 ..

m = 3: 111000000000000011100/000000000001100/000000000000000.

......

m = 14:11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100

m = 15:111111111111101111111111111011111111111110111111111111101111111111111011111111111110111111111111111110

其中“1”表示脉冲并且“0”表示没有脉冲。

这是一个例子 调制:我们采取参考波形(输入时钟脉冲),并根据某些参数打开和关闭。在这种情况下,它非常相似 脉冲宽度调制 (PWM),除了PWM A“1”之外将代表高并且“0”低(而不是脉冲或无脉冲)。在任何情况下,你都会注意到1和0的全部集成在一起。

但是在7497年,TI做了一些不同的事情。 1S和0s更像地分布。 (从中看到这一点更容易 现在已过时的DM7497的数据表 来自国家半导体。)

对于m = 1:(DM7497描述了反相输出的行为)
1 1 1 1 11 1 11 11 1 11 1 1 1 11 1 11 11 11 1 11 1 1 1 11 11 1 11 11 11 11 11 1 11 1 11 11 11 11 11 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1

m = 2:
1 1 1 1 1 1 11 11 1 11 1 1 11 1 11 1 11 11 11 1 11 1 11 1 1 11 11 11 11 11 1 11 1 11 1 11 11 11 11 11 11 11 11 11 1 11 11 1 11 11 0 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1

m = 3:
1 1 1 1 1 1 11 11 11 1 11 1 1 1 11 1 11 11 11 11 11 1 11 1 11 1 11 11 11 11 11 11 1 11 11 11 11 1 0 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1

M=4:
1 1 1 1 1 11 1 11 11 1 1 1 1 11 1 11 11 11 1 11 1 11 11 1 11 1 11 11 11 1 11 1 11 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1

等等。

这是一个奇怪的方式,可以结合输入数M和6位内部计数器;看看数据表,也许你会明白它是如何工作的。我总是被它的神秘,并想知道什么样的应用程序会激发这种集成电路。


让我们从1993年开始前进到今天。

我是一名电力和信号处理的电气工程师,我使用PWM允许数字逻辑产生一系列开/关脉冲,其中输入占空比D控制开关转动的时间的平均分数上。恒定频率,可变脉冲宽度。

在软件中,您可以实施如下:

int modulation_state = 0;
int PERIOD = 256;
bool PWM(int m)
{
  if (++modulation_state >= PERIOD)
    modulation_state = 0;
  return m > modulation_state;
}

其中pwm()是您以常规速率调用的函数,并且您可以获得PWM的True(开)或误报(OFF)输出。

简单的。 (通常PWM是在系统时钟运行的硬件外设,但有时您只需要一个更简单的LED或阀门的PWM输出,并且软件由于您的硬件PWM通道而陷入困境。 )

现在假设我们改变了问题。我们希望某种方式调制输出打开和关闭,以使其随时间的平均分数与输入占空比匹配,但我们不关心它是恒定的频率。实际上我们希望频率尽可能快。

好吧,一种方法是模仿7497个同步速率乘数 - 如果您经历转换其输出中的和或闸门的努力,则可以在没有脉冲门控的情况下匹配其行为,但它有点难以用于软件评估,看起来像一堆灰色代码的灰色代码的比特与m的低阶位,那么与灰色代码比特的子集一起与m个灰色代码比特的子集,或者与m,或者的下一到最低点有......等等。适合数字逻辑,软件繁琐。

几年前我遇到了这个问题,同时与我的同事交谈,埃里克·詹森 - 谁已经退休,并且很久以前是麻省理工学院的一个黑客,他们发明了各种各样的操纵方式比特完成某些数学计算。埃里克推出了他所谓的“合成师”:

int modulation_state = 0;
int q = 256;  // doesn't have to be a power of two
bool syntheticPWM(int p)
{
  modulation_state += p;
  if (modulation_state < q)
    return false;
  modulation_state -= q;
  return true;
}

这产生了具有平均接通时间级分P / Q的脉冲系。

让我们来看看一个特定的例子:p = 3,q = 7.下表具有包含调制状态和包含输出的第二列的第一列。

3 错误的
6 错误的
2 真的
5 错误的
1 真的
4 错误的
0 真的
3 错误的
6 错误的

.......

p,modulo q的调制状态增加,并且每次调制状态缠绕时,都会得到一个真实的输出。

P的值不必固定,但可以随时间变化,从而改变平均输出分数。

事实证明,该方法基本上等同于一流中使用的方法 Delta-Sigma调制,广泛使用。您有一个积分器(相当于添加p值的调制状态),并且阈值比较器(相当于我们的比较与q的调制状态相等),其产生用于抵消积分器的增加,因此即当输出状态的平均值平衡输入状态时,积分器仍然在界限内。

Delta-Sigma调制有几种变体(包括高阶调制器),与PWM不同,用于产生扩频量化噪声。如果您查看PWM波形的频谱,它会显示为PWM载流量的谐波,这是不需要的,但不需要的调制伪像。 (理想的情况下,我们将只输出在DC的模拟信号与无开关噪声 - 但是这不可能的开/关输出)的Δ-Σ调制移此噪声向上频谱,所以,它的更接近的调制频率,并可以更容易地过滤出来。

您想要使用PWM而不是Delta-Sigma?当您需要固定频率输出和更频繁的交换时具有负面后果(例如,电源电子器件,其中切换损耗是您在打开或关闭开关的频率时的函数)。

你什么时候想使用delta-sigma而不是pwm?当您具有相对较慢的调制速率(例如,在400Hz运行的软件例程)时,它足够慢地切换每个其他调制周期不会产生负面后果,并且您不能运行调制器足够快以获得分辨率你想要PWM但没有一个非常慢的PWM期。

例如,如果您需要在400Hz运行的软件实现的PWM波形的8位分辨率,则意味着640毫秒的PWM周期(或1.5625Hz的频率)。哎呀!这很慢。

相比之下,在400Hz的占空比下运行Delta-Sigma调制器,占空比为50%,您可以获得200Hz的输出波形(通常会在电力电子器件中产生非常低的开关损耗;您开始担心10- 50khz和数百kHz的Mosfets)。在25%和75%的占空比下,输出波形为100Hz;在10%和90%的占空比下,输出波形为40Hz。越靠近50%,输出频率越接近调制率的一半。越靠近0%或100%,输出频率较慢。

快乐调制!


* P.S。如果您想要1988年版TI TTL数据书的副本,最近开始销售它们 在他们的网站上有10美分。相当多的组件是超出日期的,并且所有系列(7400,74S00,74LS00)是遗留系列更好地替换为74HC,74LVC等,但我仍然浏览纸质数据库的黄色页面以尝试弄清楚是否有一个可能解决我的问题的胶水逻辑芯片。


[]
评论 Zeph942014年5月23日
在近似与固定速率时钟的各种采样率近似的语言中,我遇到了更均匀地分布脉冲,并提出基本相同的算法;然后,我意识到它可以用于绘制像素矩阵上的对角线。结果,后者已被称为Bresenham的算法。有趣的是它在这么多地方出现。

在与PWM竞争的领域中,优点是您可以在循环中(甚至多次)在循环中更改“ON”分数,并且滤波输出将遵循;响应和稳定性较慢的PWM。

独立“发明”Bresengham的算法的经验是我讨厌软件专利的一个原因 - 即使您自己解决了一些难题而无需复制或了解相关的工作,您可以禁止使用您的设计如果其他人获得专利。为了真正覆盖自己,你需要一名专利律师,他们一直让你的肩膀更多的钱。但那就是一边。

要发布回复评论,请单击连接到每个注释的“回复”按钮。发布新的评论(不是回复评论),请在评论的顶部查看“写评论”选项卡。

注册将允许您参加所有相关网站的论坛,并为您提供所有PDF下载。

注册

我同意 使用条款隐私政策.

尝试我们偶尔但流行的时事通讯。非常容易取消订阅。
或登录