步进电机驱动PROTEL原理图.docx

上传人:b****7 文档编号:8707945 上传时间:2023-02-01 格式:DOCX 页数:8 大小:16.89KB
下载 相关 举报
步进电机驱动PROTEL原理图.docx_第1页
第1页 / 共8页
步进电机驱动PROTEL原理图.docx_第2页
第2页 / 共8页
步进电机驱动PROTEL原理图.docx_第3页
第3页 / 共8页
步进电机驱动PROTEL原理图.docx_第4页
第4页 / 共8页
步进电机驱动PROTEL原理图.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

步进电机驱动PROTEL原理图.docx

《步进电机驱动PROTEL原理图.docx》由会员分享,可在线阅读,更多相关《步进电机驱动PROTEL原理图.docx(8页珍藏版)》请在冰豆网上搜索。

步进电机驱动PROTEL原理图.docx

步进电机驱动PROTEL原理图

步进电机-驱动PROTEL_原理图

U0139P10/TP00238P11/TP01337P12P02436P13P03535P14P04634P15P05733P16P06832BP17P07M1321INT1P201222MotorINT0P2123P221524T1P231425T0P2426P253127EA/VPP2628P2719X118X2C39100.1uFC1RESETRXD11CapCapTXD1730CapPol1C40.1uF9RDALE/P1629100uFC2)WRPSEN100uF+6VAT89S52CapPol1(

+5D1D2DiodeDiodeVCCU159PortIN1VSS74PortIN2VS10PortIN3122PortIN4OUT1电压可以不一样的3D3D4vsOUT2613DiodeDiode和PortENAOUT3是用来驱动电机的;在此一定要注意需要两路直流电源来对1114vssPortENBOUT4Vs系统供电。

脚14ISENA815GNDISENB

L298N芯片的;而通过一路全桥来驱动另一路电机。

通过一路全桥来驱动一路电机,同理的地是是同一个地;out4out2VsL298N和和out3out1对应IN1,IN2对应是用来驱动Vss脚IN3,IN4注意单片机的地和

VCC

R8R9R10Res2Res2Res210K10K10K

S3S2S1SW-PBSW-PBSW-PB

IN2PortENA

VCCC6

Cap30pFY1XTALC521

Cap30pFR4100uFRes2RESETC710KSW-PBCapPol1VCC

P1.0,P1.1,P1.2用来设计三个按键,key1,key2,key3;

P2.0,P2.1用来与L298N中的IN1,IN2相连接;控制步进电机的正转、反转和停止;P2.2是用来控制电机的使能的,接在ENA上;

如要实现电机的正传、反转的加减速就要对P2.2即ENA脚给PWM信号比如还要设置两个按键key4和key5来控制直流电机的加速和减速;比如有如下函数;/*********************************************************/

ucharNUM0=600;//全局变量

ucharFlag=0;//清零标志位;对Ms清零;

/*idtime0_init(void)

{

TMOD=0x01;//16位计数器/定时器,定时器0;

TH0=(65536-1000)/256;//AT89S52为12M晶振,计数1200才产生1ms

TL0=(65536-1000)%256;

EA=1;//开启总中断

ET0=1;//开启定时器1中断

TR0=1;//开启定时器1,定时器一允许

}

voidtime0_int(void)interrupt1{

H0=(65536-1000)/256;//AT89S52为12M晶振,计数1200才产生1ms

TL0=(65536-1000)%256;

Ms=NUM0

}

*/

for(i=0;i

{

ENA=1;

}

elseif(i=Ms;i<=1200;i++)

{

ENA=0;

Flag=1;

}

if(flag)

{

Ms=NUM0;

}

/*****************************************************************/

KEYADD_SUB()

{

if(key4==0)//加速按键

{

delayms

(2);

//while(key1==0);

Ms++;//正脉宽加一

if(Ms>=1200)

Ms=1200;//最高速度

}

if(key5==0)//减速按键

{

delayms

(2);

//while(key2==0);

Ms--//脉宽减一

if(Ms<=0)

Ms=0;//停止

}

}

/***************************************************************/

/***************************************************************/

下面是控制程序;经现场调试,可行;

程序如下:

/************************************************************/

#include

#include"delay.h"

#defineucharunsignedchar

#defineuintunsignedint

//*********************//

sbitENA=P2^2;//驱动芯片使能,若为0则电机停止;

sbitIN1=P2^1;//控制电机正转和反转

sbitIN2=P2^0;//控制电机正转和反转

sbitkey1=P1^0;//此键按下,电机正转;IN1=1;IN2=0;ENA=1sbitkey2=P1^1;//此键按下,电机反转;IN1=0,IN2=1;ENA=1sbitkey3=P1^2;//此键按下,电机刹停;IN1=1,IN2=1;ENA=1//*********************//

intmotor_change_mank=0;

//按键设置

//**********************//uintkeylogo()

{

if(key1==0)

{

delayms

(2);

//while(key1==0);

motor_change_mank=1;//正转标志位

}

if(key2==0)

{

delayms

(2);

//while(key2==0);

motor_change_mank=2;//反转标志位

}

if(key3==0)

{

delayms

(2);

//while(key3==0);

motor_change_mank=0;//刹停标志位

}

return(motor_change_mank);

}

//**********************////控制驱动芯片函数

//**********************//voidexecute_motor(){

switch(motor_change_mank)

{

case0:

//刹停标志位

{

IN1=1;

IN2=1;

ENA=1;

}break;

case1:

//正转标志位

{

IN1=1;

IN2=0;

ENA=1;

}break;

case2:

//反转标志位

{

IN1=0;

IN2=1;

ENA=1;

}break;

default:

break;

}

}

//**********************//

voidmain()

{

while

(1)

{

keylogo();

execute_motor();

}

}

/**********************************************************************/

/**********************************************************************/

#defineuintunsignedint

voiddelayms(uintn){

inti;

for(;n>0;n--)

for(i=0;i<1;i++);

}

/**********************************************************************/

/**********************************************************************/

#ifndefdelay_h

#definedelay_h

#defineuintunsignedint

externvoiddelayms(uintn);

#endif

/***********************************************************************/

/***********************************************************************/

对如驱动芯片L298N的中文资料我这里有很多,你在论文中阐述时要抓住要点;进行简短

的说明;对于调速的问题也有第二种方法;就是对驱动芯片的功率电源Vs进行改变电压;

可以用DAC进行控制,如用单片机控制DAC,是输出的模拟电压可通过按键来升高和降低;

这样在电机正传或者反转时只要Vs所给的电压升高或者降低则电机的转速就会增加或者减

少;这样亦不失为一种好的控制直流电机转速的方法;就是成本稍高而已~

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////或者用下面的一个程序略作修改即可;

/*

1、学习目的:

利用定时器产生PWM,了解原理和使用方法

2、硬件要求:

LED灯定时器

3、试验现象:

LED灯由亮到灭,由灭到亮逐步变化,也就是调光现象

*/

#include

sbitLED=P1^2;

unsignedcharCYCLE;//定义周期该数字X基准定时时间如果是10则周期是10x0.1msunsignedcharPWM_ON;//定义高电平时间

voiddelay(unsignedintcnt)

{

while(--cnt);

}

main()

{

bitFlag;

TMOD|=0x01;

TH0=(65536-100)/256;//定时器设置0.1msin12Mcrystal

TL0=(65536-100)%256;//定时0.1mS

IE=0x82;//打开中断

TR0=1;

CYCLE=10;//时间可以调整这个是10调整8位PWM就是256步while(!

Flag)

{

delay(20000);//延时时间,从一个亮度到下一个亮度的间隔时间,速度快就能看到连续效

PWM_ON++;//这个使用较长延时,以便能看清楚变化过程

if(PWM_ON==CYCLE)

{//这个里可以添加其他程序如到最亮时候控制设备

Flag=1;

}

}

while(Flag)//亮度递减同上,是个相反的过程

{

delay(20000);

PWM_ON--;

if(PWM_ON==0)

{

Flag=0;

}

}

}

/********************************//*定时中断*//********************************/voidtim(void)interrupt1using1{

staticunsignedcharcount;//TH0=(65536-100)/256;

TL0=(65536-100)%256;//定时0.1mS

if(count==PWM_ON)

{

LED=1;//灯灭

}

count++;

if(count==CYCLE)

{

count=0;

if(PWM_ON!

=0)//如果左右时间是0保持原来状态

LED=0;//灯亮

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1