第十二节单片机驱动电动机.ppt

  1. 1、本文档共41页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
? 步进电机的驱动 ? 四线两相电机: 单片机驱动电动机 单片机驱动电动机 ? 共发射极三极管开关电路 ? 电动机驱动原理 ? 电动机驱动电路及程序设计 ? 步进电机驱动原理 ? 步进电机驱动电路及程序设计 NPN 共发射极电路 直流耦合 不需要偏置 , R 2 保证没 有输入时基极接地 限制输入电流 NPN : 一、从共发射极电路到开关电路的演变 PNP : PNP 共发射极电路 直流耦合 不需要偏置 , R 1 保证没 有输入时基极接高电平 限制输入电流 采用发射极开路的开关三极管电路,作电流驱动: 负载 负载 NPN PNP 二、电动机驱动原理 电动机是电流驱动的元件,需要大电 流通过; 电动机的电气特性相当于线圈,因此 电动机内阻很小。 因为电动机的电气特性相当于线圈,因此可以向电动机 输入脉冲信号,相当于向电动机输入等于脉冲信号平均 值的直流信号。 ? 电动机驱动电路及程序设计 驱动电动机单向转动: 驱动电动机双向转动: A C B D A B C D 作用 0 1 0 1 正向旋转 1 0 1 0 反向旋转 1 1 0 0 刹车 二极管可以防止方向电动势损坏三极管。加上 74LS06 反向缓冲器,可以 提高 IO 口对电动机的驱动能力。 A B 在这个电路图中,当 A=1 、 B=0 ,电动机正向转动;当 A=0 、 B=1 ,电动 机逆向转动,当 A=0 、 B=0 ,电动机停转。 #include <reg51.h> #define uchar unsigned char #define uint unsigned int sbit MA=P2^0; sbit MB=P2^1; sbit ka=P1^0; sbit kb=P1^1; sbit kc=P1^2; bit output, Turn; uint WIDTH, HPWM, PWM, Timerka, Timerkb, Timerkc; 程序设计: // 方向控制按钮 // 加速按钮 // 减速按钮 //WIDTH 为脉冲周期, HPWM 为高电平长度, PWM 为脉冲计时 // 控制电机 A 端 // 控制电机 B 端 //output 为脉冲输出, Turn 为改变方向标志位 // Timerka, Timerkb, Timerkc 为按钮 ka, kb, kc 的计时器 void PWM_init( ) { TMOD=0x21; EA=1; ET0=1; TR0=1; TH0=-(1000/256); TL0=-(1000%6); CLK=1; TimerCLK=20; } // 使用工作在模式 1 的 16 位定时器 0 // 允许中断,允许定时器 0 中断,启动定时器 0 // 定时器 0 的时长为 1ms // 定义脉冲电平和脉宽的初值 输出周期脉冲信号初始化程序: void PWM_init( ) { TMOD=0x22; EA=1; ET0=1; TR0=1; TH0=256-50; TL0=256-50; WIDTH=1000; PWM=WIDTH; HPWM=500; } // 定时器 0 为 8 位自动填充的定时器 // 定时器 0 定时值为 50us // 定时器 0 定时值为 50us 输出周期脉冲信号初始化程序: // 高电平的初值 void keyscan( ) { ka=1; if(ka==0) { Timerka++; if(Timerka>=200) { Timerka=0; Turn=!Turn; } } // 当按键按下时 ka 为 0 // 延时消抖,每 1msTimeKa 加 1 // 当 TimeKa 为 200 时说明已经经过 10ms // 把时钟 Timerka 归零,同时改变电动机转变方向 键盘扫描程序: kb=1; if(kb==0) { Timerkb++; if(Timerkb>=200) { Timerkb=0; if(HPWM==1000) HPWM=1000; else HPWM=HPWM+50; } } // 当按键按下时 kb 为 0 // 延时消抖,每 1msTimekb 加 1 // 当 Timekb 为 200 时说明已经经过 10ms // 把时钟 Timerkb 归零,高电平时长增加 kc=1; if(kc==0) { Timerkc++; if(Timerkc>=500) { Timerkc=0; if(HPWM==0) HPWM=0; else HPWM=HPWM-50; } } } // 当按键按下时 kc 为 0 // 延时消抖,每 1msTimekc 加 1 // 当 Timekc 为 200 时说明已经经过 10ms // 把

文档评论(0)

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

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

1亿VIP精品文档

相关文档