数字脉冲宽度调制器的实现
脉冲宽度控制pwm的工作原理
实现数字脉冲宽度调制器的基本思想参看图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模块继续工作。
OPPO用户抢先体验!Breeno语音上线愚人节4大限时功能玩法
5G商用比预想更快 华为轮值董事长谈5G+X战略
以太网中单股导线与多股导线的区别
网络分析仪和频谱分析仪区别
机器学习算法基础与流程
数字脉冲宽度调制器的实现
压限器调节方法
如何把控人工智能?
理想汽车公开“无人驾驶方法及装置”专利
中保研发布2020版测试评价规程:增加右侧小偏置碰撞
手动波导衰减器的概念
2020年中国市场5G出货量将大幅增长,需求高于预期
微软VR头显设备再曝光!普通/高端版本仅刷新率不同
集创北方推出的LED显示驱动芯片,引领LED加速进入P0.X时代
压电式传感器的特点及特性分析
惠威M-80W有源2.1音响评测 精致典雅设计延续经典
巴拉德将为戴姆勒供应燃料电池
图文详解:什么是光纤连接器?
DePIN 创新:揭示价值、创新和克服DePIN面临的障碍
大数据时代下的数据仓库搭建之路