单片机产生PWM信号控制直流电机调速的源代码_第1页
单片机产生PWM信号控制直流电机调速的源代码_第2页
单片机产生PWM信号控制直流电机调速的源代码_第3页
单片机产生PWM信号控制直流电机调速的源代码_第4页
单片机产生PWM信号控制直流电机调速的源代码_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机产生PWM信号控制直流电机调速的源代码本例程利用2051的T0产生双路PWM信号,推动L293D或L298N为直流电机调速,程序已通过调试。接L298N时相应的管脚上最好接上10K的上拉电阻。 有什么不对的地方欢迎大家批评指正! /* =直流电机的PWM速度控制程序= */ /* 晶振采用11.0592M,产生的PWM的频率约为91Hz */ #include<reg51.h> #include<math.h> #define uchar unsigned char #define uint unsigned int sbit en1=P10; /* L298的E

2、nable A */ sbit en2=P11; /* L298的Enable B */ sbit s1=P12; /* L298的Input 1 */ sbit s2=P13; /* L298的Input 2 */ sbit s3=P14; /* L298的Input 3 */ sbit s4=P15; /* L298的Input 4 */ uchar t=0; /* 中断计数器 */ uchar m1=0; /* 电机1速度值 */ uchar m2=0; /* 电机2速度值 */ uchar tmp1,tmp2; /* 电机当前速度值 */ /* 电机控制函数 index-电机号(1,2

3、); speed-电机速度(-100100) */ void motor(uchar index, char speed) if(speed>=-100 && speed<=100) if(index=1) /* 电机1的处理 */ m1=abs(speed); /* 取速度的绝对值 */ if(speed<0) /* 速度值为负则反转 */ s1=0; s2=1; else /* 不为负数则正转 */ s1=1; s2=0; if(index=2) /* 电机2的处理 */ m2=abs(speed); /* 电机2的速度控制 */ if(speed<

4、0) /* 电机2的方向控制 */ s3=0; s4=1; else s3=1; s4=0; void delay(uint j) /* 简易延时函数 */ for(j;j>0;j-); void main() uchar i; TMOD=0x02; /* 设定T0的工作模式为2 */ TH0=0x9B; /* 装入定时器的初值 */ TL0=0x9B; EA=1; /* 开中断 */ ET0=1; /* 定时器0允许中断 */ TR0=1; /* 启动定时器0 */ while(1) /* 电机实际控制演示 */ for(i=0;i<=100;i+) /* 正转加速 */ mot

5、or(1,i); motor(2,i); delay(5000); for(i=100;i>0;i-) /* 正转减速 */ motor(1,i); motor(2,i); delay(5000); for(i=0;i<=100;i+) /* 反转加速 */ motor(1,-i); motor(2,-i); delay(5000); for(i=100;i>0;i-) /* 反转减速 */ motor(1,-i); motor(2,-i); delay(5000); void timer0() interrupt 1 /* T0中断服务程序 */ if(t=0) /* 1个

6、PWM周期完成后才会接受新数值 */ tmp1=m1; tmp2=m2; if(t<tmp1) en1=1; else en1=0; /* 产生电机1的PWM信号 */ if(t<tmp2) en2=1; else en2=0; /* 产生电机2的PWM信号 */ t+; if(t>=100) t=0; /* 1个PWM信号由100次中断产生 */ /4级速度可调:0、1、2、3; 对应占空比:0、1/4、2/4、3/4#include<reg52.h>sbit key=P36;sbit motor=P24;unsigned char key_scan(void)

7、;void motor_set(unsigned char v) ;void motor_init(void);unsigned char PWM_H=0,n=0,i=0;void main()motor_init();while(1) if (key_scan() = 1)motor_set(i%4);/电机转动void motor_run() interrupt3if(n<PWM_H) motor=1; else motor=0;n+;if(n>=4) n=0;/速度控制,4级速度可调:0、1、2、3; 对应占空比:0、1/4、2/4、3/4void motor_set(unsigned char v)if (v>3) v=3;if (v = 0)TR1 = 0;elseTR1 = 1;PWM_H = v;/电机初始化void motor_init(void)EA=1;ET1=1;TMOD=TMOD & 0X0F | 0x20;/扫描按键unsigned char key_scan(void)unsigned char on =

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论