专 业: 自动化 设计题目: 寻迹小车设计
班级: 0941 学生姓名: 董玉凯 学号:指导教师: 分院院长: 许建平 教研室主任: 方健
电气工程学院
1
14
目录
目录
第一章 课程设计内容与要求分析 ................................................................................................. 3
1.1课程设计内容 .................................................................................................................... 3 1.2课程设计要求分析 ............................................................................................................ 3
1.2.1系统单元电路组成 ................................................................................................ 3 1.2.2寻迹小车原理 ........................................................................................................ 4 1.2.3电源管理 ................................................................................................................ 4 1.2.4电机驱动管理 ........................................................................................................ 4
第二章C语言编程 .......................................................................................................................... 5 第三章 软件系统的实现 ................................................................................................................. 9
3.1主程序设计 ......................................................................................................................... 9 3.2 程序思路 .......................................................................................................................... 9 第四章 结论及感想 ....................................................................................................................... 10 附录 ................................................................................................................................................ 11 参考文献......................................................................................................................................... 17
2
第二章 C语言编程
第一章 课程设计内容与要求分析
1.1课程设计内容 本题目以STC10F04XE.h
单片机为核心器件。小车完成的主要功能就是能够
自主识别赛道上的黑线并根据黑线的位置与距离来实现相应的变速与变向操作。
1.2课程设计要求分析
电动车能够自动寻迹,按设定好的轨迹从区域1进至区域3,并在黑线末端
停车,小车前进的路线图如1-1所示。在区域1和区域3内,小车缓缓前进,在区域2内小车全速前进。当小车未进入任何区域时,小车上的数码显示管显示为0000,当小车第一次碰见赛道上的黑线时,小车上的显示管显示为0001;当小车碰到区域1与区域2的交界,也就是碰见黑线时,小车上的显示管显示为0002;小车行驶到区域2与区域3的交界处碰上黑线时,小车上的显示管显示为0003;小车行驶到区域3的末端时,碰上黑线时,小车显示管显示为0004并停止。小车前段的两个灯全部亮的时候,小车前进;全部灭的时候,小车停止;左侧的灯亮的时候,向左拐;右侧的灯亮时,向右拐。寻迹用的小车前端左右两个光电开关完成,通过调整RW2和RW4可以改变光电开关的灵敏度。
图1-1寻迹小车路线
1.2.1系统单元电路组成
STC10F04XE采用宏晶最新第六代加密技术,超强抗干扰,超强抗静电,整机可轻松经过2万伏静电测试。速度快,1个时钟/机器周期,可用低频晶振,大幅降低EMI。输入/输出口多,最多有40个I/O,复位脚如当I/O口使用,可省去外部复位电路。超低功耗。在系统可编程,无需编程器,无需仿真器,可远程升级。内部集成高可靠复位电路,复位脚设置为I/O口使用时,复位脚可悬空。
寻迹检测原理如图1-2所示,由光电开关和比较器组成,漫反射式光电开关能反应反射光的强弱,用比较器进行分辨,从而实现寻迹。
电机控制用L293D实现,L293D是电机控制专用芯片,接口简单如图1-3所示。用P0.0---P0.5进行控制。P0.0---EN3 P0.1---IN1 P0.2---IN2 P0.3---IN4 P0.4---IN3 P0.5---EN4
传感器信号输入分别为P0.6---S1 P0.7---S2
3
第二章 C语言编程
图1-2 寻迹检测电路原理图
图1-3 电机驱动原理图
1.2.2寻迹小车原理
由于赛道存在黑线,落在黑色区域内的光电开关与比较器收到反射的光线与白色的赛道而不同,进而在管两端产生了不同的电压值,由此来判断路线的走向,并将当前的采集到的一组电压值传递给单片机,进而通过单片机的输出指令来得到相应的控制指令,使小车自动寻迹行走。
1.2.3电源管理
系统电源采用220V交流电源,对单片机,电动机,比较器等供电。
1.2.4电机驱动管理
电机的电源由上可知,由220V电源直接供给,输入的信号为PWM波,通过输出的PWM
的波的占空比可以达到控制电机转速的效果。
4
第二章 C语言编程
第二章C语言编程
在编写程序之前,先安装数据线驱动和stc-isp-v4.79-setup软件。以下的C语言程序分别是电机测速程序和PWM调速程序
电机测速程序:
#include\"STC10F04XE.h\" #define uchar unsigned char #define uint unsigned int sbit IN1=P0^1; sbit IN2=P0^2; sbit IN3=P0^4; sbit IN4=P0^3; sbit en1=P0^0; sbit en2=P0^5; void go(); void stop(); void left(); void right();
void delay_ms(uint t); void main() { en1=1; en2=2; while(1) { go(); delay_ms(1000); stop(); delay_ms(1000); left(); delay_ms(1000); right(); delay_ms(1000); } }
void go() {
IN1=0;
5
第二章 C语言编程
IN2=1; IN3=0; IN4=1; }
void stop() {
IN1=0; IN2=0; IN3=0; IN4=0; }
void left() {
IN1=0; IN2=1; IN3=0; IN4=0; }
void right() {
IN1=0; IN2=0; IN3=0; IN4=1; }
void delay_ms(uint t) {
uchar f; while(t--) { for(f=1;f<125;f++) { ; } } }
PWM调速程序:
#include\"STC10F04XE.h\" #define uint unsigned int
6
第二章 C语言编程
#define uchar unsigned char sbit en1=P0^0; sbit en2=P0^5; sbit IN1=P0^1; sbit IN2=P0^2; sbit IN3=P0^4; sbit IN4=P0^3;
uint flag1,flag2,pwm1,pwm2; void pwm_init(); void go();
void pwm_init() {
TMOD=0X01;
TH0=(65536-200)/256; TL0=(65536-200)%256; EA=1; ET0=1; TR0=1; en1=1; en2=1; }
void TO_Ser()interrupt 1 using 1 {
TH0=(65536-200)/256; TL0=(65536-200)%256; flag1++; flag2++;
if (flag1<=pwm1) {
en1=1; }
if (flag1>pwm1) {
en1=0; }
if (flag1==100) {
flag1=0; }
if (flag2<=pwm2) {
en2=1; }
if (flag2>pwm2)
7
第二章 C语言编程
{
en2=0; }
if (flag2==100) {
flag2=0; } } void go() {
IN1=0; IN2=1; IN3=0; IN4=1; }
void main() {
pwm_init(); P1=0x00; while(1) { go();
pwm1=60; pwm2=0; } }
8
第三章 软件系统的实现
第三章 软件系统的实现
3.1主程序设计
单片机系统需要接收路径识别电路的信号,采用某种路径搜索算法进行寻线判断,进而控制舵机和直流驱动电机的工作。小车系统的软件使用C语言实现。 主体控制框架:
模型车采用的控制方法是根据传感器采集到的路况信息,通过计算得到具体的方向偏移量和速度,控制小车的行走状态。
偏转方向
路况信息 数据处理
车 速
3.2 程序思路
智能车利用了一字形排布的8个传感器来探测道路,并将每个传感器采集到
的信息转换成了数字电平。因此8个传感器的数据正好构成一个字节,由单片机P2口读入。
由于读入的数据并不方便直接参与控制计算,因此先将该数据集分成16类,分别对应于小车不同的位置信息,由0-15表示,其中0表示引导线位于小车最左侧,7表示引导线位于小车中部,14表示引导线位于小车最右侧,15表示未检测到引导线或其他错误情况。
将上面的转换后的数据作为控制计算的反馈输入,与7相减即得到小车偏差信息,然后通过增量型pid算法计算出舵机的控制信息。
将小车偏差信息的微分作为速度pid的输入,依然通过增量型pid算法得到电机的控制信息。至此小车完成一次控制周期。可以使用一个定时器来作为一路PWM波的计时器。先将I/O口置位,设定高电平时间及定时器的初值,当定时器产生中断时,再将I/O口清零,并设定低电平时间,由此循环即可产生PWM波。其中,高电平时间有控制计算得出,低电平时间有PWM周期减去高电平时间得到。
9
第四章 结论及感想
第四章 结论及感想
本设计主要用到了单片机的通用IO口的读写,定时器,中断等基本功能,通过实际操作进一步掌握了单片机的使用。同时,通过单片机外围电路的设计,更深入学习了单片机在嵌入式系统中的应用。通过实际焊接电路,编写程序,也进一步提高了我的动手能力以及分析解决错误的能力,是我能够更好的将所学知识应用到实际中来。
很感想方老师在课设过程中对一些重点处的指点与帮助,通过一次次编程与调试,加强了我对单片机软件的认识,以及增强了对成功的渴望,也增强了我的团队意识与配合能力。
10
附录
附录
我们小组的寻迹小车的c语言编程: #include\"STC10F04XE.h\" #include\"intrins.h\"
#define uchar unsigned char #define uint unsigned int sbit IN1=P0^1; sbit IN2=P0^2; sbit IN3=P0^4; sbit IN4=P0^3; sbit en1=P0^0; sbit en2=P0^5; sbit C1=P0^6; sbit C2=P0^7; void go(); void stop(); void left(); void right();
void delay_ms(uint t);
uchar count,flag1,flag2,pwm1,pwm2; void quyu();
void system_init();
uchar T,second,minite,sum,a;
uchar code LED_Val[] = {0xC0,0xF9,0xA4,0xb0,0x99,0x92,0x82,0xf8,0x82,0xf8,0x80,0x98}; uchar data num[4];
uchar data led_point[4]={0xef,0xdf,0xbf,0x7f}; void disp(uint disp_value); void bcd(uint bcd_value); void pwm_init();
void main() { // system_init(); pwm_init(); P1=0x00; T=0; en1=1; en2=1;
while(1) { disp(sum);
11
附录
delay_ms(100); quyu(); } } void go() {
IN1=0; IN2=1; IN3=0; IN4=1; }
void stop() {
IN1=0; IN2=0; IN3=0; IN4=0; }
void left() {
IN1=0; IN2=1; IN3=0; IN4=0; }
void right() {
IN1=0; IN2=0; IN3=0; IN4=1; }
void delay_ms(uint t) {
uchar f; while(t--) { for(f=1;f<125;f++) {
12
附录
; } } }
void quyu() {
if((C1==0)&&(C2==0)) { while(C1==0&&C2==0); { go(); } delay_ms(1500); T++; go(); ///delay_ms(1000); }
if((C1==1)&&(C2==1)) { go(); if(T<=1) { go(); pwm1=30; pwm2=30; } if(T==2) { go(); pwm1=90; pwm2=90; } if(T==3) { go();
13
附录
pwm1=30; pwm2=30; } } if((C1==1)&&(C2==0)) { left(); } if((C1==0)&&(C2==1)) { right(); } if(T>=4) { stop(); } }
void pwm_init() {
TMOD=0X01;
TH0=(65536-200)/256; TL0=(65536-200)%256; EA=1; ET0=1; TR0=1; en1=1; en2=1; }
void bcd(uint bcd_value) {
num[0]=T; num[1]=(bcd_value%1000)/100; num[2]=((bcd_value%1000)%1000)/10; num[3]=((bcd_value%1000)%1000)%10; }
14
附录
void disp(uint disp_value) { uchar i; bcd(disp_value); for(i=0;i<4;i++) { P1=led_point[i]; SBUF=LED_Val[num[i]]; delay_ms(50); P1=0XFF; } }
/*void system_init() {
TMOD=0X11;
TH0=(65536-50000)/256; TL0=(65536-50000)%256; TH1=(65536-10000)/256; TL1=(65536-10000)%256; EA=1; ET0=1; ET1=1; TR0=1; TR1=1; } */
void T1_Ser() interrupt 1 { TH0=(65536-1000)/256; TL0=(65536-1000)%256; flag1++; flag2++; if(flag1<=pwm1) { en1=1; } if(flag1>pwm1) { en1=0; } if(flag1==100) {
15
附录
flag1=0; }
if(flag2<=pwm2)
{ en2=1; }
if(flag2>pwm2)
{ en2=0; }
if(flag2==100)
{ flag2=0; } }
16
参考文献
参考文献
[1]李广弟,朱月秀,王秀山编著.单片机基础. 北京:北京航空航天大学出版社,2001
[2]何立民编著.MCS-51系列单片机应用系统设计系统配置与接口技术.北京:北京航空航天大学出版社,1999
[3] 蔡美琴等编著.MCS-51 单片机系统及应用.北京:高等教育出版社.1992
17
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo8.com 版权所有 湘ICP备2023022238号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务