第六届技术报告最终完成版Word格式文档下载.docx

上传人:b****5 文档编号:19974832 上传时间:2023-01-13 格式:DOCX 页数:38 大小:660.56KB
下载 相关 举报
第六届技术报告最终完成版Word格式文档下载.docx_第1页
第1页 / 共38页
第六届技术报告最终完成版Word格式文档下载.docx_第2页
第2页 / 共38页
第六届技术报告最终完成版Word格式文档下载.docx_第3页
第3页 / 共38页
第六届技术报告最终完成版Word格式文档下载.docx_第4页
第4页 / 共38页
第六届技术报告最终完成版Word格式文档下载.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

第六届技术报告最终完成版Word格式文档下载.docx

《第六届技术报告最终完成版Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《第六届技术报告最终完成版Word格式文档下载.docx(38页珍藏版)》请在冰豆网上搜索。

第六届技术报告最终完成版Word格式文档下载.docx

检波输出波形电极输出波

根据电磁传感器中电感的方向与磁场的关系,采用垂直方向放置时,其测量的磁场大小为Bx,且根据比奥沙法尔定义可知:

图2.1垂直方向传感器测量理论图

垂直方向传感器测量出的电压大小为:

根据实验测定的数据,利用MATLAB可得下图:

可得出以下结论:

实验数据与理论基本相同。

采用水平方向放置时,其测量的磁场大小为By,且根据比奥沙法尔定义可知:

输出检波为:

水平方向电磁传感器测出的电压大小为:

其特性图为:

图2.2水平方向传感器测量理论图

根据车与导线的位置关系如图:

其中:

AE=lA;

h为传感器距赛道的高度;

根据实验测得的数据,我们采用了垂直位置的传感器,根据电磁传感器采集出的电压的大小,两相邻的传感器的距离去3~5cm左右,我们采用相邻的两传感器间距为4cm。

2.2PCB主板的设计

要求主板的面积小,质量轻,其PCB如图所示:

2.2.1电源管理模块:

把电压为7.2V的电池经LM2940稳压后,其电路图如下:

2.2.2.电机驱动模块:

利用MOS管构成双极性H桥,使电流更大,驱动能力更强,再结合逻辑电路,使其使用更安全,更稳定,如下图所示:

操作时序如下:

输入A输入B电机转向

01正转

10反转

00停车

11停车

第三章设计方案概述说明

由于本电磁智能车模型采用A型车模,通过电磁传感器阵列来采集电流约为20KHz、100mA的导线的电磁场强度来检测和识别路径,通过MC9S12XS128的AD口进行采集、处理,进而控制电机和舵机,进行模型车的智能控制。

3.1设计思路及方案的总体说明

根据电磁车循迹的要求,电磁车设计包括赛车的设计和恒流源的设计。

根据电磁传感器方案设计,赛车共包括五大模块:

电磁传感器模块、速度传感器、MC9S12XS128模块,电机驱动模块、电源管管理模块。

此处为框图

3.2系统各模块实现简介:

1.电磁传感器模块

检测导线电流约为100mA,频率20KHz的磁场的大小,进行路径识别,并输出电压给MC9S12XS128采集。

2.速度传感器

利用增量式红外编码器进行速度的测量,反馈给单片机,构成速度的闭环。

光电编码器线数越多,同等速度下单位时间内所能检测到脉冲数也越多,因而速度检测的分辨率也更高。

另一方面,线数增多后,相邻脉冲间的持续时间会变短,脉冲检测的可靠性会因相邻脉冲的干扰而受到影响。

3.MC9S12XS129模块

构成系统的控制器

4.电机驱动模块

通过MC9S12XS128单片机输出的PWM控制,功率放大用来驱动电机,要求驱动电流足够大,要考虑到大电流对整个系统的影响。

5.电源管理模块

制作相应的电源电路,针对个模块的输入信号要求。

利用稳压芯片将电源稳成5V,供单片机和速度传感器供电,舵机利用二极管降压供电,而电机则利用电源直接供电。

6.恒流源模块

由单片机产生频率20KHz的的方波信号,驱动三极管构成的电流源,然后经H桥进行功率放大,产生恒流功率信号。

第四章设计方案概述说明

为了体现程序的模块性和可移植性,我们把程序分成各个模块进行分别处理,而各模块也有相应的形参做为接口,可以做到可移植性,通用性。

下面就这些模块的设计与实现分别进行详细阐述。

程序中用到的硬件资源有PWM模块、AD模块、脉冲累加器、普通I/O口,主程序流程图如下:

此处需要修改

4.1传感器的测量算法

采用了垂直放置的传感器,根据采集到的数据,用MATLAB绘制出图形,并用直线拟合,

采集到的电压如下、MATLAB代码如下:

A=[8610814118422926728326322718514410883]/283;

B=-6:

1:

6;

plot(B,A);

gridminor;

C=[108141184229267]/283;

D=-5:

-1;

y1=polyfit(D,C,1);

x=-6:

0.1:

0;

y=40.6/283*x+307.6/283;

holdon;

plot(x,y);

如图的直线与原曲线在2—5cm处拟合很好,故用此段的线性来计算偏移量,用来控制电机和舵机。

4.2舵机的PD控制

根据电磁传感器采集到的偏移量,利用前后几次偏移量之差进行PD控制。

舵机转角为:

其中Kp为比例系数;

b为相对于中心的偏移量;

Kd为积分系数;

Diff为位置微分量

4.3编码盘

增量式编码器的输出经PAC采集,采集上升沿的个数,用来测定当前速度,其程序流程图如下:

4.4速度控制PID算法及其改进

PID控制是工业过程控制中历史最悠久,生命力最强的控制方式。

这主要是因为这种控制方式具有直观、实现简单和鲁棒性能好等一系列的优点。

位置式PID算式连续控制系统中的PID控制规律是

4.1

其中是偏差信号为零时的控制作用,是控制量的基准;

利用外接矩形法进行数值积分,一阶后向差分进行数值微分,当选定采样周期为T时,式4.1可离散为下面的差分方程

4.2

增量式PID算式。

根据式4.2得出

4.3

于是

4.4

式4.3的计算结果,反映了第k和第k-1次输出之间的增量,所以称为增量算式。

这个算式的结果是可正可负的。

利用增量算式控制执行机构,执行机构每次只增加一个增量,因此执行机构起了一个累加的作用。

对于整个系统来说,位置和增量式两种算式并无本质区别,只是将原来全部由计算机完成的工作,分出一部分由其他元件去完成。

然而,虽然增量式算式只是算法上的一点改进,却带来了不少优点:

算式只与最近几次采样值有关,不需要进行累加,不易引起误差累积,因此容易获得较好的控制效果。

计算机只输出增量,误动作时影响小,必要时可加逻辑保护,限制或禁止故障时的输出。

手动于自动切换时,由于步进电机具有保持作用,所以容易实现无扰动切换,机器故障时,也可以把信号保持在原位。

由于增量算式有上述优点,在实际控制中,应用得比位置式更为广泛。

4.5软件介绍

经过我们组队员的共同开发,设计,验证,我们依据所学的知识从入门到提高,经历的了开发工具的应用、方案的设计、调试过程如下。

4.5.1开发工具

采用了USB接口的HCS12BDM下载工具,是支持FreescaleMC9S12系列16位单片机的BDM调试工具。

软件上采用的是CodeWarriorforHCS12,经过源程序的编写,连接,通过BDM下载至MC9S12XS128,完成单片机的开发过程。

CodeWarrior是Metrowerks公司专门面向Motorola(Freescale)设计的嵌入式应用开发的软件工具,包括集成开发环境IDE,处理器专家库,全芯片仿真,可视化参数显示工具,项目管理器,C交叉编译器,汇编器,链接器以及调试器,支持在线编程和调试,给我们的开发,设计工作带来了很大的方便。

4.5.2制作调试过程说明

本系统采用MC9S12XS128作为主控制器,结合20KHz,100mA的恒流源,构成了智能路径识别系统。

各硬件部分我们通过制作PCB电路板安装在智能车的相关部位。

在车头我们制作了寻迹用的电磁传感器电路板,只要输入激励电源后,即可获取磁场强度。

通过杜邦线,连接到安装在车身中央的MC9S12XS128上。

主控电路板包括了电源管理电路、单片机接口电路,终点识别部分,留有电磁传感器信号输入接口、速度传感器信号输入接口、电源输入接口、舵机控制接口、电机接口等输入输出端口。

开始时的电流源让我们很头疼,在参考了网上的很多方案和设计之后,最终形成了方案,按照频率和电流大小的要求,先产生频率,后放大成功率信号,在队员们的共同努力和指导老师的指导下,终于完成了恒流源的制作。

车的重心问题一直是困扰我们的地方,车的重心前后方向调整,对智能车行驶性能有很大影响。

按照车辆运动学理论,车身重心前移,会增加转向,但会降低转向的灵敏度,同时降低后轮的抓地力;

重心后移,会减少转向,但会增大转向灵敏度,后轮抓地力也会增加。

因而调整合适的车体重心,让智能车更加适应跑道是很关键的。

根据实际调试经验,鉴于当前舵机响应较迟缓,因此,需要将车的重心前移,增加转向性能。

电机驱动是最脆弱的地方,有时会出现短路或起火的现象,由于我们的驱动加入了逻辑控制单元,操作的失误不会引起这种想象,我们经过试验和判断分析,原因可能是由于先给了驱动PWM信号,这时如果给驱动加上电压,由于这时加上了一个阶跃信号,导致上下桥臂的MOS管导通了,由于MOS管的电阻很小,经过的电流很大而导致MOS管烧毁。

第五章总结

智能车主要技术参数模型车的外形如下图所示:

主要技术参数如下:

项目

参数

车模几何尺寸(长、宽、高)(毫米)

395×

241×

78

电路电容总量(微法)

约1100uF

传感器种类及个数

电磁传感器×

6;

红外编码盘×

1,

干簧管×

2

主要芯片

7805X17806X1;

MC9S12XS128×

1MC33886X2

车模重量

1.2Kg

赛道检测精度

1cm

电机个数

舵机×

1;

电机×

1

赛道检测频率(AD检测频率)

160KHz

第六章源程序

#include<

hidef.h>

#include"

derivative.h"

#include<

mc9s12xs128.h>

//-----------宏定义---------------

#defineAngle_Center1735

#definead_max175//95

#definead_max_sum160

#definead_deadline60

#defineCha_zhi_M30

#definekp28//宏定义

#defineki5//宏定义

#definekd15//宏定义

#definespeed_max500//返回的最大值,是pwm的周期值

#definespeed_min0

#definelose_limit600

#defineK10.011177

#defineK20.05714

#defineK30.00625

#defineBRAKE0xfe

#defineDRIVER0x01

/***********变量定义*******/

floatad_k1,ad_k2,ad_k3,ad_k4,ad_k5,ad_k6;

interror_test;

intx_error,x_error_limit;

charpre_turn;

intad1,ad2,ad3,ad4,ad5,ad6;

floatbi_li=1;

floats_20ms=0,ss=0,s=0;

intad_max1,ad_max2,ad_max_num1,ad_max_num2;

//intad_max,Cha_zhi_M;

intx;

//车位置

intcar_positn;

intx_error1=0;

intx_error2=0;

unsignedcharx_work,numm;

intpre_x=0;

intstreet_flag=0;

intstreet_flag1=0;

intstraight_flag=0;

intbrake_flag=0;

intangle_data;

//舵机转角

uintPWM_OUT=0;

longt1,t2,t3,t4,t5,t6;

uintstop_flag=0;

uintturn_flag=0;

uintleft_e,right_e;

intpre_angle;

unsignedintcar_driver;

//驱动力参数

unsignedintpulse_speed;

//电机当前速度

floatideal_speed;

//理想状态下的速度

intspeed_error;

//理想速度与当前速度的差值

intpre_error=0;

//PID控制的速度差值

intpre_d_error=0;

//PID控制的速度上一次差值

intpk=0,error=0;

//速度的PID值

intpre_car_positn;

intnow_speed;

intkp1,ki1,kd1;

unsignedcharstop_now=0;

unsignedchardanger=1;

intd_error;

intdd_error;

inttemp_k;

inta_kp,a_kd,a_kd_bl;

floatk,k_bl,k_x,k_temp;

/*************数组***********/

uintad0_table[10],ad1_table[10],ad2_table[10],ad3_table[10],ad4_table[10],ad5_table[10];

uintad_mix_table[6];

uintangle_table[2];

unsignedcharx_table[2];

/************函数声明*********/

voidData_init(void);

//关键数据初始化

voidSetBusCLK_40M(void);

//锁相环初始化

voidatd_init(void);

//模/数转化初始化

voidpwm_init(void);

//脉冲PWM初始化

voidTIM_init(void);

//测速模块TIM初始化

voidsam_position(void);

//模/数转化模块函数

voidcar_position(void);

//计算当前模型车的位置函数

voidangle(void);

//计算舵机的转角值函数

voidspeed_ping(void);

voidcheck_start(void);

voiddriver(void);

//车的舵机和电机的驱动函数

voiddelay(unsignedintX);

//延时函数

voiddelay1(unsignedinty);

unsignedintabsolute(int);

voidTimer(void);

voidposition(void);

voidtingche(void);

voidcheck_turn(void);

voidbrake(void);

voidpid(void);

//uintabsolute(inty);

//=========********主程序*****============

voidmain(void)

{unsignedintn;

//先初始化各个初始化函数

Data_init();

//设置基本参数

SetBusCLK_40M();

TIM_init();

//TIM初始化

atd_init();

//ATD初始化

pwm_init();

Timer();

//PWM初始化

for(n=0;

n<

=65;

n++)

delay(40000);

EnableInterrupts;

for(;

;

)//控制车行驶的函数

{

//t1++;

check_start();

position();

car_position();

//计算车的位置

angle();

//计算舵机的转角

check_turn();

brake();

speed_ping();

driver();

//驱动控制

}

}

/***********函数定义********/

voidData_init(void)

{

DDRA=0x00;

PUCR_PUPAE=1;

PORTA=0xff;

DDRB=0xff;

PORTB=0XFF;

PWMDTY01=Angle_Center;

t1=0;

t2=0;

t3=0;

t4=0;

ad_k1=1;

ad_k2=1;

ad_k3=1;

ad_k4=1;

ad_k5=1;

ad_k6=1;

//------------锁相环初始化-----------

voidSetBusCLK_40M(void)

CLKSEL=0X00;

//disengagePLLtosystem

PLLCTL_PLLON=1;

//turnonPLL

//SYNR=4;

//REFDV=1;

//pllclock=2*osc*(1+SYNR)/(1+REFDV)=80MHz;

SYNR=0x44;

REFDV=0x81;

//pullclock=80MHZ,BUSCLOCK=40M

_asm(nop);

while(!

(CRGFLG_LOCK==1));

CLKSEL_PLLSEL=1;

//engagePLLtosystem;

}

//------------ATD初始化---------------

voidatd_init(void)

ATD0CTL0=0x06;

//当完成第6通道转换后返回到第0通道

ATD0CTL1=0x10;

//8位转换精度,在采样前释放采样电容电荷

ATD0CTL2=0XC0;

//11000000启动A/D,快速清除标志位

//无等待模式,外部触发禁止(bit2=0),

//中断禁止(bit1=0)

ATD0CTL3=0X04;

//00000100转换序列为1、FIFO模式启动,冻结模式下继续转换

ATD0CTL4=0XE1;

//111000018位精度,24AD采样时间

//总线/(1+1)*2=4分频,AD时钟=1MHz

ATD0CTL5=0X30;

//连续转换序列多通道采样

}

//---------TIM初始化-----------

voidTIM_init(void)

PACTL=0X50;

//

PACNT=0X0000;

//------------------

voidTimer(void)

{

PITCFLMT_PITE=0;

//disablePIT//定时中断通道0关

PITCE_PCE0=1;

//enabletimerchannel0定时器通道0使能

PITMTLD0=250-1;

//timebase240clockcycles,it'

s0.1MHz定时器初值载入

PITMUX=0X00;

//ch0connectedtomicrotimer0定时器复合寄存器控制位16位寄存器与微时基0相连

PITLD0=800-1;

//INTVERALmicrotimebases

PITINTE_PINTE0=1;

//enableinteruptchannel0pt0

PITCFLMT_PITE=1;

//enablePIT

//--------------PWM初始化-------------

voidpwm_init(void)

{

PWMCTL=0XF0;

//11110000设置01级联,23级联,45级联,67级联01舵机,45,67电机

//PWMCTL=0XA0;

//设置6,7级联2,3通道级联

//PWMCTL_CON45=1;

//4,5级联

PWMPRCLK=0X22;

//A_COLK=10MHZB_COLK=10MHZ

PWMSCLA=0X05;

//COLKSA=1MHZ

PWMSCLB=0X05;

//COLKSB=1MHZ

//PWMCLK=0XA2;

//PWM01选择SA,PWM45选择SA,PWM67选择SB

PWMCLK_PCLK1=1;

//PWM01选择SA_CLK=1MHZ

PWMCLK_PCLK5=1;

//PWM45选择SA_CLK=1MHZ

PWMCLK_PCLK

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1