一、 PWM(脉冲宽度调制Pulse Width Modulation)原理:
脉冲宽度调制波一般由一列占空比不同的矩形脉冲构成,其占空比与信号的瞬时采样值成份额。图1所示为脉冲宽度调制体系的原理框图和波形图。该体系有一个比较器和一个周期为Ts的锯齿波发生器组成。语音信号假如大于锯齿波信号,比较器输出正常数A,不然输出0。因此,从图1中能够看出,比较器输出一列下降沿调制的脉冲宽度调制波。
二、 数字脉冲宽度调制器的完结:
完结数字脉冲宽度调制器的基本思想参看图2。
图中,在时钟脉冲的效果下,循环计数器的5位输出逐次增大。5位数字调制信号用一个存放器来操控,不断于循环计数器的输出进行比较,当调制信号大于循环计数器的输出时,比较器输出高电平,不然输出低电平。循环计数器循环一个周期后,向存放器宣布一个使能信号EN,存放器送入下一组数据。在每一个计数器计数周期,由于输入的调制信号的巨细不同,比较器输出端输出的高电平个数不一样,因此发生出占空比不同的脉冲宽度调制波。
图3
为了使矩形脉冲的中心近似在t=kTs处,计数器所发生的数字码不是由小到大或由大到小次序改变,而是将数据分红偶数序列和奇数序列,在一个计数周期,偶数序列由小变大,直到最大值,然后变为对奇数序列计数,改变为由大到小。如图3比如。
奇偶序列的发生方法是将计数器的最终一位作为比较数据的最低位,在一个计数周期内,前半个周期计数器输出最低位为0,其他高位逐次增大,则发生的数据即为偶数序列;后半个周期输出最低位为1,其他高位顺次减小,发生的数据为顺次减小的偶序列。详细电路能够由以下电路图表明:
三、 8051中的PWM模块规划:
应该称为一个合适语音处理的PWM模块,输出引脚应该外接一积分电路。输出波形的方法合适作语音处理。规划精度为8位。
PWM模块应包括:
1、 比较部分(Comp):
2、 计数部分(Counter):
3、 状况及操控信号存放/操控器(PWM_Ctrl);
1) 状况积存放器:(Flags),地址:E8H ;
①EN: PWM模块发动位,置位为‘1’将使PWM模块开端作业;
②(留空备用)
③④解调速率标志位:00 – 无分频;01 – 2分频;10 – 10分频;11 – 16分频。 (RESET后为00)
⑤(留空备用)
⑥(留空备用)
⑦(留空备用)
⑧(留空备用)
留意:该存放器能够位操作情况下可写,不可读;只能在字节操作方法下读取。
2) 数据存放器(DataStore),地址:F8H;
留意:该存放器值不可读,只可写。
4、 端口:
1) 数据总线(DataBus);(双向)
2) 地址总线(AddrBus);(IN)
3) PWM波输出端口(PWMOut);(OUT)
4) 操控线:
① CLK:时钟;(IN)
② Reset:异步复位信号;(IN 低电平有用)
③ WR:写PWM RAM信号;(IN 低电平有用);
④ RD:读PWM RAM信号;(IN 低电平有用)
⑤ DONE:承受结束反应信号;(OUT 高电平有用)
⑥ INT:中止请求信号;(OUT 低电平有用)
⑦ IntResp:中止呼应信号;(In低电平有用)
⑧ ByteBit:字节/位操作操控信号(IN 1-BYTE 0-BIT);
⑨⑩
中止占用相当于MCU8051的外部中止2,则可确保在5个指令周期之内,“读取数据”中止必定得到呼应。
PWM模块运用方法:由于占用了8051外部中止1,所以在不运用该模块时,应该把外部中止2屏蔽。而PWM模块发生的中止请求能够看作是“能承受数据”的信号。中止方法如后“中止读取数据进程”。运用PWM模块,应该先对内部地址8FH的数据存放器写入数据,然后设置地址8EH的状况存放器最低位(0)为‘1’,即PWM模块开端作业并输出PWM调制波(如TIMER模块)。在输出PWM调制波进程中,应及时对PWM写入下一个调制数据,确保PWM接连作业,输出波形接连。 (待改善)
中止读取数据进程:
PWM模块能够读取数据,请求中止信号INT置位为‘0’,等候8051呼应;
8051承受到中止请求后,作出中止呼应,置位IntResp信号线为‘0’;
PWM模块收到IntResp信号后,把中止请求信号INT复位为‘1’,等候8051告诉读取数据WR信号;
8051取出要求数据放于数据总线(DataBus)上,并置WR信号为‘0’;
PWM模块发现WR信号为‘0’,由数据总线(DataBus)上读取数据到内部数据存放器,将DONE方位位为‘1’;
8051发现DONE信号的上跳变为‘1’,开释数据总线;
PWM模块完结当时输出周期,复位DONE为‘0’,从此当时数据存放器能够再次承受数据输入。
留意事项:
1)输出的PWM信号中的高电平部分有必要处于一个输出周期的中心,不能违背,不然输出语音通过低通后必定是一失真严峻的成果。
2)关于8位精度的PWM,每个输出周期占用256(28)个机器周期,可是包括256个机器周期至少有22个指令周期,亦即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)输出后数据存放器不主动清零。由于能够通过把Flags(0)写‘0’而中止PWM模块持续作业。