1、 P2.2是用来控制电机的使能的,接在ENA上;如要实现电机的正传、反转的加减速就要对P2.2即ENA脚给PWM信号比如还要设置两个按键key4和key5来控制直流电机的加速和减速;比如有如下函数; /*/ uchar NUM0=600;/全局变量 uchar Flag=0;/清零标志位;对Ms清零;/*id time0_init(void) TMOD=0x01; /16 位计数器/定时器,定时器0;TH0=(65536-1000)/256; /AT89S52为12M晶振,计数1200才产生1ms TL0=(65536-1000)%256;EA=1; /开启总中断 ET0=1; /开启定时器1
2、中断 TR0=1; /开启定时器1,定时器一允许 void time0_int(void) interrupt 1 H0=(65536-1000)/256; / AT89S52为12M晶振,计数1200才产生1ms Ms=NUM0 */ for(i=0;i=1200) Ms=1200;/最高速度 if(key5=0)/减速按键 /while(key2=0);Ms- /脉宽减一 if(Ms=0) Ms=0; /停止 /*/ 下面是控制程序;经现场调试,可行;程序如下:/*/ #include#includedelay.h#define uchar unsigned char #define ui
3、nt unsigned int /*/ sbit ENA = P22; /驱动芯片使能,若为0则电机停止;sbit IN1 = P21; /控制电机正转和反转 sbit IN2 = P20;sbit key1 = P10; /此键按下,电机正转;IN1=1;IN2=0 ;ENA=1 sbit key2 = P11; /此键按下,电机反转;IN1=0,IN2=1 ;ENA=1 sbit key3 = P12; /此键按下,电机刹停; IN1=1,IN2=1 ;ENA=1 /*/ int motor_change_mank=0;/ 按键设置 /*/ uint keylogo() if(key1=0
4、) motor_change_mank=1;/正转标志位 if(key2=0) motor_change_mank=2;/反转标志位 if(key3=0) /while(key3=0);motor_change_mank=0;/刹停标志位 return(motor_change_mank);/*/ /控制驱动芯片函数 /*/ void execute_motor() switch(motor_change_mank) case 0: /刹停标志位 IN1 = 1;IN2 = 1;ENA = 1;break;case 1: /正转标志位 IN2 = 0;case 2: /反转标志位 IN1 =
5、0;default:break;/*/ void main() while(1) keylogo();execute_motor();/*/ void delayms(uint n) int i;for(;n0;n-) 1;i+);#ifndef delay_h #define delay_h extern void delayms(uint n);#endif /*/ 对如驱动芯片L298N的中文资料我这里有很多,你在论文中阐述时要抓住要点;进行简短的说明;对于调速的问题也有第二种方法;就是对驱动芯片的功率电源Vs进行改变电压;可以用DAC进行控制,如用单片机控制DAC,是输出的模拟电压可通
6、过按键来升高和降低;这样在电机正传或者反转时只要Vs所给的电压升高或者降低则电机的转速就会增加或者减少;这样亦不失为一种好的控制直流电机转速的方法;就是成本稍高而已 / 或者用下面的一个程序略作修改即可;/* 1、学习目的:利用定时器产生PWM,了解原理和使用方法 2、硬件要求:LED灯 定时器 3、试验现象:LED灯由亮到灭,由灭到亮逐步变化,也就是调光现象 #include sbit LED = P12;unsigned char CYCLE; /定义周期 该数字X基准定时时间 如果是10 则周期是10 x 0.1ms unsigned char PWM_ON ;/定义高电平时间 void
7、 delay(unsigned int cnt) while(-cnt);main() bit Flag;TMOD |=0x01;TH0=(65536-100)/256;/定时器设置 0.1ms in 12M crystal TL0=(65536-100)%256;/定时0.1mS IE= 0x82; /打开中断 CYCLE = 10;/ 时间可以调整 这个是10调整 8位PWM就是256步 while(!Flag) delay(20000); /延时时间,从一个亮度到下一个亮度的间隔时间,速度快就能看到连续效果 PWM_ON+; /这个使用较长延时,以便能看清楚变化过程 if(PWM_ON
8、= CYCLE) /这个里可以添加其他程序 如到最亮时候控制设备 while(Flag) /亮度递减 同上,是个相反的过程 PWM_ON-;if(PWM_ON = 0) Flag=0;/*/ /* 定时中断 */ /*/ void tim(void) interrupt 1 using 1 static unsigned char count; / TH0=(65536-100)/256;if (count=PWM_ON) LED = 1; /灯灭 count+;if(count = CYCLE) count=0;if(PWM_ON!=0) /如果左右时间是0 保持原来状态 LED = 0;/灯亮
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1