用单片机控制直流电动机的正反转
51单片机直流电机反转
51单片机直流电机反转在现代工业生产中,直流电机作为一种重要的动力装置,广泛应用于各种机械设备中。
其中,电机的正反转控制是直流电机应用中的一个重要环节。
本文将以为主题,探讨其原理与实现方法。
直流电机是将电能转换为机械能的装置,其结构简单、运行可靠,在工业生产中应用广泛。
在很多情况下,需要对电机进行正反转控制,以满足不同的工作需求。
而使用51单片机进行直流电机反转控制,是一种简单有效的方法。
首先,我们需要了解直流电机的结构与工作原理。
直流电机主要由定子、转子和碳刷组成。
当定子上通入直流电流时,形成一个磁场,引起转子旋转。
电机的正反转实际上就是改变定子磁场方向的问题。
通过改变定子和转子之间的相对位置,可以实现电机的正反转。
在51单片机直流电机反转控制中,一般采用H桥驱动电路。
H桥电路由四个晶体管组成,可以实现电机的正反转控制。
通过控制H桥中各个晶体管的导通与断开,可以改变电机的正反转方向。
在实际应用中,需要根据具体需求设计合适的控制算法。
控制算法的设计涉及到脉宽调制、速度控制、位置控制等方面。
通过合理设计算法,可以实现对直流电机的精确控制。
另外,在51单片机直流电机反转控制中,还需要考虑到电机的保护问题。
在工作过程中,电机可能会出现过载、过热等情况,需要设置相应的保护装置,以保证电机的安全运行。
让我们总结一下本文的重点,我们可以发现,51单片机直流电机反转控制是一种简单有效的方法,通过合理设计控制算法和保护装置,可以实现对直流电机的精确控制。
在工业生产中,这种控制方法具有重要的应用价值,可以提高生产效率,降低能耗成本,值得进一步研究与推广。
单片机控制直流电机正反转
目录第1章总体设计方案 (1)1.1 总体设计方案 (1)1.2 软硬件功能分析 (1)第2章硬件电路设计 (2)2.1 单片机最小系统电路设计 (2)2.2直流电机驱动电路设计 (2)2.3 数码管显示电路设计 (4)2.4 独立按键电路设计 (5)2.5 系统供电电源电路设计 (5)2.5.1直流稳压电路中整流二极管的选取: (6)2.5.2直流稳压电路中滤波电容的选取: (6)第3章系统软件设计 (7)3.1 软件总体设计思路 (7)3.2 主程序流程设计 (7)附录1 总体电路图 (10)附录2 实物照片 (11)附录3 C语言源程序 .......................................12实习报告第1章总体设计方案1.1 总体设计方案早期直流传动的控制系统采用模拟分离器件构成,由于模拟器件有其固有的缺点,如存在温漂、零漂电压,构成系统的器件较多,使得模拟直流传动系统的控制精度及可靠性较低。
随着计算机控制技术的发展,微处理器已经广泛使用于直流传动系统,实现了全数字化控制。
由于微处理器以数字信号工作,控制手段灵活方便,抗干扰能力强。
所以,全数字直流调速控制精度、可靠性和稳定性比模拟直流调速系统大大提高。
所以,本次实习采用了驱动芯片来驱动直流电机,并运用单片机编程控制加以实现。
系统设计采用驱动芯片来控制的,所以控制精度和可靠性有了大幅度的提高,并且驱动芯片具有集成度高、功能完善的特点,从而极的大简化了硬件电路的设计。
图1.1 直流电机定时正反转方案1.2 软硬件功能分析本次实习直流电机控制系统以STC89C52单片机为控制核心,由按键输入模块、LED显示模块及电机驱动模块组成。
采用带中断的独立式键盘作为命令的输入,单片机在程序控制下,定时不断给L293D直流电机驱动芯片发送PWM波形,H 型驱动电路完成电机正,反转控制;同时单片机不停的将变化的定时时间送到LED数码管完成实时显示。
单片机控制的直流电机正反转和加速减速C程序
单片机控制的直流电机正反转和加速减速C程序简介本文档旨在向读者介绍如何使用单片机控制直流电机实现正反转和加速减速功能的C程序。
程序实现正反转控制以下是控制直流电机正反转的C程序示例:include <avr/io.h>void motor_forward(){// 设置引脚控制直流电机正转}void motor_reverse(){// 设置引脚控制直流电机反转}int main(){// 初始化单片机引脚设置和其他必要的配置while (1){// 检测是否需要正转或反转,根据需要调用motor_forward()或motor_reverse()函数}return 0;}加速减速控制以下是控制直流电机加速减速的C程序示例:include <avr/io.h>void motor_speed_up(){// 调整引脚控制直流电机的占空比以加速电机转速}void motor_slow_down(){// 调整引脚控制直流电机的占空比以减速电机转速}int main(){// 初始化单片机引脚设置和其他必要的配置while (1){// 检测是否需要加速或减速,根据需要调用motor_speed_up()或motor_slow_down()函数}return 0;}结论通过上述示例程序,我们可以实现通过单片机控制直流电机的正反转和加速减速功能。
读者可以根据实际需求进行相应的参数调整和功能扩展。
请注意,上述示例程序仅为演示目的,具体的引脚配置和控制方式需根据实际硬件和单片机型号进行调整。
单片机控制直流电动机调速和正反转
指导教师评定成绩:审定成绩:重庆邮电大学移通学院课程设计报告设计题目:单片机控制直流电动机调速和正反转学校:重庆邮电大学移通学院学生姓名:魏星玥专业:电气工程与自动化班级:05131101学号:0513110105指导教师:杨佳义设计时间:2013 年12 月重庆邮电大学移通学院目录综述 (3)一、直流电动机的工作原理 (4)二、直流电动机的结构 (5)三、直流电动机的分类 (6)四、电动机的机械特性 (7)五、他励直流电动机起动与调速 (8)六、直流电机H桥驱动电路 (14)七、PWM的控制技术 (19)八、直流电动机调速系统的设计 (21)九、心得体会 (27)参考文献 (28)综述直流电动机是人类最早发明和应用的一种电机。
直流电机可作为电动机用,也可作为发电机用。
直流电动机是将直流电转换成机械能的而带动生产机械运转的电器设备。
与交流电动机相比,直流机因结构复杂、维护困难、价格较贵等缺点制约了它的发展,但是它具有良好的起动、调速和制动性能,因此在速度调节要求较要、正反转和起动频繁或多个单元同步协调运转的生产机械上,仍广泛采用直流电动机拖动。
在工业领域直流电动机仍占有一席之地。
因此有必要了解直流电动的运行特性。
在四种直流电动机中,他励电动机应用最为广泛。
一、直流电动机的工作原理如图1-1所示,电枢绕组通过电刷接到直流电源上,绕组的转轴与机械负载相连,这是便有电流从电源正极流出,经电刷A流入电枢绕组,然后经过电刷B 流回电源的负极。
在图1-1所示位置,在N级下面导线电流是由a到b,根据左手定则可知导线ab受力的方向向左,而cd的受力方向是向右的。
当两个电磁力对转轴所形成的电磁转矩大于阻转矩是,电动机逆时针旋转。
当线圈转过180度时,这是导线的电流方向变为由d到c和b到a,因此电磁转矩的方向仍然是逆时针的 ,这样就使得电机一直旋转下去。
图1-1 直流电动机的工作原理图二、直流电动机的结构直流电机由定子、转子和机座等部分构成。
51单片机控制直流电机设计
单片机控制小功率直流电机一. 设计要求:用单片机控制直流电机加速、减速、正反转和停止。
二. 设计方案分析1、方案设计:直流电机只要能提供一定的直流就可以转动,改变电压极性可以改变转动方向,可以通过给直流电机提供脉冲信号来驱动它,脉冲信号的占空比可以影响到直流电机的平均速度,因此可以通过调整占空比从而能实现调速的目的。
直流电机的驱动电路要有过流保护作用,可用二极管来实现,另外电机的驱动电流是比较大的所以需要用三极管来放大电流。
程序的关键就是如何实现占空比的调整,这个可以通过对51单片机定时器重装初值进行改变,从而改变时间。
设计中用到的元件:STC89C52、晶振(12MHz)、小按键、三极管、二极管、电容、电阻等。
2、背景知识介绍:直流电机调速原理本设计的主要思想为利用PWM控制占空比从而达到改变电机速度。
下面为PWM控制原理;图1为PWM降压斩波器的原理电路及输出电压波形。
在图1a中,假定晶体管V1先导通T1,秒(忽略V1的管压降,这期间电源电压Ud全部加到电枢上),然后关断T2秒(这期间电枢端电压为零)。
如此反复,则电枢端电压波形如图1b中所示。
电动机电枢端电压Ua为其平均值。
图1 PWM降压斩波器原理电路及输出电压波形a) 原理图 b)输出电压波形 1112a d d d T T U U U U T T Tα===+ (3) 式(3)中1112T T T T Tα==+ (4)α为一个周期T 中,晶体管V1导通时间的比率,称为负载率或占空比。
使用下面三种方法中的任何一种,都可以改变α的值,从而达到调压的目的:(1)定宽调频法:T1保持一定,使T2在0~∞范围内变化;(2)调宽调频法:T2保持一定,使T1在0~∞范围内变化(3)定频调宽法:T1+T2=T 保持一定,使T ,在0~T 范围内变化。
不管哪种方法,α的变化范围均为0≤α≤l ,因而电枢电压平均值Ua 的调节范围为0~Ud ,均为正值,即电动机只能在某一方向调速,称为不可逆调速。
单片机控制直流动机调速正反转
指导教师评定成绩:审定成绩:重庆邮电大学移通学院课程设计报告设计题目:单片机控制直流电动机调速和正反转学校:重庆邮电大学移通学院学生姓名:魏星玥专业:电气工程与自动化班级:05131101学号:0513110105指导教师:杨佳义设计时间:2013 年12 月重庆邮电大学移通学院目录综述 (3)一、直流电动机的工作原理 (4)二、直流电动机的结构 (5)三、直流电动机的分类 (6)四、电动机的机械特性 (7)五、他励直流电动机起动与调速 (8)六、直流电机H桥驱动电路 (14)七、PWM的控制技术 (19)八、直流电动机调速系统的设计 (21)九、设计结论····························十、心得体会····························参考文献·······························综述直流电动机是人类最早发明和应用的一种电机。
基于单片机的直流电机控制(正反转、开关控制)
基于单片机的直流电机控制(正反转,开关控制)原理图如下:程序如下:/*用电机来代表门的转动情况*/#include <reg51.h>//定义变量sbit kaimen=P0^0;sbit zanting=P0^1;sbit fanxiang=P0^2;sbit P2_0=P2^0;sbit P2_1=P2^1;bit Flag = 1;//定义电机正反向标志//函数声明void motor_turn(void); //正反向控制void Timer0_init(void); //定义定时器0初始化/******************************延时处理***************************/void Delay(unsigned int z){unsigned int x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}/***************************************************************/void Timer0_int(void) interrupt 1 using 1//定时器0中断处理主要用来处理换方向的时候{TR0 = 0;TL0=(65536-50000)/ 256; //定时50msTH0=(65536-50000)% 256;TR0 = 1;if(Flag == 1)//代表改变方向{P2_0 = 0;P2_1 = 1;}else //方向不变{P2_1 = 0;P2_0 = 1;}}/****************开始转动:人满时候开始转动**************/void motor_start(void){ if(kaimen==1){//Delay(10);if(kaimen==1){P2_0 = 0;P2_1 = 1;}}}/***************有人但是人未满时或者有夹到人的时候暂停*************/void motor_pause(void){ if(zanting==1){Delay(10);if(zanting==1){EA=0;P2_0 = 0;P2_1 = 0;}}}/**********************电机方向转动**************************/ void motor_turn(void)//电机反向转动{if(fanxiang == 1){Delay(10);if(fanxiang == 1){Flag = ~Flag;}while(fanxiang == 1);}}/***********************定时器0初始化**************************/ void Timer0_init(void)//定时器0初始化{TMOD=0x01;TH0=(65536-50000)/ 256;TL0=(65536-50000) % 256;TR0=1;ET0=1;}/**********************主函数***********************/void main(void)//主函数{Timer0_init();while(1){ if(kaimen==1)EA=1; //开始时候开启中断motor_start();motor_pause();motor_turn();}}。
51单片机直流电机正转反转停止实验
51单片机直流电机正转反转停止实验- C51源代码
#include<reg52.h>
sbit Key_it Key_DOWN=P3^3;//反转按键对应实验板上的K2
sbit Key_STOP=P3^4;//停止键对应实验板上的K3
BEEP=!BEEP; //BEEP取反
}
BEEP=1; //关闭蜂鸣器
Delay(250); //延时
}
void main()
{
FZ=1;
ZZ=1;
while(1){
if (!Key_UP)
KeyV = 1;
if (!Key_DOWN)
KeyV = 2;
if (!Key_STOP)
KeyV = 3;
sbit ZZ=P1^0;//控制端
sbit FZ=P1^1;//控制端
sbit BEEP = P3^6; //蜂鸣器控制端口P36
unsigned char KeyV,TempKeyV;
void Delay(unsigned int ii)
{
unsigned int jj;
for(;ii>0;ii--)
if (KeyV!= 0)
{
Delay(10);
if (!Key_UP)
TempKeyV = 1;
if (!Key_DOWN)
TempKeyV = 2;
if (!Key_STOP)
TempKeyV = 3;
if (KeyV == TempKeyV)
{
if (KeyV == 1){
beep();
ZZ=1;
FZ=0;
}
单片机驱动直流电机正反转程序
(1)主程序main.c#include<reg51.h>#include"ds1302.h"sbit Xianwei1=P1^0;sbit Xianwei2=P1^1;sbitMotor_A=P1^2;sbitMotor_B=P1^3;sbitMotor_EN=P1^4;unsigned char Num=0;unsigned intdisp[8]={0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f};/*//---存储顺序是秒分时日月周年,存储格式是用BCD码---//uchar TIME[7] = {0, 0, 0x12, 0x01, 0x01, 0x02, 0x13};*/void main(){uchar state=0;Motor_A=1;Motor_B=1;Motor_EN=0;Ds1302Init();while(1){Ds1302ReadTime();if((TIME[2]==0x06)&&(TIME[1])==0) //06:00{state++;if(state>2)state=1;}if(state==1){while(Xianwei1!=0){Motor_A=1; //正转Motor_B=0;Motor_EN=1;}}if(state==2){while(Xianwei2!=0){Motor_A=0; //反转Motor_B=1;Motor_EN=1;}}}}(2)ds1302.h#ifndef __DS1302_H_#define __DS1302_H_//---包含头文件---//#include<reg51.h>#include<intrins.h>//---重定义关键词---//#ifndefuchar#define uchar unsigned char#endif#ifndefuint#define uint unsigned int#endif//---定义ds1302使用的IO口---//sbit DSIO=P3^4;sbit RST=P3^5;sbit SCLK=P3^6;//---定义全局函数---//void Ds1302Write(ucharaddr, uchardat); uchar Ds1302Read(ucharaddr);void Ds1302Init();void Ds1302ReadTime();//---加入全局变量--//extern uchar TIME[7]; //加入全局变量(3)ds1302.c#include"ds1302.h"//---DS1302写入和读取时分秒的地址命令---////---秒分时日月周年最低位读写位;-------//uchar code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d}; uchar code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};//---DS1302时钟初始化2013年1月1日星期二12点00分00秒。
L298N控制直流电机正反转
98推 介Design L298N控制直流电机正反转文/张天鹏 徐磊 北京林业大学工学院摘要:在分析了直流电机驱动芯片 L298N 的性能、结构的基础上,结合 SPCE061A EMU BOARD单片机(61板),介绍实现驱动直流电机的转正反一种简单方法.文中给出了控制原理图,还给出来了控制直流电机正反转驱动程序。
实际测试表明,利用该方法设计的直流电机驱动系统具有硬件结构简单、软件编程容易。
关键词:直流电机 单片机 L298N一、背景介绍(一)预备知识1.熟悉凌阳单片机的工作原理。
2.熟悉键盘扫描原理和L298n驱动电机原理。
3.熟悉汇编语言及C语言。
(二)直流电机控制原理对于普通直流电机,其控制方法比较简单,只需给电机的两根控制线加上适当的电压即可使电机转动起来,电压越高则电机转速越高。
对于直流电机的速度调节,可以采用改变电压的方法,也可采用PWM调速方法。
PWM调速就是使加在直流电机两端的电压为方波形式,加在电机两端的电压就在VLoad和0V之间不停的跳变,对应的电机电压波形如图 1 所示:图1 PWM调速原理图此时加在电机两端的平均电压Uo=Th/(Th+Tl)*VLoad,可以通过调整PWM的占空比来改变Th和Tl的比值。
这样就可以通过PWM调节加在电机两端的平均电压,从而改变电机的转速。
与步进电机类似,不能将单片机的I/O直接与直流电机的引线相接,而要在二者之间增加驱动电路。
也可利用L298N电机驱动芯片实现直流电机驱动(注:我们小组在本次试验中采用L298N芯片驱动直流电机正反转)。
(三)L298N芯片资料恒压恒流桥式2A驱动芯片L298N:L298是SGS公司的产品,比较常见的是15脚Multiwatt封装的L298N,内部同样包含4通道逻辑驱动电路。
可以方便的驱动两个直流电机,或一个两相步进电机。
L298N芯片可以驱动两个二相电机,也可以驱动一个四相电机,输出电压最高可达50V ,可以直接通过电源来调节输出电压;可以直接用单片机的I O口提供信号;而且电路简单,使用比较方便。
单片机控制直流电机正反转
目录第1章总体设计方案 (1)1.1 总体设计方案 (1)1.2 软硬件功能分析 (1)第2章硬件电路设计 (2)2.1 单片机最小系统电路设计 (2)2.2直流电机驱动电路设计 (2)2.3 数码管显示电路设计 (4)2.4 独立按键电路设计 (5)2.5 系统供电电源电路设计 (5)2.5.1直流稳压电路中整流二极管的选取: (6)2.5.2直流稳压电路中滤波电容的选取: (6)第3章系统软件设计 (7)3.1 软件总体设计思路 (7)3.2 主程序流程设计 (7)附录1 总体电路图 (10)附录2 实物照片 (11)附录3 C语言源程序 (12)第1章总体设计方案1.1 总体设计方案早期直流传动的控制系统采用模拟分离器件构成,由于模拟器件有其固有的缺点,如存在温漂、零漂电压,构成系统的器件较多,使得模拟直流传动系统的控制精度及可靠性较低。
随着计算机控制技术的发展,微处理器已经广泛使用于直流传动系统,实现了全数字化控制。
由于微处理器以数字信号工作,控制手段灵活方便,抗干扰能力强。
所以,全数字直流调速控制精度、可靠性和稳定性比模拟直流调速系统大大提高。
所以,本次实习采用了驱动芯片来驱动直流电机,并运用单片机编程控制加以实现。
系统设计采用驱动芯片来控制的,所以控制精度和可靠性有了大幅度的提高,并且驱动芯片具有集成度高、功能完善的特点,从而极的大简化了硬件电路的设计。
图1.1 直流电机定时正反转方案1.2 软硬件功能分析本次实习直流电机控制系统以STC89C52单片机为控制核心,由按键输入模块、LED显示模块及电机驱动模块组成。
采用带中断的独立式键盘作为命令的输入,单片机在程序控制下,定时不断给L293D直流电机驱动芯片发送PWM波形,H型驱动电路完成电机正,反转控制;同时单片机不停的将变化的定时时间送到LED数码管完成实时显示。
第2章硬件电路设计2.1 单片机最小系统电路设计单片机最小系统设计是单片机应用系统设计的基础。
单片机控制直流电机正反转
case 3: controlleft();
break;
}
}
}
/*************定时器0中断1工作方式**************/
void timer0()interrupt 1
{
TH0=(65536-6000)/256;
TL0=(65536-6000)%256;
pwm1++;
pwm2++;
}
void delay(uchar z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
ena=1;
enb=1;
}
while(~P0)
// delay(5);
// while(~P0)
return;
}
}
/********后退函数*****/
void houtui()
{
in1=1;
in2=0;
in3=1;
in4=0;
ena=1;
enb=1;
a=19;
while(1)
{
if(pwm1==a)
{
ena=0;
enb=0;
}
if(pwm1==20)
{
pwm1=0;
ena=1;
void delay(uchar);
/*************位声明函数**************/
sbit in1=P0^1;//控制左边轮子
sbit in2=P0^2;
单片机控制直流电机正反转调速--基础简单实现
单片机控制直流电机正反转调速--基础简单实现
如何使用单片机控制直流电机呢?
真正控制之前我们要知道以下三点:
1、直流电机的控制是通过设置PWM波的占空比来控制直流电机的转速,占空比越大,转速越快,越小转速越低。
2、单片机的I/O口是不能直接驱动电机的,所以你还需要用一个驱动芯片。
像LG9110、CMO825L298等。
驱动芯片可以将单片机I/O输出信号放大,这样电机中流过的电流足够大,电机才能转起来。
本文采用的是L298
3、为了实现调节转速功能必须来个滑动变阻器和数模转化器
ADC0831,同时使用开关控制电机正反转。
开始行动~
OK一切就绪。
单片机实现直流电机测速和正反转
4.2.2单元电路设计原理。
(1)电源模块设计
使用220V转±15V,再使用集成稳压芯片LM7805将电压稳定至所需。
电源原理图见图2
图2
(2)单片机核心控制模块
系统采用单片机STC89C52RD为中心控制器件,显示部分采用液晶显示屏显示。控制系统采用5V电源供电,外接11.0592MHz晶振。
西南科技大学
自动化专业方向设计报告
设计名称:直流电机数控器设计与制作
姓 名:汪少华
学 号:20105191
班 级:电气1002
指导教师:聂诗良
起止日期:2013.10.19-2013.11.9
西南科技大学信息工程学院制
方向设计任务书
学生班级:电气1002班学生姓名:汪少华学号:20105191
设计名称:直流电机(12,0,temp);
}
if(ENA==0)
{
sprintf(temp,"STO",SPEED);
LCD_Write_String(12,1,temp);
}
}
/*---------------------------------------
按键扫描
---------------------------------------*/
电源模块
①使用电压源供电,可提供较稳定,精确电源,缺点是电压源体积太大,不利于设计的小体积要求。
②使用220V转±15V,再使用集成稳压芯片LM7805将电压稳定至所需,缺点是散热不易,需加装散热片,体积小。
显示模块
①采用数码管动态显示,但显示的内容有限,不丰富。
②采用LED点阵显示,但需要的I/O资源较多。
单片机控制直流电动机调速和正反转
指导教师评定成绩:审定成绩:重庆邮电大学移通学院课程设计报告设计题目:单片机控制直流电动机调速和正反转学校:重庆邮电大学移通学院学生姓名:魏星玥专业:电气工程与自动化班级:05131101学号:0513110105指导教师:杨佳义设计时间:2013 年12 月重庆邮电大学移通学院目录综述 (3)一、直流电动机的工作原理 (4)二、直流电动机的结构 (5)三、直流电动机的分类 (6)四、电动机的机械特性 (7)五、他励直流电动机起动与调速 (8)六、直流电机H桥驱动电路 (14)七、PWM的控制技术 (19)八、直流电动机调速系统的设计 (21)九、设计结论····························十、心得体会····························参考文献·······························综述直流电动机是人类最早发明和应用的一种电机。
单片机课设PWM控制微型直流电机调速、正反转、启停
永磁直流电动机划分:稀土永磁直流电动机、铁氧体永磁直流电动机和铝镍钴永磁直流电动机。稀土永磁直流电动机:体积小且性能更好,但价格昂贵,主要用于航天、计算机、井下仪器等;铁氧体永磁直流电动机:由铁氧体材料制成的磁极体,廉价,且性能良好,广泛用于家用电器、汽车、玩具、电动工具等领域;铝镍钴永磁直流电动机:需要消耗大量的贵重金属、价格较高,但对高温的适应性好,用于环境温度较高或对电动机的温度稳定性要求较高的场合。
1.2
任务:1.通过单片机产生可调的PWM信号驱动微型直流电机;
2.通过按钮可控制电机启停、正反转以及加减速;
3.显示电机的工作状态以及速度档位。
要求:进行控制系统硬件电路设计,编写程序、画出电路原理图、利用proteus进行仿真。
1.3
硬件:keil和proteus软件、PC机一台
开发语言:C语言
对51系列单片机来说,最小系统一般应该包括:单片机、复位电路、晶振电路。 复位电路:使用了独立式键盘,单片机的P1口键盘的接口。考虑到对控制功能的扩展,本设计使用了6路独立式键盘。复位电路采用手动复位,所谓手动复位,是指通过接通一按钮开关,使单片机进入复位状态,晶振电路用30PF的电容和一个12M晶体振荡器组成为整个电路提供时钟频率。89C51单片机的时钟信号通常用两种电路形式电路得到:内部震荡方式和外部中断方式。在引脚XTAL1和XTAL2外部接晶振电路器(简称晶振)或陶瓷晶振器,就构成了内部晶振方式。由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自激振荡器并产生振荡时钟脉冲。其电容值一般在5~30pf,晶振频率的典型值为12MHz,采用6MHz的情况也比较多。内部振荡方式所得的时钟信号比较稳定,实用电路实用较多。复位及时钟振荡电路如图3.2.1所示。
用单片机控制直流电机正反转的系统设计
用单片机控制直流电机正反转的系统设计一、系统设计内容用单片机AT89C51控制直流电机正反转。
在此将由89C51的P2.0、P2.1通过晶体管控制继电器,当P2.0输出低电平,P2.1输出高电平时,三极管Q1导通,而三极管Q2截止,从而导致与Q1相连的继电器吸合,电机因两端产生电压而转动。
由P3.0、P3.1,P3.2控制电机的正转、反转和停止。
在图中,在两个继电器的两端都反向接了一个二极管,这非常重要,当使用电磁继电器时必须接。
原因如下:线圈通电正常工作时,二极管对电路不起作用。
当继电器线圈在断电的一瞬间会产生一个很强的反向电动势,在继电器线圈两端反向并联二极管就是用来消耗这个反向电动势的,通常将这个二极管称为消耗二极管,如果不加这个消耗二极管,反向电动势就会直接作用在趋动三极管上,很容易将三极管烧毁。
二、系统设计目标(1)掌握趋动电机正反转的电路。
(2)用PROTEUS实现电机正反转电路的设计,进行实时交互仿真。
三、系统设计步骤1、PROTEUS电路设计实现用单片机A T89C51控制直流电机正反转原理图,如图所示。
(1)选取元器件:①单片机:A T89C51②电阻:RES③直流电机:MOTOR④按钮:BUTTON⑤三极管:NPN⑥继电器:RELAY⑦二极管:DIODE(2)放置元器件、放置电源和地、连线、元器件属性设置。
直流电机正反转的原理如图所示,整个电路设计操作都在ISIS平台中进行。
关于元器件属性的设置在此实例中需要特别注意:①三极管基极的限流电阻更改为1KΩ。
②双击电机图标,弹出如图所示的电机属性对话框,在Nominal V oltage 一栏中将默认值改为5V。
双击继电器图标,在弹出如图所示的继电器属性对话框中,在Component Value 一栏中将默认值更改为5V。
2、源程序设计与目标代码文件生成1)程序流程图2)源程序设计①汇编语言源程序:ORG 0000HLJMP MAINORG 0030HMAIN: MOV A,P3ANL A,#07HCJNE A,#6,PZZMOV P2,#01HLCALL DELAYAJMP MAINPZZ: CJNE A,#5,PFZMOV P2,#02HLCALL DELAYAJMP MAINPFZ: CJNE A,#3,MAINMOV P2,#03HLCALL DELAYDELAY: MOV R5,#195C1: MOV R6,#255DJNZ R6,$DJNZ R5,C1RETEND3、PROTEUS仿真加载目标代码文件俺,双击编辑窗口的A T89C51器件,在弹出属性编辑对话框Program File 一栏中单机打开按钮,出现文件浏览对话框,找到dianji.hex文件,单机“打开”按钮,完成添加文件。
单片机控制电机正反转接线方法及运用
如何用单片机控制电机正转、反转?电机在日常使用中需要正反转,可以说电机的正反转在广泛使用。
例如行车、木工用的电刨床、台钻、刻丝机、甩干机、车床等。
本文以大功率双路PWM直流电机驱动器驱动有刷直流电机为例,讲述如何用单片机控制直流电机正反转。
该驱动器可以同时控制两个电机正反转,可以使用一个单片机分别控制两个电机正反转,广泛应用于玩具、小车、机器人等项目,可以灵活控制小车等正、反转,控制方式简便、安全可靠,方便维护。
使用单片机控制电机转动的接线方法如图1所示。
单片机的电源与驱动板控制信号电源应共地,但不要与电机电源PGND共地。
当使用5V单片机时,驱动板+5V接电源+5V;当使用3.3V单片机时,驱动板+5V接电源+3.3V。
单片机和驱动板控制信号可共用一电源或各自独立供电(但一定要共地)。
ENA为与单片机的一个GPIO或PWM输出端口相连,当ENA为高电平时,驱动板使能,正反转或刹车有效,如果是PWM信号,那么可对电机进行调速;低电平时,驱动板禁能,电机接口无输出。
IN1和IN2与单片机的两个GPIO相连(可支持51单片机任意IO端口,无需上拉电阻),控制电机正反转及刹车,驱动逻辑见表1。
6.8-26V电源+5VIN1IN2GNDPGND9-24VMOUT2OUT1 ENA单片机IO1/PWM IO2IO3GND5V/3.3VVCC图错误!文档中没有指定样式的文字。
使用单片机控制电机转动接线示意图表错误!文档中没有指定样式的文字。
电机接口1控制信号逻辑此驱动器适用于有刷直流电机,可以同时控制两个电机工作。
第二路电机相关信号的连接方法于以上方式相同,此接线方式只需要使用一个单片机,即可分别控制两个电机的正、反转,操作方便灵活。
下图为有刷直流电机驱动器正面:。
单片机课程设计报告 电机正反转
C51课程设计报告设计课题:正反转可控的直流电动机设计要求:按下K1时可使直流电动机正转,按下K2时可使直流电动机反转,按下K3按钮时停止,在进行相应的操作时,对应LED 将被点亮。
设计目的:通过这次课程设计,进一步巩固我们对单片机编程的掌握,自己学会调试;同时向老师反映我们学习中不足的地方经过调试,最终得到如下程序:#include<reg51.h>sbit K1=P3^0; //正转开关sbit K2=P3^1; //反转开关sbit K3=P3^2; //停止开关sbit P1_0=P1^0;sbit P1_1=P1^1;sbit D1=P0^0;sbit D2=P0^1;sbit D3=P0^2; //端口位定义void main(){P1_0=0; P1_1=0; D3=0;while(1){if(K1==0) //按下正转按钮K1{while(K1==0); //等待K1按下结束,即断开K1P1_1=0; P1_0=1; //禁止反转,启动正转D2=1;D3=1; D1=0; //关闭反转指示灯D2与停止指示灯D3,点亮正转指示灯D1}else if(K2==0) //按下反转按钮K2{while(K2==0); //等待K2按下结束,即断开K2P1_0=0;P1_1=1; //禁止正转,开始反转D1=1;D3=1;D2=0; //关闭穤正转指示灯D1与停止指示灯D3,点亮反转指示灯D2}else if(K3==0) //按下停止按钮K3{while(K3==0); //等待K3按下结束,即断开K3P1_0=0; P1_1=0; //停止正转与反转D1=1; D2=1; //关闭正转与反转指示灯D1与D2D3=0; //点亮停止指示灯D3}}附图学习心得与体会:这次课程设计让我们进一步掌握了单片机编程,并且对以前所学的知识再进行熟识与整理。
这个程序的编写还很顺利,关键在于直流电动机控制电路的搭建,(如上图所示);当A点为低电平时,Q3,Q2截止,Q7,Q1导通,电机左端呈现高电平;当B点为高电平时,Q8,Q4截止,Q6,Q5导通,电机右端呈现低电平,因此当A为0,B为1时,电机正转。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Temp=_crol_(temp,1);//左移1位Temp=_cror_(temp,1);//右移1位用单片机控制直流电动机的正反转、加减速的程序如何用C语言写啊带有5个独立键盘的,当按下按键1时要求正转,按键2反转,按键3加速,按键4减速,按键5停止#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit PW1=P2^0 ;sbit PW2=P2^1 ; //控制电机的两个输入sbit accelerate=P2^2 ; //调速按键sbit stop=P2^3 ; //停止按键sbit left=P2^4 ; //左转按键sbit right=P2^5 ; //右转按键#define right_turn PW1=0;PW2=1 //顺时针转动#define left_turn PW1=1;PW2=0 //逆向转动#define end_turn PW1=1;PW2=1 //停转uint t0=25000,t1=25000; //初始时占空比为50%uint a=25000; // 设置定时器装载初值25ms 设定频率为20Hzuchar flag=1; //此标志用于选择不同的装载初值uchar dflag; //左右转标志uchar count; //用来标志速度档位void keyscan(); //键盘扫描void delay(uchar z);void time_init(); //定时器的初始化void adjust_speed(); //通过调整占空比来调整速度//**********************************//void main(){time_init(); //定时器的初始化while(1){keyscan(); //不断扫描键盘程序,以便及时作出相应的响应}}//*************************************//void timer0() interrupt 1 using 0{if(flag){flag=0;end_turn;a=t0; //t0的大小决定着低电平延续时间TH0=(65536-a)/256;TL0=(65536-a)%256; //重装载初值}else{flag=1; //这个标志起到交替输出高低电平的作用if(dflag==0){right_turn; //右转}else{left_turn; //左转}a=t1; //t1的大小决定着高电平延续时间TH0=(65536-a)/256;TL0=(65536-a)%256; //重装载初值}}void time_init(){TMOD=0x01; //工作方式寄存器软件起动定时器定时器功能方式1 定时器0 TH0=(65536-a)/256;TL0=(65536-a)%256; //装载初值ET0=1; //开启定时器中断使能EA=1; // 开启总中断TR0=0;}//****************************************//void delay(uchar z) //在12M下延时z毫秒{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}//******************************//void keyscan(){if(stop==0){TR0=0; //关闭定时器0 即可停止转动end_turn;}if(left==0){TR0=1;dflag=1; //转向标志置位则左转}if(right==0){TR0=1;dflag=0; //转向标志复位则右转}if(accelerate==0){delay(5) ; //延时消抖if(accelerate==0){while(accelerate==0) ; //等待松手count++;if(count==1){t0=20000;t1=30000; //占空比为百分之60 }if(count==2){t0=15000;t1=35000; //占空比为百分之70 }if(count==3){t0=10000;t1=40000; //占空比为百分之80 }if(count==4){t0=5000;t1=45000; //占空比为百分之90 }if(count==5){count=0;}}}}的邮箱贴出来: /**************************************************************** ******************* * 标题: 步进电机试验五(正转一圈反转一圈) * * * * 通过本例程(即一个脉冲,转3.75 度) * * * * 请学员一定要消化掉本例程* * ****************** ********************************************************************/ #include "r eg52.h" void delay(unsigned int t); //Motor sbit F1 = P1^0; sbit F2 = P1^1; sbit F3 = P1 ^2; sbit F4 = P1^3; unsigned char code FFW[8]={0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xf7,0xf6}; //反转unsigned char code FFZ[8]={0xf6,0xf7,0xf3,0xfb,0xf9,0xfd,0xfc,0xfe}; //正转unsigne d int K; /********************************************************************** * * * 步进电机驱动* * * ***************************************************** ******************/ void motor_ffw() { unsigned char i; unsigned int j; for (j=0; j<12; j++) //转1*n圈{ for (i=0; i<8; i++) //一个周期转30度{ if(K==1) P1 = FFW[i]&0x1f; //取数据if(K==2) P1 = FFZ[i]&0x1f; delay(5); //调节转速} } } /******************** ********************************** * * 延时程序* ***************************** ***************************/ void delay(unsigned int t) { unsigned int k; while(t--) { f or(k=0; k<80; k++) { } } } main() { while(1) { K=1; motor_ffw(); K=2; motor_ffw(); } }•回复•1楼•2009-04-22 10:41•举报|•1#include<reg51.h>sbit S1=P1^4; //将S1位定义为P1.4引脚sbit S2=P1^5;sbit S3=P1^6;sbit S4=P1^0;sbit S5=P1^1;sbit S6=P1^2;sbit S7=P1^3;unsigned char keyval; //储存按键值unsigned char ID; //储存功能标号void delay(void){unsigned char i,j;for(i=0;i<150;i++)for(j=0;j<100;j++);}void motor_delay(void){unsigned int i;for(i=0;i<5000;i++);}void forward( ){P2=0xfc; //P2口低四位脉冲1100P0=0xfc; //P0口低四位脉冲1100 motor_delay();P2=0xf6; //P2口低四位脉冲0110P0=0xf6;motor_delay();P2=0xf3; //P2口低四位脉冲0011P0=0xf3;motor_delay();P2=0xf9; //P2口低四位脉冲1001P0=0xf9;motor_delay();}void backward(){P2=0xfc; //P2口低四位脉冲1100P0=0xfc;motor_delay();P2=0xf9; //P2口低四位脉冲1001 P0=0xf9;motor_delay();P2=0xf3; //P2口低四位脉冲0011 P0=0xf3;motor_delay();P2=0xf6; //P2口低四位脉冲0110 P0=0xf6;motor_delay();}void stop(void){P2=0xff; //停止输出脉冲P0=0xff ;}void forward1( ){P0=0xfc; //P0口低四位脉冲1100 P2=0xff;motor_delay();P0=0xf6; //P0口低四位脉冲0110 P2=0xff;motor_delay();P0=0xf3; //P0口低四位脉冲0011 P2=0xff;motor_delay();P0=0xf9; //P0口低四位脉冲1001 P2=0xff;motor_delay();}void backward1(){P0=0xfc; //P0口低四位脉冲1100 P2=0xff;motor_delay();P0=0xf9; //P0口低四位脉冲1001 P2=0xff;motor_delay();P0=0xf3; //P0口低四位脉冲0011 P2=0xff;motor_delay();P0=0xf6; //P0口低四位脉冲0110 P2=0xff;motor_delay();}void forward2( ){P2=0xfc; //P2口低四位脉冲1100 P0=0xff;motor_delay();P2=0xf6; //P2口低四位脉冲0110 P0=0xff;motor_delay();P2=0xf3; //P2口低四位脉冲0011 P0=0xff;motor_delay();P2=0xf9; //P2口低四位脉冲1001 P0=0xff;motor_delay();}void backward2(){P2=0xfc; //P2口低四位脉冲1100 P0=0xff;motor_delay();P2=0xf9; //P2口低四位脉冲1001 P0=0xff;motor_delay();P2=0xf3; //P2口低四位脉冲0011P0=0xff;motor_delay();P2=0xf6; //P2口低四位脉冲0110P0=0xff;motor_delay();}void main(void){TMOD=0x01; //使用定时器T0的模式1EA=1; //开总中断ET0=1; //定时器T0中断允许TR0=1; //启动定时器T0TH0=(65536-500)/256; //定时器T0赋初值,每计数200次(217微秒)发送一次中断请求TL0=(65536-500)%6; //定时器T0赋初值keyval=0; //按键值初始化为0,什么也不做ID=0;while(1){switch(keyval) //根据按键值keyval选择待执行的功能{case 1:forward();break;case 2:backward();break;case3:stop();break;case 4:forward1();break;case 5:backward1();break;case 6:forward2();break;case 7:backward2();break;}}}void Time0_serve(void) interrupt 1 using 1{TR0=0; //关闭定时器T0if((P1&0xff)!=0xff) //第一次检测到有键按下{delay(); //延时一段时间再去检测if((P1&0xff)!=0xff) //确实有键按下{if(S1==0) //按键S1被按下keyval=1;if(S2==0) //按键S2被按下keyval=2;if(S3==0) //按键S3被按下keyval=3;if(S4==0) //按键S4被按下keyval=4;if(S5==0) //按键S5被按下keyval=5;if(S6==0) //按键S6被按下keyval=6;if(S7==0) //按键S7被按下keyval=7;}}TH0=(65536-200)/256; //定时器T0的高8位赋初值TL0=(65536-200)%6; //定时器T0的低8位赋初值TR0=1; //启动定时器T0}。