基于C51单片机的直流电机PWM调速控制包含原理图及C源代码_第1页
基于C51单片机的直流电机PWM调速控制包含原理图及C源代码_第2页
基于C51单片机的直流电机PWM调速控制包含原理图及C源代码_第3页
基于C51单片机的直流电机PWM调速控制包含原理图及C源代码_第4页
基于C51单片机的直流电机PWM调速控制包含原理图及C源代码_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

1、基于c51单片机的直流电机pwm调速控制 -sq这是最近一阶段自己学习所获,现分享与大家。这里采用at89c52单片机做主控制芯片,实现两路直流电机的pwm调速控制,另外还可以实现转向、显示运行时间、显示档位等注:考虑小直流电机自身因素,调速范围仅设有四级电路原理图:c语言程序源代码:/* 硬件资源分配*/ 数码管: 显示电机状态(启停、正反、速度)、运行时间、是否转弯按键: k4 启动/暂停 k3 正反转/转弯允许 k2 加速/左转/运行时间清零 k1 减速/右转/停止定时器:t0 数码管动态显示,输出pwmt1 运行时间记录*/ /*主程序文件pwm.c*/#include <reg

2、52.h>#include "afx.h"#include "config.c"#define circle 5 /脉冲周期/按键定义uchar key,key_tmp=0, _key_tmp=0;/显示定义uchar ledstate=0xf0; /led显示标志,0xf0不显示,ox00显示uchar code led_code_d4=0xe0,0xd0,0xb0,0x70; /分别选通1、2、3、4位uchar dispbuf4=0,0,0,0; /待显示数组uchar dispbitcnt=0; /选通、显示的位uchar mstcnt=0

3、;uchar centi_s=0,sec=0,min=0; /分、秒、1%秒 /程序运行状态标志bit motstate=0; /电机启停标志bit dirstate=0;/方向标志 0前,1后uchar state1=-1;uchar state2=-1;uchar state3=0;uchar state4=-1;uchar lspeed=0;uchar rspeed=0;/其他uint runtime=0;uint rtime_cnt=0;uint lwidth;uint rwidth; /脉宽uint widcnt=1;uint dispcnt; /函数声明void key_scan(

4、void);void disbuf(void);void k4(void);void k3(void);void k2(void);void k1(void);void disp( uchar h, uchar n );void main(void) p1|=0xf0;ea=1;et0=1;et1=1;tmod=0x11;th0=0xfc;tl0=0x66; /t0,1ms定时初值th1=0xdb;tl1=0xff; /t1,10ms定时初值tr0=1;widcnt=1;while(1)key_scan();switch(key)case 0x80: k1(); break;case 0x40

5、: k2(); break;case 0x20: k3(); break;case 0x10: k4(); break;default:break;key=0;disbuf();lwidth=lspeed; rwidth=rspeed;/按键扫描*模拟触发器防抖void key_scan(void)key_tmp=(p3)&0xf0;if(key_tmp&&!_key_tmp) /有键按下key=(p3)&0xf0;_key_tmp=key_tmp ; /按键功能处理/逻辑控制void k4(void) if(state4=-1)state4=1;tr1=1;d

6、ispbuf3=1;ledstate=0x00; /打开ledmotstate=1; /打开电机lspeed=1;rspeed=1;/初速设为1else if(state4=1)state4=0;tr1=0;motstate=0; /关闭电机else if(state4=0) motstate=1;if(state3=0)state4=1;tr1=1;else if(state3=1)lspeed=2; rspeed=2; void k3(void)if(state4=1)dirstate=!dirstate;if(state4=0)if(state3=0)state3=1; /可以转向标志

7、1可以,0不可以tr1=1;dispbuf3=9;motstate=1;lspeed=2;rspeed=2;else if(state3=1)state3=0;tr1=0;dispbuf3=0;motstate=0; void k2(void)if(state4=1&&lspeed<4&&rspeed<4)lspeed+;rspeed+;else if(state4=0)if(state3=0)/state4=-1;/ledstate=0xf0; motstate=0;sec=0;min=0;else if(state3=1&&lsp

8、eed<4&&rspeed<4) /turnstate=0;lspeed=2;rspeed+;void k1(void)if(state4=1&&lspeed>1&&rspeed>1)lspeed-;rspeed-;else if(state4=0)if(state3=0)state4=-1;ledstate=0xf0; motstate=0;else if(state3=1&&lspeed<4&&rspeed<4)/turnstate=1;lspeed+;rspeed=2;/显

9、示预处理void disbuf(void) if(rtime_cnt=100)sec+;rtime_cnt=0;if(sec=60)min+;sec=0;if(state4=1)dispbuf0=sec%10; dispbuf1=sec/10; dispbuf2=min;if(!dirstate) /正转 dispbuf3=lspeed;if(dirstate)/反转dispbuf3=lspeed+4; if(state4=0)if(state3=0) dispbuf0=sec%10; dispbuf1=sec/10; dispbuf2=min; dispbuf3=0;if(state3=1)

10、 dispbuf0=rspeed; dispbuf1=lspeed; dispbuf2=min; dispbuf3=9;/led驱动void disp( uchar h, uchar n ) p1=n;p1|=ledstate ;p1|=led_code_dh;/t0中断*显示/方波输出void time_0() interrupt 1 th0=0xfc;tl0=0x66;widcnt+;dispcnt+; /电机驱动/方波输出if(widcnt>circle) widcnt=1; if(widcnt<=lwidth)lmot_p=!dirstate&&motsta

11、te;else lmot_p=dirstate&&motstate; lmot_m=dirstate&&motstate;if(widcnt<=rwidth)rmot_p=!dirstate&&motstate;else rmot_p=dirstate&&motstate;rmot_m=dirstate&&motstate; /显示if(dispcnt=5)disp(dispbitcnt,dispbufdispbitcnt);dispbitcnt+;if(dispbitcnt=4) dispbitcnt=0;dispcnt=0;/t1中断*运行时间void time_1() interrupt 3th1=0xdb;tl1=0xff;rtime_cnt+;/*配置文件afx.h*/#ifndef _afx_#define _afx_typedef unsigned char uchar;typedef unsigned int uint;typedef unsigned long ulong;#endif/*io配置文件config.

温馨提示

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

评论

0/150

提交评论