步进电机驱动PROTEL原理图Word文件下载.docx
- 文档编号:21844136
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:8
- 大小:16.89KB
步进电机驱动PROTEL原理图Word文件下载.docx
《步进电机驱动PROTEL原理图Word文件下载.docx》由会员分享,可在线阅读,更多相关《步进电机驱动PROTEL原理图Word文件下载.docx(8页珍藏版)》请在冰豆网上搜索。
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<
Ms;
i++)
ENA=1;
elseif(i=Ms;
=1200;
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<
reg52.h>
#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;
ENA=1;
}break;
case1:
//正转标志位
IN2=0;
case2:
//反转标志位
IN1=0;
default:
break;
//**********************//
voidmain()
while
(1)
keylogo();
execute_motor();
/**********************************************************************/
voiddelayms(uintn){
inti;
for(;
n>
0;
n--)
1;
i++);
#ifndefdelay_h
#definedelay_h
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;
//打开中断
CYCLE=10;
//时间可以调整这个是10调整8位PWM就是256步while(!
Flag)
delay(20000);
//延时时间,从一个亮度到下一个亮度的间隔时间,速度快就能看到连续效
果
PWM_ON++;
//这个使用较长延时,以便能看清楚变化过程
if(PWM_ON==CYCLE)
{//这个里可以添加其他程序如到最亮时候控制设备
while(Flag)//亮度递减同上,是个相反的过程
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;
//灯亮
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 步进 电机 驱动 PROTEL 原理图