步进电机ULNWord格式.docx
- 文档编号:20815538
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:18
- 大小:100.47KB
步进电机ULNWord格式.docx
《步进电机ULNWord格式.docx》由会员分享,可在线阅读,更多相关《步进电机ULNWord格式.docx(18页珍藏版)》请在冰豆网上搜索。
二、单片机最小系统
单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统.对51系列单片机来说,最小系统一般应该包括:
单片机、晶振电路、复位电路.
下面给出一个51单片机的最小系统电路图.
说明:
复位电路:
由电容串联电阻构成,由图并结合"
电容电压不能突变"
的性质,可以知道,当系统一上电,RST脚将会出现高电平,并且,这个高电平持续的时间由电路的RC值来决定.典型的51单片机当RST脚的高电平持续两个机器周期以上就将复位,所以,适当组合RC的取值就可以保证可靠的复位.一般教科书推荐C取10u,R取8.2K.当然也有其他取法的,原则就是要让RC组合可以在RST脚上产生不少于2个机周期的高电平.至于如何具体定量计算,可以参考电路分析相关书籍.
晶振电路:
典型的晶振取11.0592MHz(因为可以准确地得到9600波特率和19200波特率,用于有串口通讯的场合)/12MHz(产生精确的uS级时歇,方便定时操作)
复位电路
一、复位电路的用途
单片机复位电路就好比电脑的重启部分,当电脑在使用中出现死机,按下重启按钮电脑内部的程序从头开始执行。
单片机也一样,当单片机系统在运行中,受到环境干扰出现程序跑飞的时候,按下复位按钮内部的程序自动从头开始执行。
单片机复位电路如下图:
二、复位电路的工作原理
在书本上有介绍,51单片机要复位只需要在第9引脚接个高电平持续2US就可以实现,那这个过程是如何实现的呢?
在单片机系统中,系统上电启动的时候复位一次,当按键按下的时候系统再次复位,如果释放后再按下,系统还会复位。
所以可以通过按键的断开和闭合在运行的系统中控制其复位。
开机的时候为什么为复位?
在电路图中,电容的的大小是10uF,电阻的大小是10k。
所以根据公式,可以算出电容充电到电源电压的0.7倍(单片机的电源是5V,所以充电到0.7倍即为3.5V),需要的时间是10K*10UF=0.1S。
也就是说在电脑启动的0.1S内,电容两端的电压时在0~3.5V增加。
这个时候10K电阻两端的电压为从5~1.5V减少(串联电路各处电压之和为总电压)。
所以在0.1S内,RST引脚所接收到的电压是5V~1.5V。
在5V正常工作的51单片机中小于1.5V的电压信号为低电平信号,而大于1.5V的电压信号为高电平信号。
所以在开机0.1S内,单片机系统自动复位(RST引脚接收到的高电平信号时间为0.1S左右)。
按键按下的时候为什么会复位?
在单片机启动0.1S后,电容C两端的电压持续充电为5V,这是时候10K电阻两端的电压接近于0V,RST处于低电平所以系统正常工作。
当按键按下的时候,开关导通,这个时候电容两端形成了一个回路,电容被短路,所以在按键按下的这个过程中,电容开始释放之前充的电量。
随着时间的推移,电容的电压在0.1S内,从5V释放到变为了1.5V,甚至更小。
根据串联电路电压为各处之和,这个时候10K电阻两端的电压为3.5V,甚至更大,所以RST引脚又接收到高电平。
单片机系统自动复位。
总结:
1、复位电路的原理是单片机RST引脚接收到2US以上的电平信号,只要保证电容的充放电时间大于2US,即可实现复位,所以电路中的电容值是可以改变的。
2、按键按下系统复位,是电容处于一个短路电路中,释放了所有的电能,电阻两端的电压增加引起的。
三、Max232串口电路
MAX232芯片是美信公司专门为电脑的RS-232标准串口设计的接口电路,使用+5V单电源供电。
内部结构基本可分三个部分:
第一部分是电荷泵电路。
由1、2、3、4、5、6脚构成。
功能是产生+12V和-12V两个电源,提供给RS-232串口电平的需要。
第二部分是数据转换通道。
由7、8、9、10、11、12、13、14脚构成两个数据通道。
其中13脚(R0IN)、12脚(R0OUT)、11脚(T0IN)、14脚(T0OUT)为第一数据通道。
8脚(R1IN)、9脚(R1OUT)、10脚(T1IN)、7脚(T1OUT)为第二数据通道。
TTL/CMOS数据从T0IN、T1IN输入转换成RS-232数据从T0OUT、T1OUT送到电脑DP9插头;
DP9插头的RS-232数据从R0IN、R1IN输入转换成TTL/CMOS数据后从R0OUT、R1OUT输出。
第三部分是供电。
15脚GND、16脚VCC(+5V)。
因为单片机输入、输出电平为TTL电平,而PC机配置的是RS-232C标准接口,二者的电气规范不同,所以要加电平转换电路。
给出了采用MAX-232芯片的PC机和单片机串行通信接口电路,与PC机相连采用9芯标准插座。
四、步进电机驱动模块电路
电路如下图所示:
五、系统的软件设计
要求:
可通过操作按键对步进电机的正转、反转、和启动、停止进行控制。
程序如下:
#include<
STC12C5A.H>
intrins.h>
//要用到_nop_();
函数
math.h>
#defineucharunsignedchar
#defineuintunsignedint
ucharkey;
intn;
staticuchari;
/***************************************************************************/
/***********单片机引脚定义************/
/*DefineADCoperationconstforADC_CONTR*/
#defineADC_POWER0x80//ADCpowercontrolbit
#defineADC_FLAG0x10//ADCcompleteflag
#defineADC_START0x08//ADCstartcontrolbit
#defineADC_SPEEDLL0x00//540clocks
#defineADC_SPEEDL0x20//360clocks
#defineADC_SPEEDH0x40//180clocks
#defineADC_SPEEDHH0x60//90clocks
/*************************************************************/
/*********************硬件部分********************************/
//按键控制
sbitk1=P1^3;
sbitk2=P1^2;
sbitk3=P1^1;
sbitk4=P1^0;
//电机驱动
sbitF1=P2^4;
sbitF2=P2^5;
sbitF3=P2^6;
sbitF4=P2^7;
//12864
sbitCS=P2^3;
//片选高电平有效单片LCD使用时可固定高电平
sbitSID=P2^6;
//数据
sbitSCLK=P2^5;
//时钟
sbitPSB=P2^4;
//串并口选择/******************************************************************************/
/**********数据部分***********/
/******************************************************************************/
voidWrite_char(bitstart,ucharddata);
voidSend_byte(ucharbbyte);
voidDelaynms(uintdi);
voidLcd_init(void);
voidLCD_Write_string(ucharX,ucharY,uchar*s);
voidLCD_set_xy(ucharx,uchary);
voiddisplay();
ucharcodewaves[]={"
电机转动方式:
"
};
ucharcodeznwk1[]={"
启动"
ucharcodeznwk2[]={"
停止"
ucharcodeznwk3[]={"
正转"
ucharcodeznwk4[]={"
反转"
//电机
voidstop();
voidmotor_ffw(ucharf);
/**************************************************************************/
/************各延时程序**************/
voiddelay()//电机延时
{
for(n=0;
n<
550;
n++)
{_nop_();
_nop_();
}
}
voiddelay10ms()//按键延时,去抖动
{
ucharms,km;
for(ms=10;
ms>
0;
ms--)
for(km=150;
km>
km--);
voidDelaynms(uintdi)//12864延时
uintda,db;
for(da=0;
da<
di;
da++)
for(db=0;
db<
10;
db++);
voidInt_232(void)//232初始化
TMOD=0x20;
SCON=0x50;
TH1=0xFD;
TL1=0xFD;
TR1=1;
TI=0;
/************************************************************************/
/**************12864显示部分*****************/
/************************************************************************/
voidLcd_init(void)//初始化LCD
Delaynms(10);
//启动等待,等LCM讲入工作状态
CS=1;
Write_char(0,0x30);
//8位介面,基本指令集
Write_char(0,0x0c);
//显示打开,光标关,反白关
Write_char(0,0x01);
//清屏,将DDRAM的地址计数器归零
voidWrite_char(bitstart,ucharddata)//写指令或数据
ucharstart_data,Hdata,Ldata;
if(start==0)
start_data=0xf8;
//写指令
else
start_data=0xfa;
//写数据
Hdata=ddata&
0xf0;
//取高四位
Ldata=(ddata<
<
4)&
//取低四位
Send_byte(start_data);
//发送起始信号
Delaynms(5);
//延时是必须的
Send_byte(Hdata);
//发送高四位
Delaynms
(1);
Send_byte(Ldata);
//发送低四位
voidSend_byte(ucharbbyte)//发送一个字节
ucharled;
for(led=0;
led<
8;
led++)
{
SID=bbyte&
0x80;
//取出最高位
SCLK=1;
SCLK=0;
bbyte<
=1;
//左移
}
voidClr_Scr(void)//清屏函数
Write_char(0,0x01);
voidLCD_set_xy(ucharx,uchary)
{//设置LCD显示的起始位置,X为行,Y为列
ucharaddress;
switch(x)
{
case0:
address=0x80+y;
break;
case1:
case2:
address=0x90+y;
case3:
address=0x88+y;
case4:
address=0x98+y;
default:
address=0x80+y;
}
Write_char(0,address);
voidLCD_Write_string(ucharX,ucharY,uchar*s)
{//中英文字符串显示函数
LCD_set_xy(X,Y);
while(*s)
Write_char(1,*s);
s++;
/*voidLCD_Write_number(unsignedchars)//数字显示函数
Write_char(1,num[s]);
Delaynms
(1);
/*voidLcd_Mark2(void)
Clr_Scr();
//清屏
LCD_Write_string(1,0,znwk);
//
LCD_Write_string(2,0,waves);
*/
/********************************************************/
voiddisplay()
{//uintk;
LCD_Write_string(2,0,waves);
if(k1==0)
LCD_Write_string(3,4,znwk1);
elseif(k2==0)
LCD_Write_string(3,4,znwk2);
elseif(k3==0)
LCD_Write_string(3,4,znwk3);
elseif(k4==0)
LCD_Write_string(3,4,znwk4);
}
}//******************************************************************
//**********************电机转动*********************************
//***********************************************************************
voidmotor_ffw(ucharf)//f方向,f=0右转,
{if(f==0)
{
i++;
if(i==9)
i=1;
elseif(f==1)
i--;
if(i==0)
i=8;
}
switch(i)//一步转0.9度
/*case1:
F1=0;
F2=1;
F3=0;
F4=1;
case2:
F3=1;
F4=0;
case3:
F1=1;
F2=0;
case4:
case1:
case5:
case6:
case7:
case8:
default:
}delay();
voidmoving(ucharf,uintk)//g=0右转k=次数
while(k>
0)
{
motor_ffw(f);
k--;
voidstop()//停止
voidgoing()//启动后正反转
if(key==1)
moving(0,1);
elseif(key==2)
stop();
elseif(key==3)
elseif(key==4)
moving(1,1);
else;
voidscan()//按键控制
if(k1==0)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 步进 电机 ULN