51单片机电机正反转控制程序

合集下载

51单片机直流电机正反转程序

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引脚输出高电平时,电机反转。

51单片机直流电机反转

51单片机直流电机反转

51单片机直流电机反转在现代工业生产中,直流电机作为一种重要的动力装置,广泛应用于各种机械设备中。

其中,电机的正反转控制是直流电机应用中的一个重要环节。

本文将以为主题,探讨其原理与实现方法。

直流电机是将电能转换为机械能的装置,其结构简单、运行可靠,在工业生产中应用广泛。

在很多情况下,需要对电机进行正反转控制,以满足不同的工作需求。

而使用51单片机进行直流电机反转控制,是一种简单有效的方法。

首先,我们需要了解直流电机的结构与工作原理。

直流电机主要由定子、转子和碳刷组成。

当定子上通入直流电流时,形成一个磁场,引起转子旋转。

电机的正反转实际上就是改变定子磁场方向的问题。

通过改变定子和转子之间的相对位置,可以实现电机的正反转。

在51单片机直流电机反转控制中,一般采用H桥驱动电路。

H桥电路由四个晶体管组成,可以实现电机的正反转控制。

通过控制H桥中各个晶体管的导通与断开,可以改变电机的正反转方向。

在实际应用中,需要根据具体需求设计合适的控制算法。

控制算法的设计涉及到脉宽调制、速度控制、位置控制等方面。

通过合理设计算法,可以实现对直流电机的精确控制。

另外,在51单片机直流电机反转控制中,还需要考虑到电机的保护问题。

在工作过程中,电机可能会出现过载、过热等情况,需要设置相应的保护装置,以保证电机的安全运行。

让我们总结一下本文的重点,我们可以发现,51单片机直流电机反转控制是一种简单有效的方法,通过合理设计控制算法和保护装置,可以实现对直流电机的精确控制。

在工业生产中,这种控制方法具有重要的应用价值,可以提高生产效率,降低能耗成本,值得进一步研究与推广。

基于51单片机的 红外遥控电机正反转程序 要求:P3.2接红外接收头 控制两个电机正反

基于51单片机的 红外遥控电机正反转程序 要求:P3.2接红外接收头 控制两个电机正反
{
cord=irdata[k];
// if(cord>7)//大于某值为1, 1.792mS
if(cord>6)//大于某值为1,11.0592M
Hale Waihona Puke { value=value|0x80;
unsigned char irtime;//红外用全局变量
bit irpro_ok,irok;
unsigned char IRcord[4]; //一次发射有4个编码值,还是5个 应该是4个,但编号为0-3
unsigned char irdata[33];//一次发射其有33 位
//////////////////////////////////////////////
数据码以及他们的反码的先导。同步位(SY)是标志最后一位编码是“0”或“1”的标识位,它只有0.56ms的有载波信号构成。*/
#include<reg52.h>
#include<stdio.h>
#include<intrins.h>
////////////////////////////////////////////////
}
///////////////////////////////////////////////////////////////////
void EX0init(void)
{
IT0 = 1; // Configure interrupt 0 for falling edge(下降沿) on /INT0 (P3.2)
void TIM0init(void)//定时器0初始化
{
TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值,约256US

基于51单片机的步进电机正反转可控设计与仿真

基于51单片机的步进电机正反转可控设计与仿真

2020.19设计研发基于51单片机的步进电机正反转可控设计与仿真李建中(江苏省海门中等专业学校,江苏南通,226100)摘要:步进电机是伺服控制中的关键部件,对步进电机进行精确高效地控制,是实现精密运动、制造等的重要手段。

釆用51单片机作为电机的控制核心-ULN2003A作为电机的驱动芯片,选用额定电压为5V的小型步进电机,设置正转、反转、停止、加速、减速5个按钮,其中正转、反转和停止均有对应的LED指示灯。

通过Keil进行控制程序的编写,在Proteus 中进行仿真电路的连接,结果表明:电路设计正确;步进电机能够根据按钮指令进行运转,达到了设计预期;系统可应用于某些需要高精度控制的场合。

关键词:步进电机;51单片机;ULN2003A;Keil;ProteusDesign and Simulation of Positive and Negative Rotation ofStepping Motor Based on51Single Chip MicrocomputerLi Jianzhong(Jiangsu Province Haimen Secondary Vocational School,Narrtong Jiangsu,226100)Abst r act;St epper motor is the key compone n t in servo cont r ol.It is an import a n t means to realize precise motion and manufacture to control stepping motor accurately and efficiently.51single chip microcomputer is used as the cont r ol core of the mot o r,uln2003a is used as the driving chip of the motor,the small st e pping motor with:r ated volt a ge of5V is selec t ed,and five buttons of forward rotation,reverse rotation,stop,acceleration and deceleration are set,and the corresponding LED indicator lights are used for forward rotation,reverse rotation and stop.The resuIts show that:the circuit design is correct;the stepper motor can operate according to the button command,which meets the design expectation;the system can be applied to some occasions requiring high-precision control.Keywords:stepper motor;51single chip microcomputer;ULN2003A;Keil;Proteus0引言步进电机在工业制造、数控机床、各种伺服系统中均有应用。

51单片机按键控制步进电机加减速及正反转

51单片机按键控制步进电机加减速及正反转

51单片机按键控制步进电机加减速及正反转之前尝试用单片机控制42步进电机正反转,电机连接导轨实现滑台前进后退,在这里分享一下测试程序及接线图,程序部分参考网上找到的,已经实际测试过,可以实现控制功能。

所用硬件:步进电机及驱动器、STC89C52单片机、直流电源1、硬件连接图•注意:上图为共阳极接法,实际连接参考总体线路连接。

•驱动器信号端定义:PUL+:脉冲信号输入正。

( CP+ )PUL-:脉冲信号输入负。

( CP- )DIR+:电机正、反转控制正。

DIR-:电机正、反转控制负。

EN+:电机脱机控制正。

EN-:电机脱机控制负。

•电机绕组连接A+:连接电机绕组A+相。

A-:连接电机绕组A-相。

B+:连接电机绕组B+相。

B-:连接电机绕组B-相。

•电源连接VCC:电源正端“+”GND:电源负端“-”注意:DC直流范围:9-32V。

不可以超过此范围,否则会无法正常工作甚至损坏驱动器.•总体线路连接输入信号共有三路,它们是:①步进脉冲信号PUL+,PUL-;②方向电平信号DIR+,DIR-③脱机信号EN+,EN-。

输入信号接口有两种接法,可根据需要采用共阳极接法或共阴极接法。

在这里我采用的是共阴极接法:分别将PUL-,DIR-,EN-连接到控制系统的地端(接入单片机地端);脉冲输入信号通过PUL+接入单片机(代码中给的P2^6脚),方向信号通过DIR+接入单片机(代码中给的P2^4脚),使能信号通过EN+接入(不接也可,代码中未接,置空)。

按键连接见代码,分别用5个按键控制电机启动、反转、加速、减速、正反转。

注意:接线时请断开电源,电机接线需注意不要错相,相内相间短路,以免损坏驱动器。

2、代码1.#include<reg51.h>2.#define MotorTabNum 53.unsigned char T0_NUM;4.sbit K1 = P3^5; // 启动5.sbit K2 = P3^4; // 反转6.sbit K3 = P3^3; // 加速7.sbit K4 = P3^2; // 减速8.sbit K5 = P3^1; //正反转9.10.sbit FX = P2^4; // 方向11.//sbit MotorEn = P2^5; // 使能12.sbit CLK = P2^6; // 脉冲13.14.inttable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};15.16.unsigned char g_MotorSt = 0; //17.unsigned char g_MotorDir = 0; //18.unsigned char MotorTab[7] = {12, 10, 8, 6, 4, 2,1};19.20.signed char g_MotorNum = 0;21.22.void delayms(xms);23.void mDelay(unsigned int DelayTime);24.void T0_Init();25.26.void KeyScan(void);27.28.29.30.void main(void)31.{32.T0_Init();33.// MotorEn = 0; //34.FX = 0;35.while(1)36.{37.KeyScan(); //38.}39.40.41.}42.43.void T0_Init()44.{45.TMOD = 0x01;46.TH0 = (65535-100)/256; // 1ms47.TL0 = (65535-100)%256;48.EA = 1;49.ET0 = 1;50.// TR0 = 1;51.52.}53.54.void T0_time() interrupt 155.{56.// TR0 = 0;57.TH0 = (65535-100)/256;58.TL0 = (65535-100)%256;59.T0_NUM++;60.if(T0_NUM >= MotorTab[g_MotorNum]) //61.{62.T0_NUM = 0;63.CLK=CLK^0x01; //64.}65.// TR0 = 1;66.}67.68.69.//--------------------------70.void KeyScan(void)71.{72.if(K1 == 0)73.{74.delayms(10);75.if(K1 == 0)76.{77.g_MotorSt = g_MotorSt ^ 0x01;78.// MotorEn ^= 1;79.TR0 = 1;80.FX ^= 0; //反转81.}82.}83.84.if(K2 == 0)85.{86.delayms(10); //正转87.if(K2 == 0)88.{89.g_MotorDir = g_MotorDir ^ 0x01;90.FX ^= 1; //加速91.}92.}93.94.if(K3 == 0) //95.{96.delayms(5); //加速97.if(K3 == 0)98.{99.g_MotorNum++;100.if(g_MotorNum > MotorTabNum) 101.g_MotorNum = MotorTabNum; 102.}103.}105.if(K4 == 0) //106.{107.delayms(5); // 减速108.if(K4 == 0)109.{110.g_MotorNum--;111.if(g_MotorNum < 0)112.g_MotorNum = 0;113.}114.}115.116.if(K5 == 0) //117.{118.delayms(10); // 正反转119.if(K5 == 0)120.{121.g_MotorSt = g_MotorSt ^ 0x01; 122.g_MotorDir = g_MotorDir ^ 0x01; 123.MotorEn ^= 1;124.TR0 = 1;125.while(1)126.{127.FX ^= 1; //128.delayms(90000);129.FX ^= 0; //130.delayms(90000);131.}132.}133.}135.136.void delayms(xms)//延时137.{138.unsigned int x,y;139.for(x=xms;x>0;x--)140.for(y=110;y>0;y--);141.}3、常见问题解答•控制信号高于5v一定要串联电阻,否则可能会烧坏驱动器控制接口电路。

基于51单片机控制步进电机正反转

基于51单片机控制步进电机正反转

基于51单片机控制步进电机正反转此次采用uln2003模块来链接步进电机;## 步进电机工作原理步进电机是一种将电脉冲信号转换成相应角位移或线位移的电动机。

每输入一个脉冲信号,转子就转动一个角度或前进一步,其输出的角位移或线位移与输入的脉冲数成正比,转速与脉冲频率成正比。

步进电动机的结构形式和分类方法较多,一般按励磁方式分为磁阻式、永磁式和混磁式三种;按相数可分为单相、两相、三相和多相等形式。

因此我们可以控制单片机I/O口的电平来控制步进电机,此次设计中采用四相单拍工作方式,在这种工作方式下,A、B、C、D 三相轮流通电,电流切换三次,磁场旋转一周,转子向前转过一个齿距角。

因此这种通电方式叫做四相单四拍工作方式。

1.电机正转代码unsigned char code tableZ[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};2.电机反转代码unsigned char code tableF[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};代码如下#include <reg52.h>#define uint unsigned int #define uchar unsigned charunsigned char code tableZ[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};unsigned char code tableF[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};//²½½øµç»úzhengvoid delay(unsigned int t);sbit S3=P3^4; //反转sbit S4=P3^5; //反停sbit S5=P3^6; // 正停//正转写入数据void motor_z() { unsigned char i,j; for (i=0; i<8; i++) { if(S5==0){break;} for(j=0;j<8;j++){ P1 = tableZ[i]&0x1f; delay(50); } } }//反转写入数据void motor_f(){ unsigned char i,j; for (i=0; i<8; i++) { if(S4==0){break;} for(j=0;j<8;j++){ P1 = tableF[i]&0x1f;delay(50); } }}void delay(unsigned int t)//延时函数{ unsigned int k; while(t--) { for(k=0; k<60; k++) { } }}void main(){while(1){motor_z();if(S3 == 0){motor_f();}}}•1•2•3•4•5•6•7•8•9•10•11•12•13•14•15•16•17•18•19•20•21•22•23•24•25•26•27•29 •30 •31 •32 •33 •34 •35 •36 •37 •38 •39 •40 •41 •42 •43 •44 •45 •46 •47 •48 •49 •50 •51 •52 •53 •54 •55 •56 •1•3 •4 •5 •6 •7 •8 •9 •10 •11 •12 •13 •14 •15 •16 •17 •18 •19 •20 •21 •22 •23 •24 •25 •26 •27 •28 •29 •30 •31•33•34•35•36•37•38•39•40•41•42•43•44•45•46•47•48•49•50•51•52•53•54•55•56protel仿真图如下。

单片机课程设计-正反转可控的步进电机

单片机课程设计-正反转可控的步进电机

正反转可控的步进电机1 引言本课程设计目的是为了进一步掌握单片机系统,加强对系统设计和应用能力的培养而开设的综合设计训练环节。

本系统用51单片机和ULN2003A电机驱动芯片并加入控制按钮来实现步进电机的正、反转控制。

2 设计方案及原理步进电机可以对旋转角度和转动速度进行高精度的控制。

作为控制执行部件,广泛应用于自动控制和精密仪器等领域。

例如在仪器仪表、机床设备以及计算机的外围设备中(如打印机和绘图仪),常有对精确的、可控制的回转源的需要。

在这种情况下,使用步进电机最为理想。

2.1 步进电机控制步进电机两个相邻磁极之间的夹角为60°,线圈绕过相对的两个磁极构成一相。

此外各磁极上还有5个分布均匀的锯形小齿。

电机转子上没有绕组。

当某相绕组通电时,响应的两个磁极就分别形成N-S极,产生磁场,并与转子形成磁路。

如果这是定子的小齿与转子的小齿没有对齐,则在磁场的作用下,转子将转动一定的角度,使转子齿与定子齿对齐,从而使步进电机向前“走”一步。

如果通过单片机按顺序给绕组施加有序的脉冲电流,就可以控制电机的转动,从而进行了数字到角度的转换。

转动的角度大小与施加的脉冲数成正比,转动的速度与脉冲频率成正比,而转动方向则与脉冲的顺序有关。

2.2 步进电机驱动方式步进电机常用的驱动方式是全电压驱动,即在电机移步与锁步时都加载额定电压。

为防止电机过流及改善驱动特性需加限流电阻。

由于步进电机锁步时,限流电阻要消耗掉大量的功率。

因此,限流电阻要有较大功率容量,并且开关管也要有较高的负载能力。

步进电机也可以使用软件方法,即使用单片机实现,这样不但简化了电路,同时降低了成本。

使用单片机以软件方式驱动步进电机,不但可以通过编程方法在一定范围之内自由的设定步进电机的转速,往返转动的角度以及转动次数等;还可以方便灵活的控制步进电机的运行状态,以满足不同用户的需求。

因此常把单片机步进电机控制电路称之为可编程步进电机控制驱动器。

51单片机步进电机控制系统设计

51单片机步进电机控制系统设计

步进电机控制系统设计引言随着人民生活水平的提高,产品质量、性能、自动化程度等已经是人们选择产品的主要因素。

其中,步进电机正反转自动控制在生活中起了很大的作用,比如洗衣机的工作、遥控汽车的操作、DVD的应用等等,它在实际生活中给人们需求上提供了很大的方便与乐趣。

不只是生活,它还在工业、农业、交通运输等各方面得到了广泛的应用,实现电动机正反转的控制是很多产品设计的核心问题。

步进电机显示出交流电动机不能比拟的良好启动性能和调速性能,比较广泛应用于速度调节要求过高,正反转频繁或多元同步协调运转的机械生产。

因此,学会电动机正反转控制的原理是极其重要的。

然而,在本步进电机正反转仿真设计中,要借助Proteus软件、Keil软件和C语言的辅助进行仿真设计,通过仿真设计,让我们更清楚了解步进电机正反转的原理和电路图,增强对步进电机的认知。

在Proteus绘制好原理图后,调入已编译好的目标代码文件:*.HEX,可以在Proteus的原理图中看到模拟的实物运行状态和过程,Proteus还提供了一个图形显示功能,可以将线路上变化的信号,以图形的方式实时地显示出来,其作用与示波器相似,但功能更多。

这些虚拟仪器仪表具有理想的参数指标,例如极高的输入阻抗、极低的输出阻抗。

这些都尽可能减少了仪器对测量结果的影响。

在本设计中,Proteus软件采用了电容、电阻、晶振、电动机、LED、开关、电动机等多种元件进行绘图,并基于80C51和ULN2003A进行电路图设计,充分展示Proteus软件元件库量大,掌握它的基本绘图操作。

而对于Keil软件,采取创建工程,创建执行文件,利用C语言编写程序,生成hex文件,为Proteus 仿真提供驱动控制,实现步进电机正反转的设计。

在本论文设计中,主要介绍步进电机正反转原理,Proteus软件功能绘图、仿真调试,以及Keil软件功能、程序编写和仿真程序文件生成。

让大家更清楚了解Proteus软件、Keil软件、C语言在步进电机正反转仿真设计的应用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

51单片机电机正反转控制程序以下是一个基于51单片机的电机正反转控制程序示例:
#include <reg52.h>
sbit motorPin1 = P0^0; // 电机接口1
sbit motorPin2 = P0^1; // 电机接口2
void delay(unsigned int delayTime) {
unsigned int i, j;
for(i=delayTime; i>0; i--)
for(j=200; j>0; j--);
}
void motorClockwise() {
motorPin1 = 1; // 电机接口1为高电平
motorPin2 = 0; // 电机接口2为低电平
delay(500); // 延时一段时间
motorPin1 = 0; // 电机接口1为低电平
motorPin2 = 0; // 电机接口2为低电平
}
void motorAnticlockwise() {
motorPin1 = 0; // 电机接口1为低电平
motorPin2 = 1; // 电机接口2为高电平
delay(500); // 延时一段时间
motorPin1 = 0; // 电机接口1为低电平
motorPin2 = 0; // 电机接口2为低电平
}
void main() {
while(1) {
motorClockwise(); // 电机正转
delay(1000); // 延时一段时间
motorAnticlockwise(); // 电机反转
delay(1000); // 延时一段时间
}
}
以上代码中,我们通过定义两个sbit变量来表示电机接口1和接口2。

通过控制接口1和接口2的高低电平状态,可以控制电机的正反转。

在motorClockwise函数中,我们将接口1设置为高电平,接口2设置为低电平,电机开始正转;在motorAnticlockwise函数中,我们将接口1设置为低电平,接口2设置为高电平,电机开始反转。

通过调用延时函数,可以控制电机的转
速。

在main函数中,我们循环调用电机正反转函数,并通过延时函数设置每次正反转之间的间隔时间。

相关文档
最新文档