您的位置:首页 > 新闻 > 资讯 > 基于51单片机的无线模块PWM电机调速设计

基于51单片机的无线模块PWM电机调速设计

2025/4/22 4:06:12 来源:https://blog.csdn.net/jacklood/article/details/140938445  浏览:    关键词:基于51单片机的无线模块PWM电机调速设计

一、概述

        为了实现对直流电机无极调速的需求,提出了一种基于STC 89C52微控制器的直流PWM可调速系统设计方案。根据系统所需达到的控制目的,UL2003驱动芯片作为电动机驱动电路,实现对电机的驱动。控制算法采用经典PWM脉宽调制算法作为控制策略。经过设计电路、接线和实验制作,表明无线对电机调速具有控制灵活,操作简便的特点,达到了设计要求。

二、设计要求

1).两个无线遥控按键分别实现增加,减少电机速度的功能

2).UL2003芯片驱动直流电机;

3).两个二级管指示灯指示电机增速和减速

4).2262无线发送模块和2272无线接收模块实现无线通信。

三、PWM控制原理

(1)占空比:即输出的PWM中,高电平保持的时间与该PWM的时钟周期的时间之比。

如一个PWM的频率是1000HZ,高电平时间是200us,则它的周期是1/1000S=1ms,占空比是200us/1000us=20%。

(2)分辨率:占空比最小能达到的值,如8位的PWM,理论的分辨率就是1/256;16位的PWM,理论的分辨率就是1/65536。

四、电路方案设计

电路原理图借用开发板电路图为载体,电路图如下:

        电路图如以上所示,其中,驱动电路使用DC MOTOR一路电路,在实验时,将P00排针短接即接通直流电机驱动电路,输入驱动信号---低电平0,则直流电机转动。

        无线模块的连接电路更正:D---D0---P2.4,C---D1---P2.2,B---D2---P2.1,A---D3---P2.0;(P2.3连接有蜂鸣器故没有使用)。这个连接是自定义的,可以自己定义无线模块端口与单片机IO口相连即可。

五、程序代码


#include<reg52.h>
#include<intrins.h>
sbit key1=P2^4;	//D
sbit key2=P2^2;	//C
sbit key3=P2^1;   //B
sbit key4=P2^0;   //Asbit linght1=P1^3;
sbit linght2=P1^2;
sbit linght3=P1^1;
sbit linght4=P1^0;sbit  BEEP =P2^3 ;         //蜂鸣器
unsigned char PWM=0x03 ;   //赋初值///
sbit dula=P2^6;   //数码管的段选信号
sbit wela=P2^7;   //数码管的位选信号
void delay1 (void) //关闭数码管延时程序
{int k;for (k=0; k<1000; k++);
}
//void Beep();
void delayms(unsigned char ms);
void delay(unsigned char t);void main()
{P1=0xff;TMOD=0x00 ;TH0=0x00 ;           //延时常数TL0=0x00 ;           //频率调节TH1=PWM ;            //脉宽调节TL1=0xff ;EA=1;ET0=1;ET1=1;TR0=1 ;/P0=0x00;//关掉数码管的信号。阻止数码管受到P0口信号的影响。dula=1;wela=0;delay1();dula=0;wela=0;delay1();while(1){do{if(PWM!=0xff){PWM++ ;linght1=0;delayms(10);}		 //A按下,PWM增大,定时器初值变大,高电平时间变小,占空比减小,电机速度增大,else Beep() ;linght1=1; }while(key1==1) ;do{if(PWM!=0x02){PWM-- ;linght2=0;delayms(10);}	//B按下,PWM减小,初值变小,高电平时间变大,电机速度变小else Beep() ;linght2=1;}while(key2==1)	;if(key3==1)linght3=0;elselinght3=1;if(key4==1)linght4=0;elselinght4=1;}
}// 定时器0中断服务程序  (频率)
void timer0() interrupt 1 
{  TR1=0 ;TH0=0x00;TL0=0x00 ;TH1=PWM ;TR1=1 ;P0=0x00 ;      //启动输出}// 定时器1中断服务程序 (脉宽)
void timer1() interrupt 3 
{ TR1=0 ;P0=0xff ;     //结束输出
}//蜂鸣器子程序
void Beep()     {unsigned char i  ;for (i=0  ;i<100  ;i++){delay(100)  ;BEEP=1  ;                //Beep取反} BEEP=1  ;                        //关闭蜂鸣器delayms(100);} // 延时子程序
void delay(unsigned char t){ while(t--)   ;}// 延时子程序
void delayms(unsigned char ms) {unsigned char i ;while(ms--){for(i = 0 ; i < 120 ; i++) ;}
}

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com