基于单片机软件实现直流电机PWM以及电机测速

上传人:宝路 文档编号:3395209 上传时间:2017-08-04 格式:DOC 页数:6 大小:100KB
返回 下载 相关 举报
基于单片机软件实现直流电机PWM以及电机测速_第1页
第1页 / 共6页
基于单片机软件实现直流电机PWM以及电机测速_第2页
第2页 / 共6页
基于单片机软件实现直流电机PWM以及电机测速_第3页
第3页 / 共6页
基于单片机软件实现直流电机PWM以及电机测速_第4页
第4页 / 共6页
基于单片机软件实现直流电机PWM以及电机测速_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《基于单片机软件实现直流电机PWM以及电机测速》由会员分享,可在线阅读,更多相关《基于单片机软件实现直流电机PWM以及电机测速(6页珍藏版)》请在金锄头文库上搜索。

1、一、摘要利用 AT89C51 设计一个直流电机的软件模拟 PWM 驱动及测速系统。单片机读取键盘值来设定转速和正反转,并且通过红外对管来测量转速。本系统具有精度高,成本低,使用方便等优点。关键词:AT89C51;PWM;测速。引言随着社会的发展,各种智能化的产品日益走入寻常百姓家。为了实现产品的便携性、低成品以及对电源的限制,小型直流电机应用相当广泛。对直流电机的速度调节,我们可以采用多种办法,本文给出一种用单片机软件实现 PWM 调速的方法及红外对管测转速。二、直流电机调速知道通过调节直流电机的电压可以改变电机的转速,但是一般我们设计的电源大都是固定的电压,而且模拟可调电源不易于单片机控制,

2、数字可调电源设计麻烦。所以这里用脉宽调制(PWM)来实现调速。方波的有效电压跟电压幅值和占空比有关,我们可以通过站空比实现改变有效电压。一般用软件模拟 PWM 可以有延时和定时两种方法,延时方法占用大量的 CPU,所以这里采用定时方法。三、直流电机旋转方向一般利用 H 桥电路来实现调速。H 桥驱动电路:图 4.12 中所示为一个典型的直流电机控制电路。电路得名于“H 桥驱动电路”是因为它的形状酷似字母 H。4 个三极管组成 H 的 4 条垂直腿,而电机就是 H 中的横杠(注意:图 4.12 及随后的两个图都只是示意图,而不是完整的电路图,其中三极管的驱动电路没有画出来)。如图所示,H 桥式电机

3、驱动电路包括 4 个三极管和一个电机。要使电机运转,必须导通对角线上的一对三极管。根据不同三极管对的导通情况,电流可能会从左至右或从右至左流过电机,从而控制电机的转向。 图 4.12 H 桥驱动电路要使电机运转,必须使对角线上的一对三极管导通。例如,如图 4.13 所示,当Q1 管和 Q4 管导通时,电流就从电源正极经 Q1 从左至右穿过电机,然后再经 Q4回到电源负极。按图中电流箭头所示,该流向的电流将驱动电机顺时针转动。当三极管 Q1 和 Q4 导通时,电流将从左至右流过电机,从而驱动电机按特定方向转动(电机周围的箭头指示为顺时针方向)。图 4.13 H 桥电路驱动电机顺时针转动图 4.1

4、4 所示为另一对三极管 Q2 和 Q3 导通的情况,电流将从右至左流过电机。当三极管 Q2 和 Q3 导通时,电流将从右至左流过电机,从而驱动电机沿另一方向转动(电机周围的箭头表示为逆时针方向)。 图 4.14 H 桥驱动电机逆时针转动可以把 Q1 跟 Q4 接在一起,Q3 跟 Q2 接在一起,这样只要两个单片机 I/O 口就行。下面的程序中 lun1、lun2 就表单片机的两个 I/O 口。这个桥式电路图只用来说明原理,实际应用还要看电机的额定电压、电流。也可以用 L293、L298 直流的集成芯片。四、PWM 程序void timer0() interrupt 1 if(temp)TH0=

5、time_h_0;TL0=time_l_0;/设置低电平时间temp=0;elseTH0=time_h_1;TL0=time_l_1;/设置高电平时间,可以通过键盘设定来达到调速功能。temp=1;T0_count+ ;/作测速定时用/这样定时在两个时间里变化起到类似两个定时器的作用/ qianjin 从键盘读取if(qianjin=1) /正转lun1=temp;lun2=1;/低电平有效else if(qianjin=2) /反转lun1=1;lun2=temp;else if(qianjin=3) /停止lun1=1;lun2=1;这样就可以实现直流电机正反转和调速。当然键盘程序比较简单

6、,篇幅所限,不详细给出。五、测速通过红外对管来测量轮子转速,电路图如下:测速可以分 3 种:测频法、测周法和测频侧周混合法。这里我只介绍测频法,因为已经用了一个定时器,可以在这个定时器基础上设定时间,程序中T0_count 就是时间变量。若要用侧周法,会有一个误差,主要来自定时器的误差。时间定了后接下来要测脉冲数,可以用计数器或者外部中断,采用计数器比较方便。程序:if(T0_count=125)TR1 =0; /关闭计数器T0_count =0; int_h =TH1; /T1 计数缓冲单元int_l =TL1;TH1 =0; /清计数器TL1 =0;T1_count =0;TR1 =1;

7、/开启计数器/ Time1 中断服务函数/ 对 T1 溢出产生中断的次数进行计数/ 计满 65535,产生一次溢出中断void timer1() interrupt 3/因为电机转速实际测量中电机转速并不超过 65536 的计数,所以不会进入中断。不然可以/用一个变量来计数显然转速=(int_h*256+ int_l)/ 125*PWM 脉冲周期。这里有一个误差需要修正,因为进入定时中断需要进行进行压栈等工作所以会有一定误差。摘取进入定时器中断的反汇编程序:78: void timer0() interrupt 1 79: 80: C:0x0250 C0E0 PUSH ACC(0xE0)C:0

8、x0252 C0D0 PUSH PSW(0xD0)81: if(temp) C:0x0254 30.000A JNB temp(0x20.0),C:026182: 83: TH0=time_h_0; C:0x0257 85088C MOV TH0(0x8C),time_h_0(0x08)84: TL0=time_l_0; C:0x025A 850A8A MOV TL0(0x8A),time_l_0(0x0A)85: temp=0; C:0x025D C200 CLR temp(0x20.0)86: 87: else C:0x025F 800A SJMP C:026B88: 89: TH0=ti

9、me_h_1; C:0x0261 85098C MOV TH0(0x8C),time_h_1(0x09)90: TL0=time_l_1; C:0x0264 850B8A MOV TL0(0x8A),time_l_1(0x0B)91: temp=1; C:0x0267 D200 SETB temp(0x20.0)92: T0_count+ ; C:0x0269 050C INC T0_count(0x0C)93:显然在进入中断后首先要进行 ACC 和 PSW 压栈,这里需要 4 个机器周期。接着要判断是否 temp=1,用到 JNB 指令需要 2 个机器周期。另外还有两个 MOV 指令。把这些时间算进去后,精度就会比较高。估计在 4000hz 情况下测到的是4006hz 左右,这里的误差可能是中断响应需要一定时间,可以通过加上 7、8个机器周期来修正。最后能得到 4000hz 以内误差只在 1hz。六、结论本系统实现了直流电机的转速、方向的设定和转速的测量,而且测速精度非常高。参考文献1、古欣 朱岩 王智涌 喻巧群 原瑞花,自动寻迹小车2、http:/

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 调研报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号