网站大量收购独家精品文档,联系QQ:2885784924

基于C51单片机的直流电机PWM调速控制(包含原理图及C源代码).doc

基于C51单片机的直流电机PWM调速控制(包含原理图及C源代码).doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于C51单片机的直流电机PWM调速控制 --SQ 这是最近一阶段自己学习所获,现分享与大家。 这里采用AT89C52单片机做主控制芯片,实现两路直流电机的PWM调速控制,另外还可以实现转向、显示运行时间、显示档位等 注:考虑小直流电机自身因素,调速范围仅设有四级 电路原理图: C语言程序源代码: /******************** 硬件资源分配*********************/ 数码管: 显示电机状态(启停、正反、速度)、运行时间、是否转弯 按键: K4 启动/暂停 K3 正反转/转弯允许 K2 加速/左转/运行时间清零 K1 减速/右转/停止 定时器: T0 数码管动态显示,输出PWM T1 运行时间记录 ********************************************************/ /*******主程序文件PWM.c******/ #include reg52.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_d[4]={0xe0,0xd0,0xb0,0x70}; //分别选通1、2、3、4位 uchar dispbuf[4]={0,0,0,0}; //待显示数组 uchar dispbitcnt=0; //选通、显示的位 uchar mstcnt=0; 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(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: 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; dispbuf[3]=1; LedState=0x00; //打开LED MotState=1

文档评论(0)

pangzilva + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档