步进电机驱动PROTEL原理图.docx
《步进电机驱动PROTEL原理图.docx》由会员分享,可在线阅读,更多相关《步进电机驱动PROTEL原理图.docx(8页珍藏版)》请在冰豆网上搜索。
步进电机驱动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
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();}}/**********************************************************************//**********************************************************************/#defineuintunsignedintvoiddelayms(uintn){inti;for(;n>0;n--)for(i=0;i<1;i++);}/**********************************************************************//**********************************************************************/#ifndefdelay_h#definedelay_h#defineuintunsignedintexternvoiddelayms(uintn);#endif/***********************************************************************//***********************************************************************/对如驱动芯片L298N的中文资料我这里有很多,你在论文中阐述时要抓住要点;进行简短的说明;对于调速的问题也有第二种方法;就是对驱动芯片的功率电源Vs进行改变电压;可以用DAC进行控制,如用单片机控制DAC,是输出的模拟电压可通过按键来升高和降低;这样在电机正传或者反转时只要Vs所给的电压升高或者降低则电机的转速就会增加或者减少;这样亦不失为一种好的控制直流电机转速的方法;就是成本稍高而已~////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////或者用下面的一个程序略作修改即可;/*1、学习目的:利用定时器产生PWM,了解原理和使用方法2、硬件要求:LED灯定时器3、试验现象:LED灯由亮到灭,由灭到亮逐步变化,也就是调光现象*/#includesbitLED=P1^2;unsignedcharCYCLE;//定义周期该数字X基准定时时间如果是10则周期是10x0.1msunsignedcharPWM_ON;//定义高电平时间voiddelay(unsignedintcnt){while(--cnt);}main(){bitFlag;TMOD|=0x01;TH0=(65536-100)/256;//定时器设置0.1msin12McrystalTL0=(65536-100)%256;//定时0.1mSIE=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.1mSif(count==PWM_ON){LED=1;//灯灭}count++;if(count==CYCLE){count=0;if(PWM_ON!=0)//如果左右时间是0保持原来状态LED=0;//灯亮}}
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)//减速按键
//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)
motor_change_mank=1;//正转标志位
if(key2==0)
motor_change_mank=2;//反转标志位
if(key3==0)
//while(key3==0);
motor_change_mank=0;//刹停标志位
return(motor_change_mank);
//**********************////控制驱动芯片函数
//**********************//voidexecute_motor(){
switch(motor_change_mank)
case0:
//刹停标志位
IN1=1;
IN2=1;
}break;
case1:
//正转标志位
IN2=0;
case2:
//反转标志位
IN1=0;
default:
break;
//**********************//
voidmain()
while
(1)
keylogo();
execute_motor();
/**********************************************************************/
voiddelayms(uintn){
inti;
for(;n>0;n--)
for(i=0;i<1;i++);
#ifndefdelay_h
#definedelay_h
externvoiddelayms(uintn);
#endif
/***********************************************************************/
对如驱动芯片L298N的中文资料我这里有很多,你在论文中阐述时要抓住要点;进行简短
的说明;对于调速的问题也有第二种方法;就是对驱动芯片的功率电源Vs进行改变电压;
可以用DAC进行控制,如用单片机控制DAC,是输出的模拟电压可通过按键来升高和降低;
这样在电机正传或者反转时只要Vs所给的电压升高或者降低则电机的转速就会增加或者减
少;这样亦不失为一种好的控制直流电机转速的方法;就是成本稍高而已~
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////或者用下面的一个程序略作修改即可;
/*
1、学习目的:
利用定时器产生PWM,了解原理和使用方法
2、硬件要求:
LED灯定时器
3、试验现象:
LED灯由亮到灭,由灭到亮逐步变化,也就是调光现象
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)
{//这个里可以添加其他程序如到最亮时候控制设备
while(Flag)//亮度递减同上,是个相反的过程
delay(20000);
PWM_ON--;
if(PWM_ON==0)
Flag=0;
/********************************//*定时中断*//********************************/voidtim(void)interrupt1using1{
staticunsignedcharcount;//TH0=(65536-100)/256;
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