PWM应用篇
2024-01-02 01:34:32
一.什么是PWM
? ? ? ? 用图话,如下图所示:
- PWM(脉冲宽度调制):这是一种模拟控制方式,可以根据载荷的变化来调制晶体管基极或MOS管栅极的偏置,实现晶体管或MOS管导通时间的改变,从而改变开关稳压电源的输出。这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字信号对模拟电路进行控制的一种非常有效的技术,广泛应用于从测量、通信到功率控制与变换的许多领域中。PWM技术的基本原理就是通过调整一个周期固定的方波的占空比,来调节输出的平均电压、电流或功率等被控量。
- 电感:电感是闭合回路的一种属性,是一个物理量。当电流通过线圈后,在线圈中形成磁场感应,感应磁场又会产生感应电流来抵制通过线圈中的电流。电感是自感和互感的总称,提供电感的器件称为电感器。电感是导体的一种性质,用导体中感生的电动势或电压与产生此电压的电流变化率之比来量度。感生电动势的大小与电流的变化率成正比。比例因数称为电感,以符号L表示,单位为亨利(H)。
- 纹波:纹波是由于直流稳定电源的电压波动而造成的一种现象。因为直流稳定电源一般是由交流电源经整流稳压等环节而形成的,这就不可避免地在直流稳定量中多少带有一些交流成分,这种叠加在直流稳定量上的交流分量就称之为纹波。纹波的成分较为复杂,它的形态一般为频率高于工频(中国是50Hz)的类似正弦波的谐波,另一种则是宽度很窄的脉冲波。对于不同的场合,对纹波的要求各不一样。
?二.PWM编程原理
?????????(1)PWM波其实就是一种脉宽可连续调节的矩形脉冲波;
????????(2)占空比其实就是描述脉宽与脉冲周期的比值,是量化值,便于分析研究,当我们用占空比来表达时,对脉宽就不那么关心了;
????????(3)占空比调节就是脉宽调节,表达不一样,但本质是一样的;
????????(4)PWM波满足伏秒积计算:U红(幅值) × 占空比 = U蓝,作用效果与直流电压一样。
?
?
三.PWM(脉冲宽度调制)C语言实现
#include "stc2052.h"
unsigned int pulse_width_MAX = 0xF0; // ;PWM 脉宽最大值, 占空比 = 93.75%
unsigned int pulse_width_MIN = 0x10; // ;PWM 脉宽最小值, 占空比 = 6.25%
unsigned int step =0x38;
unsigned int pulse_width;
unsigned int i,j;
unsigned char state;
void PCAinit(); //PCA模块初始化
void delay1ms(unsigned int TIME); //1ms延时程序(大概是1ms)
void zhankongbi(); //调节占空比
void st(); //用来表示pulse_width的状态函数
void main(void)
{
EA=0;
PCAinit(); //初始化PCA定时器
zhankongbi();
}
void PCAinit()
{
CMOD=0x80; //PCA 在空闲模式下停止 PCA 计数器工作
//PCA 时钟模式为fosc/12
//禁止 PCA 计数器溢出中断
CCON=0x00; //禁止 PCA 计数器工作, 清除中断标志、计数器溢出标志
CL=0X00; //清0计数器
CH=0X00;
//下面设置模块0为 8 位 PWM 输出模式, PWM 无需中断支持。脉冲在P3.7(第11脚)输出
CCAPM0=0x42; //PCA(计数器阵列)模块0的工作模式 :8位PWM工作模式
PCA_PWM0=0x00; //赋值为0,pwm才能有高电平输出
//下面设置模块1为 8 位 PWM 输出模式, PWM 无需中断支持。脉冲在P3.5(第9脚)输出
CCAPM1=0x42; //PCA(计数器阵列)模块1的工作模式 :8位PWM工作模式
PCA_PWM1=0x00; //赋值为0,pwm才能有高电平输出
EPCA=1; // 开 PCA 中断
EA =1; // 开总中断
CR=1; //将PCA 计数器打开
}
void zhankongbi()
{
pulse_width=pulse_width_MIN;
while(1)
{
st();
if(state==0)
{
pulse_width+=step;
}
if(state==1)
{
pulse_width-=step;
}
CCAP0H=pulse_width; // 模块0站空比的比较值
CCAP1H=pulse_width; // 模块1站空比的比较值
delay1ms(1000);
}
}
void delay1ms(unsigned int TIME)
{
for(i=0;i<j;i++)
for(j=0;j<400;j++);
}
void st()
{
if(pulse_width==pulse_width_MIN)
state=0;
if(pulse_width==pulse_width_MAX)
state=1;
}
????????程序功能说明程序在P3.7和P3.5都输出3.9k的PWM信号其脉冲宽度从6.25% 慢慢递增到93.75%然后在从93.75%递减到6.25%.
文章来源:https://blog.csdn.net/weixin_66634995/article/details/135330159
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!