STC单片机输出PWM信号,频率要25KHz,请大神指教,怎么实现,或者直接给我一个程序,谢谢!

STC单片机输出PWM信号,频率要25KHz,请大神指教,怎么实现,或者直接给我一个程序,谢谢!,第1张

void PWM_init (void){//PWM初始化函数

CMOD=0x02; //设置PCA定时器,计数频率为晶振频率/2 当为12Mhz时,PWM输出频率约234Khz

//CMOD=0x00; //设置PCA定时器,计数频率为晶振频率/12 当为12Mhz时,PWM输出频率约39Khz

//CMOD=0x04; //设置PCA定时器,计数频率为定时器0的溢出率,如果让定时器0设为16位计数模式,其溢出频率可以在很大范围内调节,从而以产生很高或很低的PWM频率

CL=0x00;

CH=0x00;

CCAPM1=0x42; //PWM1设置PCA工作方式为PWM方式(0100 0010)

CCAP1L=0x00; //设置PWM1初始值与CCAP0H相同

CCAP1H=0x00; // PWM1初始时为0

CR=1; //启动PCA定时器

}

实际上要产生低频率的PWM波,不用其硬件PWM功能完全可以

用定时器中断方式即可实现

让定时器 200us中断一次(中断不算频繁呀) ,设一变量a,每次中断a加1,100次就是20ms,,另设一变量b,数值在1-100之间,每次中断比较a和 b的大小,如果a<b,则引脚 输出高电平,否则为低电平,这样通过改变b的值,就可实现频率为50HZ,占空比1-100%可调的PWM方波

#include<at89x51h>

unsigned char PWM0=0x80,PWM1=0x80,PWM2=0x80;//PWM的百分比

void InitT0(void)

{

TMOD=0x02;//定时器0工作方式2 8位自动重装

TH0=0;//pwm频率为系统时钟/256

TL0=0;

TR0=1;//开始计时

ET0=1;//允许定时器中断

EA=1;//开启总中断

}

void main(void)

{

InitT0();//初始化T0定时器

while(1)

{

//添加处理代码

}

}

void Timer0(void) interrupt 1//用于PWM的定时器

{

static unsigned char counter=0;//记录中断次数

counter++;

if(counter >= PWM0) P1_0 = 0; else P1_0 = 1;

if(counter >= PWM1) P1_1 = 0; else P1_1 = 1;

if(counter >= PWM2) P1_2 = 0; else P1_2 = 1;

}

怎么可能搞不了三路独立的呢楼下那位是被STC12C5A60S2的硬件蒙蔽了视线,他认为,STC12C只有两路PWM,无法实现3路,你却忘记了最原始的办法,不要说STC12有PWM功能,即使是传统的AT89S52这类没有PWM功能的单片机也一样能够实现楼主的要求

下面我简单的分析一下我的思路,楼主尝试编程,如果不懂,再追问:

你是用三路独立的PWM调光用的,PWM调光,为了保证不让人眼产生闪烁,理论上PWM的频率要大于20Hz,而在实际的测试用,一般PWM要大于25Hz才能保证不闪烁为了保险起见,我们将PWM的频率设定在30Hz左右,那么,周期就是33333333ms,假设,我们实现10级调光,那个 每级的时间是333333ms

然后设置三个变量和一个计数器,我描述不太清楚,你看一下程序:

sbit P1_0 = P1^0; //---P10,P11,P12是三路PWM输出

unsigned char Set_PWM0 = 0; //--Set_PWM0 Set_PWM1 Set_PWM2

//--分别是低电平占整个脉冲的百分比

//--他们最小取0,最大取9

unsigned char counter = 0;//--用于计数的

void ISR_Timer0(void) interrupt 1 //---我们就用定时器0来做,不用PWM硬件

{ //----33333ms中断一次

counter++;

if(counter >= 10) counter = 0;

if(counter >= Set_PWM0) P1_0 = 0; else P1_0 = 1;

if(counter >= Set_PWM1) P1_1 = 0; else P1_1 = 1;

if(counter >= Set_PWM2) P1_2 = 0; else P1_2 = 1;

}

这样,定时器0用于决定PWM的反占空比,你只要设置 Set_PWM0等三个参数就可以了

怎么会实现不了呢

以上就是关于STC单片机输出PWM信号,频率要25KHz,请大神指教,怎么实现,或者直接给我一个程序,谢谢!全部的内容,包括:STC单片机输出PWM信号,频率要25KHz,请大神指教,怎么实现,或者直接给我一个程序,谢谢!、跪求单片机输出pwm波控制电调的程序!!、求51单片机PWM程序(一个定时器产生三路PWM 可独立运作) 简单来说就是用三路独立的pwm控制三个LED等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9325556.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存