- UID
- 251437
- 阅读权限
- 15
- 推广
-
- 幽默
-
- 注册时间
- 2011-12-19
- 最后登录
- 1970-1-1
|
注册家电维修技术论坛,与同行畅聊维修技术,享更多技术论坛功能。
您需要 登录 才可以下载或查看,没有帐号?快速注册
x
1. 智能往返小车的控制,用51单片机来实现控制,现在拿出来跟大家分享:
实现任务
小车能在起跑线与终点线自动往返。
(1)车辆从起跑线出发,到达终点线后停留10S,然后自动返回起跑线。
(2)中间300CM的限速区,车辆往返均要求以低速通过,通过时间8S。
跑道宽度0.5m,表面为瓷砖地板,两侧有2cm的黑线作为跑道分界线,终点有黑带提示‘,跑道如下图所示
(原文件名:000.jpg)
2.系统方案选择
根据题目要求,电动车系统应具有:起点加速前进、减速, 限速区减速,加速,终点停留,后退、限速区减速、加速,起点停留等功能,为此按功能,系统可划分若干基本模块:黑白、检测模块,控制器模块,电机驱动模块。
2. 主要硬件设计
(1)控制电路电路的设计,如下图所示:
(原文件名:红外检测和光藕隔离.jpg)
(原文件名:H桥.jpg)
单片机 (原文件名:4.jpg)
程序:
#include <reg52.h> //
#define uchar unsigned char // 开头定义,方便下面使用
#define uint unsigned int
#define ulong unsigned long
sbit P32=P3^2; // 红外检测口
sbit P12=P1^2; // 直流电机I/O口1
sbit P13=P1^3; // 直流电机IO口2
void delly(ulong y); //
void unit();
uint code data_table[]={250,250,250,150,250,0,250,150,250};//用数组,调制每个期间的PWM
uchar i,timeh,timel;
uint pwm_data,time_counter,counter1;
main()
{
unit();
while(1)
{
if(i<5)//开始前进
{
P12=1;
P13=0;
delly(pwm_data);
P12=0;
delly(1000-pwm_data);//占空比
}
else if(i==5)//到打终点后,停止
{
P13=0;
P12=0;
delly(333333);
P13=1;
while(i==5); }
else if(i>5&i<9)//到达终点之后返回
{
P12=0;
P13=1;
delly(pwm_data);
P13=0;
delly(1000-pwm_data);//返回到起跑线上停止
}
else
{
P13=0;
P12=0;
while(1);
}
//
}
}
void unit()
{
i=0;
P3=0xff;//
P1=0xff;
time_counter=0;
pwm_data=data_table[i];
TMOD=0x11;//
TH0=0x00;//
TL0=0x00;
EA=1;//
ET0=1;
EX0=1; //
IT0=1;//′
}
//// óê±′|àí/////
void delly(ulong y) //延时
{
while(y)
y--;
}
//////////// D ′|àí2 • ////////////
void int0() interrupt 0 using 0//中断0
{
//timel=TL0;
if(i>=1)
{
if((time_counter-counter1)>20)
i++;
}
else
{
i++;
TR0=1;
}
pwm_data=data_table[i];
counter1=time_counter;
//timeh=TH0;
}
void timer0() interrupt 1 using 1 //定时器0中断,
{
TR0=0;
if(time_counter<10000)
time_counter++;
else
time_counter=0;
//ET0=0;
TH0=0x00;
TL0=0x00;
TR0=1;
// t1_flag=1;
}
|
|