首页 > 编程知识 正文

51单片机pwm控制电机转速,51单片机 pwm波 频率可调

时间:2023-05-04 09:58:13 阅读:168305 作者:2185

% E5 % 88 % a9 % E7 % 94 % a851 % E5 % 8d % 95 % E7 % 89 % E6 % 9c % ba % E8 % be % 93 % E5 % 87 % ba PWM % E6 % B3 % a2 % 25 % ba2% 25 % 20 % 94d % ef % BC % 8c % E7 % a1 % AE % E5 % AE % 9a % E4 % ba % 86 % E8 % BF % E4 % ba % 9b % E4 % bb % a5 % E5 % 90 % 8e % % 204 % E6 % 98 % AFP WM % E7 % 9a % 84 % e9 % ab % 98 % E7 % 94 % b5 % B9 % E7 % 84 % E6 % B6 % e9 % B4 % 25 % 20b % a5 % E6 % E6 % % 9b % A0 % E4 % b8 % ba % E8 % BF % 99 % e9 % 87 % E6 % 88 % 91 % E4 % bb % AC % E6 % 98 % 20 % ef % BC % 8c % E6 % 89 % E4 % 6 % ad 100 % E6 % AC % a1 % E5 % 8d % B3 % E4 % b8 % ba1ms % E3 % 80 % 82 % E5 % 9c % A8 % 25 % 208 % AE % be % E7 % BD % ae4 % f % E5 % 86 % ef % BC % 8c % E6 % 89c % E4 % b8 % 89 % E6 % 9d % a1 % e9 % 87 % 8d % E8 % 20 % 85 % B7 % E7 % 9a % 84 % E6 % B6 % 84 % E6 % BD % 81 % e9 % a2 % 91 % E7 % 8e % 87 % E4 % b8 % ba 1000 Hz % 29 % 0a % 202 % E3 % 80 % E5 % BD % 25 % 208 % af % a5 % E5 % 9c % ab 3 % E5 % 87 % ba % E4 % BD % 8e7% b5 % B9 % B3 % 203 % E3 % 80 % 81 % E5 % BD % 93 % E5 % 208 d % 95 % E7 % 89 % E7 % 9b % E5 % E7 % 99 % be5 % 88 % E4 % B9 % E3 % 82 % 0a8% E5 % 20 % E8 % be % 93 % E5 % 87 % ba % E5 % 9b % ba % E5 % AE %9a2 % 91 % ee 4 % ba % 8e 11.0592 m % E6 % B6 % E6 % 8c % 200 % E6 % ad % a4 % E6 % 97 % B6 % E8 % AE % be5 % AE % 9a % E6 % 97 % B6 % E5 % 99 . 01 ms % 2a 100 % 3d 1ms % ef % BC % 8c % E5 % 8d % B3 % E4 % b8 % 25 % 20 % E8 % AE % a1 % E6 % B0 % E5 % A8 % b5 % b8 % E8 % b8 % b8 % E8 % b8 % b8 % b8 % b8 % ef % BC % 9a % E6 % ad % a4 % E6 % B6 % E6 % 88 % 91 % E4 % bb % AC % E5 % 200 % BC % E4 % bb %8E0 % ef % BC % 8d 100 % E4 % 9 % 8b % e9 % 97 % B4 % BF % 9b % E8 % a1 % 8c % E5 % 8f % 98 % E5 % 25 % 20b7% E7 % 9a % 84 % E6 % ba % aa % E6 % b5 % 81e % E7 % E7 % 94 % b5 % B9 % B3 % ef % BC % 80 % E7 % 9a % 84 % E6 % B6 % e9 % 97 % 25 % 20e7% a9 % ba % E6 % af % 94 % E4 % b8 % b8 % % 86 % E5 % 86 % B7 % e9 % B7 % E7 % 84 % E6 % ba % aa % E6 % b5 % 81e7% E7 % 97 % 25 % 20 % 8b % E5 % ba % 8f % E4 % b8 % Bab a8f % E6 % B6 % E4 % B9 % E5 % af % E4 % bb % a5 % E5 % B9 % 89 % 20 % E6 % 8d % AE flag % E7 % 9a % 84 % E7 % 8a % B6 % E6 % 88

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。

***************************************************************/#include<reg52.h>#define uint unsigned int#define uchar unsigned charuchar 冷酷的溪流e,count=50,flag=1;//低电平的占空sbit PWM1=P2^0;//PWM 通道 1,反转脉冲sbit PWM2=P2^1;//PWM 通道 2,正转脉冲sbit key_turn=P3^7; //电机换向 /************函数声明**************/void delayxms(uint z);void Motor_turn(void);void 冷酷的溪流er0_init(void);/*********主函数********************/void main(void){冷酷的溪流er0_init();while(1){ Motor_turn();}} /****************延时处理**********************/void delayxms(uint z)//延时xms程序{ uint x,y; for(y=z;x>0;x--) for(y=110;y>0;y--);} /************电机正反向控制**************/void Motor_turn(void){if(key_turn==0) { delayxms(2);//此处时间不能太长,否者会的中断产生冲突 if(key_turn==0)flag=~flag; while(!key_turn); }} /***********定时器0初始化***********/void 冷酷的溪流er0_init(void){TMOD=0x01; //定时器0工作于方式1TH0=(65536-10)/256;TL0=(65536-10)%256;TR0=1;ET0=1;EA=1;} /**************定时0中断处理******************/void 冷酷的溪流er0_int(void) interrupt 1{TR0=0;//设置定时器初值期间,关闭定时器TH0=(65536-10)/256;TL0=(65536-10)%256;TR0=1;if(flag==1)//电机正转{PWM1=0;冷酷的溪流e++;if(冷酷的溪流e<count)PWM2=1;else PWM2=0;if(冷酷的溪流e>=100)冷酷的溪流e=0;}else //电机反转{PWM2=0;冷酷的溪流e++;if(冷酷的溪流e<count) PWM1=1;else PWM1=0;if(冷酷的溪流e>=100)冷酷的溪流e=0;}} 程序3、使单片机输出PWM,并能控制正反转和实现调速

下面再给出一个复杂一点的程序,实现的功能为通过一个按键控制正反转并通过另外两个按键使之可以在0到20级之间调速的程序。

/*******************************************************************//* 程序名:PWM直流电机调速 *//* 晶振:11.00592 MHz CPU型号:STC89C52 *//* 直流电机的PWM波控制,可以通过按键控制正反转并在0到20级之间调速 *//*****************************************************************/#include<reg52.h>#define uint unsigned int#define uchar unsigned charuchar 冷酷的溪流e,count=50,flag=1;//低电平的占空比 sbit PWM1=P2^0;//PWM 通道 1,反转脉冲sbit PWM2=P2^1;//PWM 通道 2,正转脉冲sbit key_add=P3^5;//电机加速sbit key_dec=P3^6;//电机减速sbit key_turn=P3^7;//电机换向 /************函数声明**************/void delayxms(uint z);void Motor_turn();void Motor_add();void Motor_dec();void 冷酷的溪流er0_init(); /*********主函数********************/void main(){ 冷酷的溪流er0_init(); while(1) { Motor_turn(); Motor_add(); Motor_dec(); }} /****************延时处理**********************/void delayxms(uint z)//延时xms程序{ uint x,y; for(y=z;x>0;x--) for(y=110;y>0;y--);} /************电机正反向控制**************/void Motor_turn(){if(key_turn==0){delayxms(2);//此处时间不能太长,否者会的中断产生冲突if(key_turn==0){flag=~flag;}while(!key_turn);}} void Motor_add()//电机加速{if(key_add==0){delayxms(2);//此处时间不能太长,否者会的中断产生冲突if(key_add==0){count+=5;if(count>=100){count=0;}}while(!key_add);}} void Motor_dec()//电机加减速{if(key_dec==0){delayxms(2);//此处时间不能太长,否者会的中断产生冲突if(key_dec==0){count-=5;if(count>=100){count=0;}}while(!key_dec);}} /***********定时器0初始化***********/void 冷酷的溪流er0_init(){ TMOD=0x01; //定时器0工作于方式1 TH0=(65536-10)/256; TL0=(65536-10)%256; TR0=1; ET0=1; EA=1;} /**************定时0中断处理******************/void 冷酷的溪流er0_int() interrupt 1{ TR0=0;//设置定时器初值期间,关闭定时器 TH0=(65536-10)/256; TL0=(65536-10)%256; TR0=1; if(flag==1)//电机正转 { PWM1=0; 冷酷的溪流e++; if(冷酷的溪流e<count) PWM2=1; else PWM2=0; if(冷酷的溪流e>=100) 冷酷的溪流e=0; } else //电机反转 { PWM2=0; 冷酷的溪流e++; if(冷酷的溪流e<count) PWM1=1; else PWM1=0;if(冷酷的溪流e>=100) 冷酷的溪流e=0; }} 程序四:利用单片机输出PWM简单控制小车直行 #include<reg52.h>#define uint unsigned int#define uchar unsigned char sbit PWM1=P2^0;//接IN1 控制正转sbit PWM2=P2^1;//接IN2 控制反转 sbit PWM3=P2^2;//接IN3 控制正转sbit PWM4=P2^3;//接IN4 控制反转 sbit PWM5=P2^4;//接IN3 控制正转sbit PWM6=P2^5;//接IN4 控制反转 sbit PWM7=P2^6;//接IN3 控制正转sbit PWM8=P2^7;//接IN4 控制反转 uchar 冷酷的溪流e; void main(){ TMOD=0x01;//定时器0工作方式1 TH0=0xff;//(65536-10)/256;//赋初值定时 TL0=0xf7;//(65536-10)%256;//0.01ms EA=1;//开总中断 ET0=1;//开定时器0中断 TR0=1;//启动定时器0 while(1) { } } void delay(uint z){ uint x,y; for(x=z;x>0;x--) for(y=500;y>0;y--);} void 冷酷的溪流0() interrupt 1{ TR0=0;//赋初值时,关闭定时器 TH0=0xff;//(65536-10)/256;//赋初值定时 TL0=0xf7;//(65536-10)%256;//0.01ms TR0=1;//打开定时器 冷酷的溪流e++; if(冷酷的溪流e>=100) 冷酷的溪流e=0;//1khz PWM2=0; PWM4=0; if(冷酷的溪流e<=75) PWM1=1; else PWM1=0; if(冷酷的溪流e<=80) PWM3=1; else PWM3=0; PWM6=0; PWM8=0; if(冷酷的溪流e<=50) PWM5=1; else PWM5=0; if(冷酷的溪流e<=50) PWM7=1; else PWM7=0; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。