pwm调速频率,51单片机PWM调速程序

51单片机的pwm调速频率主要通过一个定时器和一个io口来实现pwm的输出。在一个周期里面,首先让io口输出高电平,并定时一定的时间然后再将io口输出低电平,定时一定的时间。然后在while里面循环输出即可。需要改变占空比的话就改变高电平的时间与低电平的时间比。我们来看看51单片机的pwm调速程序。
51单片机pwm调速程序 /*******************************************************************/ /* 程序名:pwm直流电机调速 */
/* 晶振:11.00592 mhz cpu型号:at89c51 */
/* 直流电机的pwm波控制,可以直接的调速从0到20级的调速 */
/*****************************************************************/ #include《reg51.h》
#define th0_tl0 (65536-1000)//设定中断的间隔时长
unsigned char count0 = 50;//低电平的占空比 unsigned char count1 = 0;//高电平的占空比
bit flag = 1;//电机正反转标志位,1正转,0反转
sbit key_add=p2 ^ 0; //电机减速 sbit key_dec=p2 ^ 1; //电机加速 sbit key_turn=p2 ^ 2; //电机换向
sbit pwm1=p2^6;//pwm 通道 1,反转脉冲 sbit pwm2=p2^7;//pwm 通道 2,正转脉冲
unsigned char time_delay;
/************函数声明**************/ void delay(unsigned char x); void motor_speed_high(void); void motor_speed_low(void); void motor_turn(void); void timer0_init(void);
/****************延时处理**********************/ void delay(unsigned char x)
{
time_delay = x;
while(time_delay != 0);//等待中断,可减少pwm输出时间间隔
}
/*******按键处理加pwm占空比,电机加速**********/ void motor_speed_high(void)//
{
if(key_add==0)
{
delay(10); if(key_add==0)
{
count0 += 5;
if(count0 》= 100)
{
count0 = 100;
}
}
while(!key_add);//等待键松开
}
}
/******按键处理减pwm占空比,电机减速*****/ void motor_speed_low(void)
{
}
}
/************电机正反向控制**************/ void motor_turn(void)
{
if(key_turn == 0)
{
delay(10); if(key_turn == 0)
{
flag = ~flag;
if(key_dec==0)
{
delay(10); if(key_dec==0)
{
count0 -= 5;
if(count0 《= 0)
{
count0 = 0;
}
}
while(!key_dec );
}
while(!key_turn);
}
}
/***********定时器0初始化***********/ void timer0_init(void)
{
tmod=0x01; //定时器0工作于方式1 th0=th0_tl0/256; tl0=th0_tl0%256; tr0=1; et0=1; ea=1; }
/*********主函数********************/ void main(void)
{
timer0_init(); while(1)
{
motor_turn(); motor_speed_high(); motor_speed_low();
}
}
/**************定时0中断处理******************/ void timer0_int(void) interrupt 1 using 1
{
tr0 = 0;//设置定时器初值期间,关闭定时器 tl0 = th0_tl0 % 256;
th0 = th0_tl0 / 256 //定时器装初值 tr0 = 1;
if(time_delay != 0)//延时函数用
{
time_delay--;
}
if(flag == 1)//电机正转
{
pwm1 = 0;
if(++count1 《 count0)
{
pwm2 = 1; } else pwm2 = 0;
if(count1 》= 100) { count1=0; } }
else //电机反转
{
pwm2 = 0;
if(++count1 《 count0) { pwm1 = 1; } else pwm1 = 0;
if(count1 》= 100)
{
count1=0;
}
}
}

TL16C754B/TL16C754C--具有64字节FIF
INRIX旅行路径分析解决方案让你了解出行情况
华为麒麟芯片最新消息_华为新款手机本月发布
喜讯!哲讯科技荣获第八届“创客中国”无锡区域赛优胜奖
利用HS6604芯片制作充电小夜灯
pwm调速频率,51单片机PWM调速程序
诺基亚宣布其全球首款对称型25G PON解决方案已商用
华为决定整体出售荣耀业务资产,收购将达到400亿美金
buck电路电感越大越好吗?Buck电源电感值如何选取?
2018年上半年,中国电信经营收入达到1930.29亿元
三星S8发布售价超iPhone8,网友:雷军快回国开发布会!
机器人常用的齿轮链
牧野a51nx变速箱壳体自动化线
亿纬锂能锂电池专利荣获“第二十四届中国专利优秀奖”
中国电信研究院AI研发中心徐丹当选ITU-T FG AN副主席
盛思锐热式燃气计量技术取得突破性进展
传小米和VIVO或发布万元联名款折叠屏手机
浅谈倒车雷达总体系统的硬件设计
应用于中央空调系统的模拟温度控制系统的设计
Facebook正式进军区块链领域并将于2020年发布一套金融基础服务设施