智能车电磁组报告.docx_第1页
智能车电磁组报告.docx_第2页
智能车电磁组报告.docx_第3页
智能车电磁组报告.docx_第4页
智能车电磁组报告.docx_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目 录一学分认定书 XX二实验报告 XX三. 智能车制作研究报告 XX四心得体会 XX五.附录:程序源代码 XX(要求:给出一级目录,宋体加粗,四号字,1.5倍行距。)一学分认定书(每个队员1份)二实验报告实验一. 通用输入输出口和定时中断一、实验目的1. 掌握 MC9S12XS128 汇编语言对通用端口的操作指令。2. 掌握程序中指令循环和跳转的方法。3. 学会使用程序延时,并会大概估算延迟时间。二、实验任务1. 将 PORTA 口接八位DIP 开关,PORTB口接七段数码管显示,PORTK控制四个数码管其中某一个显示。2. 采用定时中断方式,利用八位DIP 开关输入二进制数,数码管显示其十进制数。三、实验内容实验中每个通用输入输出端口要用到的寄存器都有两个,端口定义寄存器和端口方向寄存器。以 A 端口为例,端口定义寄存器为PORTA和端口方向寄存器为DDRA。在MC9S12XS128的DATASHEET 上可以查到DDRA的地址是0x00(输入), DDRB的地址是0xFF(输出), DDRK的地址是0xFF(输出)。则初始化端口PORTA、PORTB、PORTK的语句为: void initGPIO(void) DDRA = 0x00; DDRB = 0xFF; DDRK= 0xFF; 置0 表示该位为接受输入位,置1 表示该位为输出位。 MC9S12DP256/DG128 中可以使用实时时钟或增强型定时器来完成定时功能,二者是相互独立的。本实验中用实时时钟定时。实时时钟的可以通过对外部晶振分频而得到一个定时中断。RTICTL 是实时时钟控制寄存器,向该寄存器写入内容,通过查表会得到一个分频因子,外部晶振除以分频因子就是中断的频率了。因为外部晶振频率是16MHz,要得到1ms中断一次,需要16000分频。在MC9S12XS128的DATASHEET 上可以查到RTICTL设置为0x8F, 中断允许寄存器CRGINT设置为0x80(开中断)。则初始化中断程序为:void InitRTI(void) RTICTL = 0x8F; CRGINT = 0x80; 一但进入中断,即开始读PORTA口的二进制数,并转换为十进制,通过PORTB口显示出来。由于是数码管动态显示,PORTK口控制四个数码管轮流显示。具体程序见开发板例程中SevenSegmentDigitalTube。四、思考题1.如果不用PORTA口做输入,直接让单片机内部从09999自动计数,并在PORTB口显示出计数过程,PORTK口控制四个数码管轮流显示,程序该如何改?对程序的修改如下:void interrupt 7 RTI_INT(void) time+; if(time =50) time=0; Count_Num+; LedData0 = Count_Num/1000%10; LedData1 = Count_Num/100%10; LedData2 = Count_Num/10%10; LedData3 = Count_Num%10; if(Count_Num =9999) Count_Num=0; PORTK = 0x01 = 4) LedNum = 0; CRGFLG = 0x80; 这样便可以在数码管中显示动态显示00009999,经试验检测该方法正确。实验二.A/D转换实验一、实验目的 了解 S12 单片机ADC 模块的使用方法。二、实验任务 用 S12 的ADC 模块将一路(或多路)模拟电平转换成数字量,并将转换结果显示在数码管上,或者通过SCI 发送到PC 终端显示出来。三、实验内容1、与 S12 的ADC 模块相关的寄存器如下,各寄存器的详细定义可参阅datasheet。 ATDCTL2:控制寄存器。主要设置A/D 标志位清除方式、A/D 采样触发方式、是否允许A/D 采样完成中断等。 ATDCTL3:控制寄存器。主要设置每次A/D 转换采样几路电平、采样结果的存储方式等。 ATDCTL4:控制寄存器。主要设置A/D 转换精度、A/D 转换时钟频率等。 ATDCTL5:控制寄存器。主要设置A/D 转换结果的对齐方式和数据类型,以及A/D 的采样模式(连续采样/单词采样,顺序转换/单通道转换等) ATDSTAT0:状态标志寄存器。包括A/D 转换完成标志,出错标志、转换结果存储索引等标志位。ATDTEST1:测试寄存器。 ATDSTAT1:标志寄存器。标识一次A/D 转换中各通道的完成情况。 以上寄存器的具体内容和其他与 ADC 模块相关的寄存器请参看datasheet 相应章节。 2、本实验采取AN14单通道连续AD转换模式,且结果存放在ATD0DR0L中, 转换序列长度为1,转换精度为8位,在freeze模式下继续转换。通过查看datasheet,得出ATD0初始化程序如下:void ATD0_init(void) ATD0CTL1=0x0e; /转换精度为8位,从AN14通道转换 ATD0CTL2=0x40; /禁止外部触发, 中断禁止 ATD0CTL2_ASCIE = 1; /允许中断 ATD0CTL3=0x88; /转换序列长度为1,在freeze模式下继续转换 ATD0CTL4=0xFF; ATD0CTL5=0x2E; /单通道连续AD转换模式 具体程序见开发板例程中testAN14。四、预习要求(1)参考datasheet 明确ADC 各寄存器的作用,主要思考以下问题: 1A/D 转换的时钟应该是多少?如何设置分频因子?答:A/D 转换的时钟应该是如下:其中PRS为ATDCLT4中的后五位。2A/D 转换如何启动?有几种启动方式?分别如何设置相关寄存器?答:可以用ATD0CLT2去给ATD模块上电,有五种上电(触发方式)分别如下:设置ATD0CLT2中的1012位。第10位为0时忽略外部触发,为1时则使用内部触发。但第十位为1时,前两位为00,01,10,11,分别对应下降沿触发,上升沿触发,低电平触发,高电平触发。3每次A/D 转换启动那几路电平采样?采样结果如何存储(注意FIFO 的A/D 转换模式)?采样结果的数据类型(8 位/10 位?左对齐/右对齐?有符号数/无符号数?)? 答: 每次启动那一路转化得看ATD0CTL5中的设置。采样结果的储存也是在该寄存器控制的。采样结果的位数也是该寄存器控制。如ATD0CTL5 = 00110000时该结果为左对齐无符号型数据是连续转化,多通道转化。并且从0通道开始转化。4如何判断A/D 转换是否结束?如何清标志位?答:从ATD0START1_CCF0 = 0 时转化完成。 (2)如何实现多通道转换?答:ATD0CTL5中的第四位置1。五、实验现象 开发板通电后,用起子旋转电位器,发现数码管上数字从0255连续变化。 实验三、PWM 模块实验一、实验目的1 学习使用 PWM 模块。2 用 PWM 实现小型直流电机调速和舵机转向。二、实验任务1、使用单片机内部PWM 模块调制产生不同脉宽的方波,实现小型直流电机调速和舵机转向。2、将 PORTA 口接八位DIP 开关,PORTB口接七段数码管显示,PORTK控制四个数码管其中某一个显示,数码管动态显示原理同实验1。拨码开关高两位控制舵机,当为00,11代表舵机转到正中央,为10,01代表舵机分别左转右转。拨码开关低六位控制电机,表示PWM占空比。数码管第一位显示舵机控制方向,后两位显示电机占空比。三、实验内容 1. PWM 模块共有28 个寄存器,其中8 个为系统保留寄存器,具体介绍如下: PWM 启动寄存器(PWME) 本寄存器的 8 个bits 分别用来开关8 路PWM 的通道。PWM 极性寄存器(PWMPOL)本寄存器的 8 位bits 分别用来设定8 路PWM 通道输出波形的起点电平。 PWM 预分频寄存器(PWMPRCLK)本寄存器用来设定 ClockA 和ClockB 的预分频因子。 ClockA 分频寄存器(PWMSCLA)本寄存器提供 PWM 模块操作时的几个控制位。 PWM 通道周期寄存器(PWMPERx)此 8 个寄存器分别为8 个通道设定方波的周期。 PWM 通道脉宽寄存器(PWMDTYx)此 8 个寄存器分别为8 个通道设定脉宽。 PWM初始化程序如下: void initPWM(void) PWME=0x00; /关闭所有PWM通道 PWMPOL = 0xFF; /PWM极性选择,选择一个周期开始时为高电平 PWMPRCLK = 0x22; /CLOCK A,B时钟分频,均选择从总线四分频 10M PWMSCLA = 5; /CLOCK SA从CLOCK A十分频,1M PWMSCLB = 5; /CLOCK SB从CLOCK B十分频,1M PWMCTL = 0xF0; /01级联,23级联,45级联,67级联 PWMCLK = 0xFF; /PWM始终选择,选择CLOCK SA SB为PWM时钟 PWMPER01=1000; /电机PWM正转频率1k PWMDTY01=0; PWMPER23=1000;PWMDTY23=0; /电机反转频率为1k PWMPER45=20000; /舵机PWM频率为50Hz PWMDTY45=STEER_CENTER; /舵机占空比 PWME_PWME3=1; PWME_PWME1=1; /电机PWM波开始输出 PWME_PWME5=1; /舵机PWM波开始输出 参考程序参见实验例程motorpwm四、实验现象拨码开关高两位控制舵机转向,当为00,11舵机在中央,为10,01舵机分别左转右转。拨码开关低六位控制电机,表示PWM占空比。数码管第一位显示舵机控制方向,后两位显示电机占空比。占空比越大,转速越大。四、电磁组实验信号处理一、实验步骤1、电磁传感器检测到信号2、单片机处理这些信号判断是否需要转向、减速二、实验内容1、电磁感器检测处理后为一模拟电平,需用到AD 转换程序。将光信号转换为数字量存在单片机中。接下来由单片机处理这些数,判断是否要转向。最简单的两个传感器布局,当导线在传感器中央时,相应的AD数值相同,导线偏向右边的传感器时,右边传感器的值变大,左边传感器值变小。本实验关键在于如何确定导线位置。 2、输入输出口和ATD 的初始化同前面的实验一和实验二,将程序运行后,打 开Data1 窗口,找出AD 转换后的数字值,应该在0-255 之间。将车子的左边电感对准黑色牵引线,观察两个传感器。理论上应该该电感的值最大,调解好放大器的应在160左右记录该数值(159),再将黑线想又移动,发现右边传感器的值逐渐增大,左边传感器的值逐渐减小。黑线一动到右边电感正下方时,将此电感的值调解到160左右,记录该数值(150)。而黑线偏出两个电感的范围时,两个传感器的值同时减小。 正常情况下小车检测中心线程序如下: /计算Line_center if(ad_data0+ad_data1100) Line_center = (int)(ad_data0)*160/159-(int)(ad_data1)*160/150; /归一化,差值计算中心线 Get_Line = 1; else Get_Line = 0; 根据检测到黑线的位置可以判断行车方向。参考程序见电磁基本程序。三. 智能车制作研究报告1.原理介绍可以确定电感相对于导线的位置,或者说可以确定导线相对于小车的分布2.电磁传感器首先由LC回路检测磁场,输出信号Singal1。通过放大电路INA128将信号放大通过获得负电源。因为放大后的电路频率依然为20KHz的周期信号,所以我们通过下面电路转换为稳定输出。在起跑线检测上我们用干簧管电路。幅值测量可以不使用检波电路,而直接将上述单管放大电路中,三极管集电极电压接入单片机的AD 端口,使用单片机直接采样交变电压信号只要保证单片机的 AD 采集速率大于20kHz 的5-10 倍,连续采集5-10 个周期的电压信号(大约100 数据左右),就可以直接从采集的数据中最大值减去最小值获得信号的峰峰值。假设采集了128 个数据: , 1,2, ,128 i x i= ,计算信号的峰峰值p p V 可以有下式计算:上面计算计算方法由于只用应用了数据的最大值、最小值,所得结果容易受到噪声的影响,所以还可以通过计算数据交流信号的平均值、有效值反映信号的幅值:上面所计算得到的 , ave e x x 等都与信号的峰峰值成单调关系,所以也可以用来进行计算位置差值信号。软件设计程序主要用到 S12 芯片中的PWM 模块, TIM 模块 、PIT 模块、 AD 模块、 I/O 模块 以及 SCI 模块等。PWM 模块主要用来控制舵机和电的运转; TIM 模块主要是用在了测速模块,捕捉中断并计算瞬时度。PIT模块用于设置定时中断; AD 模块主要用于读取传感器信息以判断黑线位置; I/O 模块主要是用来读取按键信息和控制数码管显示; SCI 模块只要用在无线串口传送模块。源码后附四心得体会 (每个队员都要提交心得体会) 五.附录:程序源代码#include /* common defines and macros */#include derivative.h /* derivative-specific definitions */*2012东南大学智能车竞赛电磁组Demo程序*电感信号分别接0,1口*/#define StrCnr 1500/*/初始化锁相环/将总线频率调整到40M/*/void InitPLL(void) CLKSEL=0x00; /禁止锁相环,时钟由外部晶振提供,总线频率=外部晶振/2 PLLCTL_PLLON=1; /打开锁相环 SYNR=0x49; REFDV=0x43; / pllclock=fvco=2*osc*(1+SYNR)/(1+REFDV)=80MHz; POSTDIV = 0x00; _asm(nop); /BUS CLOCK=40M _asm(nop); while(!(CRGFLG_LOCK=1); / 等待锁相环初始化完成 CLKSEL_PLLSEL =1; / 使用锁相环 /*/初始化通用IO口/A口输入B口和K口输出/*/void InitGPIO(void) DDRA = 0x00; /A口输入 DDRB = 0xFF; /B口输出 DDRK = 0xFF; /K口输出/*/初始化PWM/*/void InitPWM(void) PWME=0x00; /关闭所有PWM通道 每位对应一个端口 PWMPOL = 0xFF; /PWM极性选择,选择一个周期开始时为高电平 PWMPRCLK = 0x22; /CLOCK A,B时钟频率为10M PWMCLK = 0xFF; /选择CLOCK SA SB为PWM时钟 PWMSCLA =5; /CLOCK SA频率为1M PWMSCLB =5; /CLOCK SB频率为1M PWMCTL = 0xF0; /设定PWM通道两两级联使用 PWMCAE=0; PWMPER01=100; /电机正转频率10k PWMDTY01=0; PWMPER23=100; /电机反转频率10k PWMDTY23=0; PWMPER45=20000; /设定舵机控制线的频率为50Hz PWMDTY45=StrCnr; /设定舵机初始位置 PWME_PWME3=1; PWME_PWME1=1; /电机PWM波开始输出 PWME_PWME5=1; /舵机PWM波开始输出 /*/初始化AD/*/ void InitATD(void) ATD0CTL0 = 0x0f; /多路转换时转换 ATD0CTL1_SRES = 2; /转换精度为12位 ATD0CTL1_SMP_DIS=1; ATD0CTL2_AFFC = 1; /中断标志位自动清零 /ATD0CTL2_ASCIE = 1; /一个序列传唤结束触发中断 /ATD0CTL3 = 0xC0; /结果寄存器对齐方式右对齐(ATD0CTL3_DJM=1),转换序列长度为8(8路),循环转换,freeze模式下继续转换 ATD0CTL3 = 0x80; ATD0CTL4_SMP = 0; / 采样周期为4个周期 ATD0CTL4_PRS = 19; /atdclk=busclk/(2*(19+1)=1M ATD0CTL5_SCAN = 1; /连续转换模式 ATD0CTL5_MULT = 1; /多通道采样 /*/初始化实时中断/*/ void InitRTI(void) RTICTL =0x9F; /2ms中断一次 void main(void) /* put your own code here */ InitPLL(); InitGPIO(); InitPWM();In

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论