一、 PWM(脉宽调制)原理:脉宽调制波通常由一系列占空比不同的矩形脉冲组成,其占空比与信号的瞬时采样值成正比。图1显示了脉宽调制系统的原理框图和波形图。该系统由一个比较器和一个周期为ts的锯齿波发生器组成。如果语音信号大于锯齿波信号,比较器输出一个正常数A,否则输出0。因此,从图1可以看出,比较器输出一系列由下降沿调制的脉宽调制波。
其中x{t}是离散语音信号;Ts是采样周期;P(t)可以表示为:
数字脉宽调制器的实现:实现数字脉宽调制器的基本思想见图2。
图中,在时钟脉冲的作用下,循环计数器的5位输出依次递增。5位数字调制信号由一个寄存器控制,该寄存器不断与循环计数器的输出进行比较。当调制信号大于环路计数器的输出时,比较器输出高电平,否则输出低电平。循环计数器循环一个周期后,向寄存器发送使能信号EN,寄存器发送下一组数据。在计数器的每个计数周期内,由于输入调制信号的大小不同,比较器输出端输出的高电平数也不同,从而产生占空比不同的脉宽调制波。
为了逼近t=kTs时矩形脉冲的中心,计数器产生的数字码不是由小变大或由大变小,而是将数据分成偶数和奇数序列。在一个计数周期内,偶数序列由小变大,直到达到最大值,然后对奇数序列进行计数,由大变小。如图3所示。
通过将计数器的最后一位作为比较数据的最低位来生成奇偶校验序列。在一个计数周期中,前半个周期计数器输出的最低位为0,其他高位依次递增,所以产生的数据是偶数序列。在后半个周期,输出的最低位为1,其余高位依次递减,产生的数据是依次递减的偶数序列。具体电路可以用下面的电路图来表示:
PWM模块的设计in三、 8051:应该叫适合语音处理的PWM模块,输出管脚要接一个积分电路。输出波形适合于语音处理。设计精度为8位。PWM模块应包括1、比较部分(comp)2、计数器3、状态和控制信号寄存器/控制器(PWM _ CTRL);1)状态产品寄存器:(Flags),地址:E8h en: PWM模块起始位。将其设置为1'会使PWM模块开始工作;(留白备用) 解调速率标志位:00——不分频;012分频;1010分频;116分频。(复位后00)(留白备用)(留白备用)(留白备用)注:该寄存器在位操作的情况下可写不可读;只能在字节操作模式下读取。2) DataStore,地址:F8H;注意:该寄存器值不可读,只能写入。
4、端口:1)数据总线;(双向)2)地址总线(addr bus);(IN)3) PWM波输出端口(PWM out);(OUT)4)控制线: CLK:时钟;(IN)复位:异步复位信号;(IN低电平有效) WR:写PWM RAM信号;(IN为低电平有效); RD:读取PWM RAM信号;(在低电平有效) DONE:收到反馈信号;(OUT高电平有效) INT:中断请求信号;(OUT低电平有效) IntResp:中断响应信号;(In低电平有效) ByteBit:字节/位操作控制信号(in 1字节0位);中断占用了相当于MCU8051的外部中断2,因此可以保证读取数据中断将在5个指令周期内得到响应。
PWM模块的使用:因为8051外部中断1被占用,所以当模块不使用时,外部中断2应该被屏蔽。PWM模块产生的中断请求可以视为可以接受数据的信号。中断方法如下:中断数据读取过程。要使用PWM模块,应首先将数据写入内部地址8FH的数据寄存器,然后将地址8EH的状态寄存器的最低位(0)设置为1'即PWM模块开始工作,输出PWM调制波(如定时器模块)。在输出PWM调制波的过程中,应及时将下一个调制数据写入PWM,以保证PWM的连续工作和输出波形的连续。(有待改进)
中断数据读取过程:
PWM模块可以读取数据,申请将中断信号INT设置为0'并等待8051响应;
051收到中断请求后,做出中断响应,将IntResp信号线设置为0'
收到IntResp信号后,PWM模块将中断请求信号int重置为1'并等待8051的WR信号通知读取数据;
051取出需要的数据并放到数据总线上,将WR信号设置为0'
PWM模块发现WR信号是0'将数据从数据总线读取到内部数据寄存器,并将DONE位设置为1'
851发现DONE信号的跳转改为1'释放数据总线;
PWM模块完成当前输出周期,并将DONE复位为0'当前数据寄存器可以从该寄存器再次接受数据输入。
注意事项:
1)输出PWM信号的高电平部分必须在一个输出周期的中间,不能偏离,否则低通后输出语音会严重失真。
2)对于8位精度PWM,每个输出周期占用256(28)个机器周期,但至少有22个指令周期包括256个机器周期,即264(22*12)个机器周期。由于语音信号的连续性,256和264之间的8个机器周期的差异不能丢失,否则输出信号会失真。如果要输出的数字量以256/264的比例放大,也是不可行的,因为这样的非整数放大导致放大倍数非常小,重新量化后小数部分会被忽略,导致失真。比如输出的数字量是16,按比例放大后就是16.5,这就导致了选择困难的问题。
因此采取以下措施:该模块以时钟周期为标准,与TMBus无关,即基本与8051异步工作。数据读取模式是每次在模块中的RAM中存储足够的数据段(暂定每次读取8个字节),存储的字节数必须保证在该数据段的PWM输出期间有足够的时间继续从RAM中读取数据。由于8051的外部中断2被占用,中断请求可以在3个指令周期(36个时钟周期)内得到应答,而PWM模块处理一个数据需要256个时钟周期,因此可以保证PWM模块顺序读取数据的中断可以得到及时应答,而不影响调制信号的连续性。
3)RD RAM进程是一个异步进程。
4)输出后,数据寄存器不会自动清零。因为PWM模块可以通过写标志(0)到0'HMX
标签:信号模块周期