ZKX's LAB

单片机自带的PWM功能是怎么实现的 通过送PWM值就可以IO口输出波形 用寄存器实现PWM波形输出

2020-10-01知识20

c8051单片机输出PWM波形的频率怎么设定

单片机自带的PWM功能是怎么实现的 通过送PWM值就可以IO口输出波形 用寄存器实现PWM波形输出

普通的IO口为什么可以模拟PWM信号? PWM我们称之为脉冲宽度调制,这种调制技术在直流电机调速、变频调速和灯具调光中用的很广泛,现在有很多可以产生PWM波形的应用芯片可以产生PWM波形,有时候在一些以微处理器为控制核心的电子电路中需要PWM控制时,为了“挖掘”单片机的潜力节省产品的成本会看到常常用微处理器(MCU)的I/O(输入与输出口)来模拟输出PWM控制信号。为什么微处理器的I/O口可以模拟出PWM信号呢?下面我们一探究竟。PWM信号产生的基本原理顾名思义题目中的“PWM”信号其实就是就是一种模拟信号电平进行数字编码的一种方法,也就是使用数字信号达到一个模拟信号的效果。为了更能说明问题我们看图说话吧!以下面我所绘制的PWM波形为例子,从下面图形示意图看这是一个周期是10毫秒的矩形波图,换算成频率来说是100HZ。朋友们仔细观看会发现在每个10毫秒的周期内其高低电平所占的比例是不一样的,也就是说高电平的占空比是不同的。第一个周期占空比是4/10、第二个周期占空比是6/10、第三个周期占空比是8/10。这样只要能够调节在每个周期的占空比就能够调节所控制目标的快慢或者亮灭,这就是PWM信号产生的基本原理,如下图所示。微控制器普通I/O口模拟PWM波形的方法前面我们对PWM信号产生的基本原理。

单片机自带的PWM功能是怎么实现的 通过送PWM值就可以IO口输出波形 用寄存器实现PWM波形输出

如何使用FPGA将一路PWM输入波形进行移相分成24路输出 很简单啊,你按不同的相位采集存到寄存器就可以了。比如你的pwm的精度是1024/周期,那么24个相位的间隔就是1024/24=42.666。那么你可以首先把整个周期都存下来,每隔43个左右输出一路。reg[1023:0]wave_reg;always@(posedge clk)wave_reg[1022:0],pwm_wave};把整个波形都存下来,但是可能比较耗寄存器。assign wave_out[0]=wave_reg[0];assign wave_out[1]=wave_reg[43];有时候加43,有时候加42,保证到后面刚好。assign wave_out[23]=wave_reg[981];但是这种做法大概会消耗1024个寄存器,随着pwm精度的提高,这个消耗会提高。如果你只存半个周期,而由于正弦波是基对称的,assign wave_out[12]=~wave_out[0];assign wave_out[23]=~wave_out[11];这样会少一半的寄存器。

单片机自带的PWM功能是怎么实现的 通过送PWM值就可以IO口输出波形 用寄存器实现PWM波形输出

#pwm#pwm波形#单片机#占空比#pwm技术

随机阅读

qrcode
访问手机版