控制/MCU
这款STC单片机的PWM产生原理就是对系统时钟进行分频。如果你的系统时钟不稳定的话,就不可能产生稳定频率的PWM波形。如果对PWM的频率要求不高,比如做电机速度控制,只需要关心占空比的话,可以使用内部晶振。否则的话只能在外部接晶振,然后在下载程序时选择,下次启动采用外部晶振才行。
频率超过35m的话 单片机内部会自动分频,若你接上一个36m的会自动分频为18m,也就是接36M的和18M的效果是一样,用STC12C5620用的是32M 程序无任何问题。。。。
void PWM_init (void){//PWM初始化函数
CMOD=0x02; //设置PCA定时器,计数频率为晶振频率/2 当为12Mhz时,PWM输出频率约23.4Khz
//CMOD=0x00; //设置PCA定时器,计数频率为晶振频率/12 当为12Mhz时,PWM输出频率约3.9Khz
//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方波
全部0条评论
快来发表一下你的评论吧 !