单片机控制直流电机正反转资料
51单片机直流电机正反转程序

51单片机直流电机正反转程序在工业自动化、机器人、电子设备等领域,直流电机是一种常见的电动机。
直流电机具有结构简单、转速范围广、转矩大、控制方便等优点,因此被广泛应用。
在直流电机的控制中,正反转是一种常见的操作。
本文将介绍如何使用51单片机控制直流电机的正反转。
1. 直流电机的原理直流电机是一种将电能转化为机械能的电动机。
它的基本结构由定子、转子、电刷和电枢组成。
当电枢通电时,电枢内部会产生磁场,与定子磁场相互作用,从而产生转矩,使转子转动。
电刷则用来改变电极的极性,使电极的磁场方向与定子磁场方向相互作用,从而使电机正反转。
2. 51单片机控制直流电机的原理51单片机是一种常用的微控制器,具有体积小、功耗低、易于编程等优点。
在控制直流电机时,我们可以使用51单片机来控制电机的正反转。
具体实现方法是通过控制电机的电极极性来改变电机的转向。
3. 51单片机直流电机正反转程序下面是一段使用51单片机控制直流电机正反转的程序:#include <reg52.h>sbit IN1 = P1^0; //定义IN1引脚sbit IN2 = P1^1; //定义IN2引脚void delay(unsigned int t) //延时函数 {unsigned int i, j;for(i=0; i<t; i++)for(j=0; j<125; j++);}void main(){while(1){IN1 = 1; //IN1引脚输出高电平 IN2 = 0; //IN2引脚输出低电平 delay(1000); //延时1秒IN1 = 0; //IN1引脚输出低电平 IN2 = 1; //IN2引脚输出高电平 delay(1000); //延时1秒}```上述程序中,我们使用了P1口的0、1引脚来控制电机的正反转。
当IN1引脚输出高电平、IN2引脚输出低电平时,电机正转;当IN1引脚输出低电平、IN2引脚输出高电平时,电机反转。
用单片机控制直流电机正反转的系统设计

用单片机控制直流电机正反转的系统设计一、系统设计内容用单片机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控制信号逻辑此驱动器适用于有刷直流电机,可以同时控制两个电机工作。
第二路电机相关信号的连接方法于以上方式相同,此接线方式只需要使用一个单片机,即可分别控制两个电机的正、反转,操作方便灵活。
下图为有刷直流电机驱动器正面:。
单片机控制直流电动机调速和正反转

指导教师评定成绩:审定成绩:重庆邮电大学移通学院课程设计报告设计题目:单片机控制直流电动机调速和正反转学校:重庆邮电大学移通学院学生姓名:魏星玥专业:电气工程与自动化班级:05131101学号:0513110105指导教师:杨佳义设计时间:2013 年12 月重庆邮电大学移通学院目录综述 (3)一、直流电动机的工作原理 (4)二、直流电动机的结构 (5)三、直流电动机的分类 (6)四、电动机的机械特性 (7)五、他励直流电动机起动与调速 (8)六、直流电机H桥驱动电路 (14)七、PWM的控制技术 (19)八、直流电动机调速系统的设计 (21)九、设计结论····························十、心得体会····························参考文献·······························综述直流电动机是人类最早发明和应用的一种电机。
单片机控制直流电机正反转

目录第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数码管完成实时显示。
基于C51单片机的直流电机PWM调速控制(包含原理图及C源代码)

基于C51单片机的直流电机PWM调速控制--SQ这是最近一阶段自己学习所获,现分享与大家。
这里采用A T89C52单片机做主控制芯片,实现两路直流电机的PWM调速控制,另外还可以实现转向、显示运行时间、显示档位等注:考虑小直流电机自身因素,调速范围仅设有四级电路原理图:C语言程序源代码:/******************** 硬件资源分配*********************/数码管:显示电机状态(启停、正反、速度)、运行时间、是否转弯按键:K4 启动/暂停K3 正反转/转弯允许K2 加速/左转/运行时间清零K1 减速/右转/停止定时器:T0 数码管动态显示,输出PWMT1 运行时间记录********************************************************//*******主程序文件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; //打开LEDMotState=1; //打开电机LSpeed=1;RSpeed=1; //初速设为1}else if(State4==1){State4=0;TR1=0;MotState=0; //关闭电机}else if(State4==0){MotState=1;if(State3==0){State4=1;TR1=1;}else if(State3==1){LSpeed=2;RSpeed=2;}}}void K3(void){if(State4==1)DirState=!DirState;if(State4==0){if(State3==0){State3=1; //可以转向标志1可以,0不可以TR1=1;dispbuf[3]=9;MotState=1;LSpeed=2;RSpeed=2;}else if(State3==1){State3=0;TR1=0;dispbuf[3]=0;MotState=0;}}}void K2(void){if(State4==1&&LSpeed<4&&RSpeed<4){LSpeed++;RSpeed++;}else if(State4==0){if(State3==0){//State4=-1;//LedState=0xF0;MotState=0;Sec=0;Min=0;}else if(State3==1&&LSpeed<4&&RSpeed<4){//TurnState=0;LSpeed=2;RSpeed++;}}}void K1(void){if(State4==1&&LSpeed>1&&RSpeed>1){LSpeed--;RSpeed--;}else if(State4==0){if(State3==0){State4=-1;LedState=0xF0;MotState=0;}else if(State3==1&&LSpeed<4&&RSpeed<4){//TurnState=1;LSpeed++;RSpeed=2;}}}//显示预处理void DisBuf(void){if(RTime_cnt==100){Sec++;RTime_cnt=0;}if(Sec==60){Min++;Sec=0;}if(State4==1){dispbuf[0]=Sec%10;dispbuf[1]=Sec/10;dispbuf[2]=Min;if(!DirState) //正转dispbuf[3]=LSpeed;if(DirState) //反转dispbuf[3]=LSpeed+4;}if(State4==0){if(State3==0){dispbuf[0]=Sec%10;dispbuf[1]=Sec/10;dispbuf[2]=Min;dispbuf[3]=0;}if(State3==1){dispbuf[0]=RSpeed;dispbuf[1]=LSpeed;dispbuf[2]=Min;dispbuf[3]=9;}}}//LED驱动void disp( uchar H, uchar n ){P1=n;P1|=LedState ;P1|=LED_code_d[H];}//T0中断**显示/方波输出void Time_0() interrupt 1{TH0=0xFC;TL0=0x66;Widcnt++;Dispcnt++;//电机驱动/方波输出if(Widcnt>CIRCLE){Widcnt=1;}if(Widcnt<=LWidth)LMot_P=!DirState&&MotState;elseLMot_P=DirState&&MotState;LMot_M=DirState&&MotState;if(Widcnt<=RWidth)RMot_P=!DirState&&MotState;elseRMot_P=DirState&&MotState;RMot_M=DirState&&MotState;//显示if(Dispcnt==5){disp(dispbitcnt,dispbuf[dispbitcnt]);dispbitcnt++;if(dispbitcnt==4){dispbitcnt=0;}Dispcnt=0;}}//T1中断**运行时间void Time_1() interrupt 3{TH1=0xDB;TL1=0xFF;RTime_cnt++;}/******配置文件Afx.h******/#ifndef _AFX_#define _AFX_typedef unsigned char uchar;typedef unsigned int uint;typedef unsigned long ulong;#endif/******IO配置文件Config.c******/#ifndef _Config_#define _Config_#include "Afx.h"#include <reg52.h>//显示定义sbit led=P3^2;//电机引脚定义sbit LMot_P=P2^2; sbit LMot_M=P2^3; sbit RMot_P=P2^0; sbit RMot_M=P2^1;#endif。
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 ,均为正值,即电动机只能在某一方向调速,称为不可逆调速。
基于单片机的电动机正反转控制

成绩课程设计报告题目:基于单片机的电动机正反转控制设计学生姓名:学生学号:xxxxxxxxxxxx系别:电气信息工程学院专业:自动化届别:指导教师:xxx电气信息工程学院基于单片机的电动机正反转控制学生:xxx指导教师:xxx电气信息工程学院自动化系1 课程设计的任务与要求1.1 课程设计的任务利用AT89C51单片机设计并实现电动机正反转控制及其相关功能。
通过本次设计了解并掌握51系列的单片机的结构及其使用方法。
1.2 课程设计的要求该设计要求能够具有以下功能:(1)开启后器件没有任何反应。
(2)闭合正转开关按钮电动机开始正转。
(3)闭合反转开关按钮电动机开始反转。
(4)闭合停转开关按钮电动机停止转动。
1.3 课程设计的研究基础该设计包括硬件和软件设计两部分。
硬件部分包括:直流电动机,电磁继电器,7路反相器,6路反相器。
软件部分包括:基于51单片机的c语言程序。
设计中的相关研究部分介绍如下:(1)直流电动机部分:更改直流电动机的正负极就可以实现对直流电动机的正反转控制,更改可以使用继电器实现。
(2)电磁继电器部分:通过更改电磁继电器的正负极可以实现对电磁继电器中电磁的有无进行控制。
再间接通过电磁的有无控制继电器中开关的打开与闭合。
(3)7路反相器部分:通过反相器可以更改输入电平的高低与其高低值(即当输入为高电压输出为低电压并且低电压为接地电压,当输入为低电压是输出为高电压并且电压强度与接com端相同)。
其实质就是为了供给与继电器相适合的高低电压,所以如果没有该部分,则供给继电器的高低电压就有单片机提供,而单片机的输出高低电平为定值,因此需要此部分。
(4)6路反相器部分:该部分是为了结合7路反相器部分使用的,因为负负得正,正正得正。
2 电动机正反转系统方案制定2.1 方案提出方案一:使用开关直接控制电动机的正反转,此种设计非常简便易懂,便于修理与使用。
缺点:该方案直接控制易产生火花电弧,会危害操作者生命安全。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录第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 单片机最小系统电路设计单片机最小系统设计是单片机应用系统设计的基础。
STC89C52单片机最小系统电路如图2.1所示。
图2.1 单片机最小系统2.2直流电机驱动电路设计图2.2 直流电机驱动电路L293D是提供双向驱动电流高达1 A,电压是从4.5 V至36 V的;L293D提供双向驱动电流高达600毫安,电压是从4.5 V至36 V的。
两个设备是专为驱动等感性负载继电器,电磁阀,直流双极步进和马达,也可以给其他高电流/高电压提供电源负载。
兼容所有的TTL输入。
每个输出都是推拉式驱动电路,与达林顿三极管和伪达林源。
启用1,2 EN驱动器和3,4 EN驱动器。
当使能输入为高电平时,相关联的驱动器被启用和他们的输出处于活动状态,并在其输入端的同相。
当使能输入为低,这些驱动器被禁用其输出关闭,在高阻抗状态。
【PS:1,2EN为1和2的使能端(高电平使能);3,4EN同理】用适当的数据输入端,每对驱动程序的形式一个完整的H 桥可逆驱动器适用于电磁阀或电机应用。
L293D外部输出为高速钳位二极管,应使用电感的瞬态抑制。
VCC1和VCC2分开,提供逻辑输入,以尽量减少设备功耗。
L293D的工作温度是从0°C至70°C图2.3 L293D外部引脚排列图表2.1 真值表图2.4 逻辑图电机驱动电路组要是由L293D芯片组成,单片机P3.4,P3.6,P3.7输出的信号经过L293D芯片后直接与直流电机相连,从而控制直流电机的运行。
其中VCC1接+5V 电源,VCC2接+12V电源。
2.3 数码管显示电路设计本设计利用数码管作为显示单元,采用动态显示技术,电路如图2.5所示。
图2.5 显示电路电路的接法决定了必须采用逐位扫描显示方式。
即从段选口送出某位LED的字型码,然后选通该位LED,并保持一段延时时间。
然后选通下一位,直到所有位扫描完。
2.4 独立按键电路设计独立式键盘的按键相互独立,每个按键接一根I/O口线,一根I/O口线上的按键工作状态不会影响其它I/O口线的工作状态。
因此,通过检测I/O口线的电平状态,即可判断键盘上哪个键被按下。
图2.6 独立按键电路2.5 系统供电电源电路设计本系统需要采用+5V电源和+12V电源,所采用的电源电路是由整流电路和三端稳压器组成的。
电路输出电压和最大输出电流决定于所选三端稳压器。
其电源电路如图2.7所示。
图2.7 +5V和+12V电源供电电路t)td(πU 0(AV)ωωπsin 2120U ⎰=20(AV)0.9U U2π22U ≈=L2L (AV)(AV)R 0.45U R Uo Io ≈=22m ax U U R =221.12)(1.1U R AV Io I LF π=>。
时,~当2O(AV)L2.12)53(U U R T C ≈=⇒)12(-)22(-)32(-)42(-)52(-)62(-)72(-2.5.1直流稳压电路中整流二极管的选取:其中2U 为副边电压 解得 实现了全波整流电路,他将2U 的由于整流桥电路负半周也利用起来,所以在变压器副边电压有效值相同的情况下,输出电压的平均值是半波整流电路的两倍。
输出电流的平均值(即负载电阻中的电流平均值)L 2L (AV)(AV)R 0.9U R Uo Io ≈= 在单相桥式整流电路中,因为每只二极管只在变压器副边电压的半个周期通过电流,所以每只二极管的平均电流只有负载电阻上的电流的平均值的一半,即与半波整流电路中的平均电流相同。
二极管所能承受的最大反向电压考虑到电网电压的波动范围为%10±,在实际选用二极管时,应至少有%10的余量,选择最大整流电流F I 和最高反向工作电压RM U 分别为221.1U U RM > 2.5.2直流稳压电路中滤波电容的选取:L(AV)O(AV)L I U R = O(AV)U :输出电压的平均值L(AV)I :负载电流的平均值 由于采用电解电容,考虑到电网电压的波动范围为%10±,点解电容的耐压值应大于221.1U 。
L 2R T 5)~(3C =第3章系统软件设计3.1 软件总体设计思路经过前几章的设计工作,系统的硬件电路设计已经完成了。
然而,对于一个完整的设计系统来说,只有硬件电路的设计完成是不够的,它必须通过软件编程来实现系统工作的控制功能,从而才能实现电路应有的系统功能。
单片机系统的软件设计主要使用汇编语言或高级语言。
汇编语言与系统硬件的关系密切,可方便地实现诸如中断管理以及模拟/数字量的输入/输出等功能,具有占用系统资源小、执行速度快的特点,但是,对复杂的大型应用系统,其代码可读性差,并不利于升级和维护。
高级语言的代码效率和长度都不如汇编语言,但其结构清晰、可读性好、开发周期短、有极强的可移植性,在多数应用方面执行效率与汇编语言的差距也不大,近年来得到了极为广泛的应用。
而C语言既有高级语言的各种特点,又可对硬件进行操作,并可进行结构化程序设计。
用C语言编写的程序较容易移植,可生成简洁、可靠的目标代码,用C语言进行单片机计算机开发已经是必然的发展趋势。
本设计的整体思路为:主程序中循环的调用按键程序,通过按键从而使单片机输出变化的定时时间和控制电机正反转,从而控制直流电机达到不同的旋转效果,并通过数码管将变化的定时时间显示出来。
本设计以单片机作为系统的核心控制单元,运用C语言进行编程工作,按照工作流程来实现设计要求的控制直流电机的运行状态。
3.2 主程序流程设计直接应用STC89C52的软件方法实现电机驱动和定时时间的设置与变化。
其流程图如图3.1所示。
开始时打开电源开关对电路供电,完成系统初始化和显示初始化,数码管显示0059,倒计时开始,按键循环扫描,设置键按下,倒计时停止,由加减键控制定时时间,确定键按下,进入中断,倒计时开始,电机启动,结束时,电机停止,显示恢复初始化。
图3.1 系统主单片机总程序框图实习总结附录1 总体电路图附录2 实物照片附录3 C语言源程序#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit MOTOR_A2 = P3^6;sbit MOTOR_A1 = P3^7;sbit EN_MOTOR_A = P3^4 ;//uchar code segcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar code segcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0,1,2,3,4,5,6,7,8,9,//uchar code dispbit[]={0x0e,0x0d,0x0b,0x07};uchar code dispbit[]={0xef,0xdf,0xbf,0x7f};//数码管位选位uchar buffer[]={0,0,0,0};uint min=59,sec=59;uint status=0;//函数声明void delayMS(uint t) ;void keyprocess(uchar key);void display();void timer0();void MotorStart();void delayS(uint b);main(){bit keyrelease;uchar buf;uchar keyinput;keyrelease=1;buf=0xff;TMOD=0x01; //T0工作在方式1,16位计数器TH0=0xFC; //定时器0设置延时1ms中断初始值TL0=0x18;TR0=1;IE=0x82; //开定时器0中断status=0;while(1) //键扫描程序{keyinput=P1&0x0f;if(keyinput!=0x0f){delayMS(10);if(keyinput!=0x0f){buf=keyinput;P1=0xff;while(P1!=0xff)P1=0xff;keyprocess(buf); //调用按键处理函数buf=0xff;}}display();}}//延时程序void delayMS(uint t) //晶振频率12MHZ{uint i;while(t--)for(i=0;i<125;i++);}//按键处理函数void keyprocess(unsigned char key) //键值处理,正常计时,设置时分秒{switch (key){case 0x0e:status++; //按下设置键TR0=0;if (status>=3) status = 0;break;case 0x0d:switch(status) //按下加1键,3种模式下加1{case 0x01:if(min<59) min++;else min=0;break;case 0x02:if(sec<59) sec++;else sec=0;break;}break;case 0x0b:switch(status) //按下减1键{case 0x01:if(min>0) min--;else min=59;break;case 0x02:if(sec>0) sec--;else sec=59;break;}break;case 0x07: TR0=1;MotorStart();default:break;}}//数码管显示函数void display(){uchar i; //正常计时显示{buffer[0]=min/10; // 显示分的十位buffer[1]=min%10; // 显示分的个位buffer[2]=sec/10; // 显示秒的十位buffer[3]=sec%10; // 显示秒的个位for(i=0;i<4;i++){P0=segcode[buffer[i]];P2=dispbit[i];delayMS(1); //防止数码管显示的时候闪动P2=0xff;}}}//定时器0中断函数void timer0() interrupt 1 using 2 //T0中断服务函数,第二组工作寄存器{static uint count;TH0=0xFC; // 定时器0设置初始值1ms中断初始值TL0=0x18;TR0=1;count++; //正常计时if(count>=1000) // 定时1S 到,以下为时钟的正常走钟逻辑{count=0;sec--;if(sec==0){sec=59;min--;if(min==0&&sec==0){P2=0xff;}}}}void MotorStart(){EN_MOTOR_A = 1;MOTOR_A2 = 1;MOTOR_A1 = 0;delayS(60);EN_MOTOR_A = 0;delayS(60);EN_MOTOR_A = 1;MOTOR_A2 = 0;MOTOR_A1 = 1;delayS(60);}void delayS(uint b) //晶振频率12MHZ {uint j;while(b--)for(j=0;j<2000;j++);}。