用单片机控制直流电动机的正反转
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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 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}。