飞思卡尔第一张

飞思卡尔第一张
飞思卡尔第一张

3.1 实验一 I/O口输入输出实验

4.实验原理

如图3-1所示,将PTB6设置为输出端口后,若向PTB6写高电平时,LED灯不亮,若写低电平,则LED亮。PTA2设置为输入端口后,在按键SW未按下时,读PTA2始终为高电平,只有在按键SW按下时,读PTA2时才得到低电平。

图3-1 LED灯与按键控制电路原理图

5.实验内容

⑴结合开发板电路图,用跳线夹连接对应LED引脚。即LED1、LED2分别与PTB6、PTB7相连接。将PTB 口定义为输出接口。对端口写0即可点亮LED灯。单步运行观察实验现象。

⑵结合开发板电路图,用跳线夹再将开发板上的按键SW1、SW2连到PTA2。将PTA口定义为输入口,将PTB口定义为输出口。按下SW1时点亮LED1、LED2。按下SW2时熄灭LED1、LED2。

6.参考程序

⑴直接点亮LED灯,其参考程序如下。

C语言程序:

#include

#include "derivative.h" /* 头文件 */

void main(void) {

PTBDD=0xff; /*定义PTB口为输出口 */

PTBD=0xff; /*输出高电平,LED灯灭*/

PTBD=0x00; /*PTB口输出低电平,即PTB6、PTB7输出低电平 */

for(;;) { __RESET_WATCHDOG(); /* 清看门狗 */

} /* 死循环 */

}

汇编程序(加粗部分为所需添加的程序代码):

;******************************************************************* ;* This stationery serves as the framework for a user application. * ;* For a more comprehensive program that demonstrates the more * ;* advanced functionality of this processor, please see the * ;* demonstration applications, located in the examples * ;* subdirectory of the "Freescale CodeWarrior for HC08" program * ;* directory. * ;*******************************************************************

; Include derivative-specific definitions

INCLUDE 'derivative.inc'

;

; export symbols

;

XDEF _Startup

ABSENTRY _Startup

;

; variable/data section

;

ORG RAMStart ; Insert your data definition here ExampleVar: DS.B 1

;

; code section

;

ORG ROMStart

_Startup:

LDHX #RAMEnd+1 ; initialize the stack pointer

TXS

CLI ; enable interrupts

mainLoop:

; Insert your code here

MOV #$FF,PTBDD; 端口方向寄存器初始化为输出

MOV #$FF,PTBD; 输出高点平,LED灯灭

MOV #$00,PTBD; 输出低电平,LED灯亮

NOP

feed_watchdog

BRA mainLoop

;**************************************************************

;* spurious - Spurious Interrupt Service Routine. *

;* (unwanted interrupt) *

;************************************************************** spurious: ; placed here so that security value NOP ; does not change all the time.

RTI

;**************************************************************

;* Interrupt Vectors *

;**************************************************************

ORG $FFFA

DC.W spurious ;

DC.W spurious ; SWI

DC.W _Startup ; Reset

⑵按键控制LED灯

参考C语言程序如下:

#include

#include "derivative.h" /* 头文件*/

void main(void) {

PTADD=0x00; /* 初始化PTA口,定义为输入口*/

PTBDD_PTBDD6=1;

PTBDD_PTBDD7=1; /* PTB6,PTB7定义为输出口*/

PTBD_PTBD6=1;

PTBD_PTBD7=1; /* PTB6,PTB7均写为1,开始时灯熄灭 */

for(;;) {

if(PTAD_PTAD2==0)

{

PTBD_PTBD6=0;

PTBD_PTBD7=0;

}

else if(PTAD_PTAD3==0)

{

PTBD_PTBD6=1;

PTBD_PTBD7=1;

}

else __RESET_WATCHDOG(); /* 清看门狗 */

}

}

3.2 实验二键盘中断实验

键盘中断(KBI)模块的块框图如图2-2所示,KBI模块允许多达8个管脚作为额外的中断源。写键盘中断管脚使能寄存器(KBIPE)中KBIPEn位可独立的使能或屏蔽每个KBI管脚。每个KBI管脚能够基于键盘中断状态和控制寄存器(KBISC)中的KBMOD位被配置成边沿敏感性或者边沿和电平敏感性。边沿敏感性能够被软件编程为下降或上升沿;电平能被编程为低或高。通过设置键盘中断选择寄存器(KBIES)中KBEDGn位可选择具体敏感性。

图3-2 键盘中断(KBI)块框图

若要正确的使用KBI模块,需遵循以下步骤:

⑴通过清除KBISC中KBIE,屏蔽键盘中断。

⑵通过设置KBIES中相应KBEDGn位使能KBI极性。

⑶如果使用内部上拉/下拉功能,配置PTAPE和PTBPE中相关位上拉使能位。

⑷通过设置KBIPE中相应KBIPEn位使能相应管脚为键盘中断管脚。

⑸写1到KBISC中KBACK,清除任何错误中断。

⑹设置KBISC中KBIE为1,使能中断。

5.实验内容

MC9S08QG8开发板上的电路连接如图2-3所示,使能KBIP2、KBIP3,进而对LED1、LED2进行控制。实现当按下SW1时,LED1亮、LED2灭,当按下SW2时,LED1灭、LED2亮。在中断函数入口处设置断点,单步运行观察实验现象。

图3-3 键盘中断实验电路图

6.参考程序

#include /* for EnableInterrupts macro */

#include "derivative.h" /* include peripheral declarations */

void main(void) {

DisableInterrupts; /*关中断总允许 */

PTADD_PTADD2=0;

PTADD_PTADD3=0; /*PTA2、PTA3定义为输入口*/

PTBDD_PTBDD6=1;

PTBDD_PTBDD7=1; /*PTB6、PTB7定义为输出口*/

PTBD_PTBD6=1;

PTBD_PTBD7=1; /*LED灯均熄灭*/

KBISC_KBIE=0;

KBIES=0x00; /*下降沿/低电平触发*/

KBIPE=0x0C; /*键盘中断开启即KBIP2、KBIP3键盘中断开启*/

KBISC_KBACK=1; /*清除任何错误中断*/

KBISC_KBIE=1; /*键盘中断允许*/

EnableInterrupts; /* 开中断总允许*/

for(;;) {

__RESET_WATCHDOG();

}

}

void interrupt 18 Keyboard( ) {

KBISC_KBACK=1;

KBISC_KBIE=0; /*禁止键盘中断*/

if(PTAD_PTAD2==0){

PTBD_PTBD6=0;

PTBD_PTBD7=1;

}

else if(PTAD_PTAD3==0) {

PTBD_PTBD6=1;

PTBD_PTBD7=0;

}

else __RESET_WATCHDOG();

KBISC_KBIE=1; /*开启键盘中断*/

}

中断服务程序函数还有一种写法,即如下:

void interrupt Keyboard( ) {

KBISC_KBACK=1;

KBISC_KBIE=0;

………

………

………

就是将函数入口的键盘中断向量号“18”删除了,其它程序保持不变,如果直接进行调试将不能进入键盘中断服务程序,此时还需要在左侧项目栏中Project settings/linker files/preject.prm的末尾添加中断向量 VECTOR ADDRESS 0xFFDA Keyboard以作为中断入口设置。(C语言编程时,其他中断也有类似的中断入口向量需要设置)。0xFFDA是键盘中断向量入口地址,Keyboard是用户定义的键盘中断函数,它必须与main函数中用户定义的键盘中断函数名一致,否则会出现错误。

3.3 实验三定时器实验

4.实验原理

⑴8位定时器模块——MTIM。该模块只有软件定时功能。它由8位计数器、辅助寄存器、状态与控制寄存器、配置寄存器组成,被称为8-BIT MODULO TIMER MODULE(MTIM)。当计数器中的计数值达到MTIM 模寄存器中预先给定的值时,定时器就会溢出,一次计时结束。其原理图如图2-4所示。

图3-4 MTIM原理图

⑵16位定时模块——TPM。该模块主要包括一个可选择时钟源与分频器的16位计数器、一个16位的模寄存器、2个独立的定时器通道。每个通道可以有外部管脚对应,使得这2个通道可以工作于输入捕捉、输出比较或PWM模式。通过主状态与控制寄存器TPMSC中的控制位CPWMS的设置,可以使主计数器TPMCNT 成为加法计数器(CPWMS=0)或者是加/减计数器(CPWMS=1)。功能比8位的MTIM模块丰富了很多。原理图如2-5所示。

图3-5 TPM原理图

在TPM模块作为PWM使用时有两种方式,即:边沿排列方式和中心排列方式。图2-6、2-7分别给出了图示工作原理。

图3-6 边沿排列PWM方式

图3-7 中心排列PWM方式

5.实验内容

⑴按照查询法,利用8位定时模块——MTIM进行定时,使得LED灯实现亮3秒、灭3秒、亮3秒、灭3秒……无限循环的现象。

⑵采用中断法,利用16位TPM模块编程,实现LED灯出现亮2秒、灭2秒、亮2秒、灭2秒……无限循环的现象。

⑶利用TPM的PWM模块,在通道0处产生边沿排列方式的方波,周期为1ms,占空比为25%。用示波器观察并记录波形。

⑷利用TPM的PWM模块,在通道1处产生中心排列方式的方波,周期为1ms,占空比为25%。用示波器观察并记录波形。

6.参考程序

⑴查询法8位定时模块(MTIM)定时的参考程序。本程序采用内部总线时钟(4MHZ),并64分频,定时器溢出值为0xFA,外部采用最大值为750的一个递减循环。750*64*250/4M=3秒。

#include

#include "derivative.h"

int a; /*定义循环参数*/

void main(void)

{

DisableInterrupts; /*禁止中断*/

PTBDD=0xff;

PTBD=0xff; /*初始化B口*/

a=750;

MTIMCLK=0x06; /*采用内部总线时钟,且64分频 */

MTIMMOD=0x0FA;

MTIMSC=0x20; /*启动定时器 */

while(1)

{

__RESET_WATCHDOG();

if(MTIMSC_TOF==1)

{

MTIMSC_TOF=0;

a-=1;

if(a==0)

{

a=750;

PTBD=~PTBD;

}

}

}

}

⑵中断法16位定时模块(TPM)的参考程序。本程序采用内部总线时钟,并128分频,定时器溢出值为0xF424(十进制为62500),62500*128/4M=2秒。

#include

#include "derivative.h"

void main(void) {

EnableInterrupts;

PTBDD=0xff;

PTBD=0xff;

TPMMODL=0x24;

TPMMODH=0x0f4; /*定时2秒*/

TPMSC=0x4f; /*开中断,采用内部总线时钟,并128分频 */

for(;;) {

__RESET_WATCHDOG();

}

}

void interrupt 7 TPM(){

PTBD=~PTBD; /*B口送低电平,点亮LED1和LED2*/

TPMSC_TOF=0; /*清中断标志 */

}

⑶利用TPM模块边沿排列方式产生1ms方波,占空比为25%。采用内部总线时钟,分频数为1,模寄存器值为0x0FA0(十进制为4000),通道0 的通道值寄存器值为0x03E8(十进制为1000)。

#include

#include "derivative.h"

int a;

void main(void) {

EnableInterrupts;

TPMSC=0x08; /*工作在边沿对齐PWM模式,选择总线时钟工作,预分频因子为1*/

TPMMODH=0x0F;

TPMMODL=0x0A0; /*向模寄存器写初值*/

TPMC0SC=0x28; /*高为真脉冲*/

TPMC0VH=0x03; /*向通道1定时寄存器写初值,并触发计数*/

TPMC0VL=0x0E8;

PMC0SC_CHOI=1;/*允许通道1中断*/

for(;;) { __RESET_WATCHDOG(); }

}

void interrupt 5 TPM0() {

a=TPMC0SC;

TPMC0SC_CH0F=0; /*清除中断标志位*/

TPMC0VH=0x03;/*重装初值*/

TPMCOVL=0x0E8;

}

⑷利用TPM模块中心排列方式产生1ms方波,占空比为25%。采用内部总线时钟,分频数为1,模寄存器值为0x07D0(十进制为2000),通道0 的通道值寄存器值为0x01F4(十进制为500)。

#include

#include "derivative.h"

int a;

void main(void) {

EnableInterrupts;

TPMSC=0x28; /*工作在以中心排列PWM模式,选择总线时钟工作,预分频因子为1*/

TPMMODH=0x07;

TPMMODL=0x0D0; /*向模寄存器写初值*/

TPMC1VH=0x01;

TPMC1VL=0x0F4; /*向通道1定时寄存器写初值,并触发计数*/

TPMC1SC=0x48;/*高为真脉冲,允许通道1中断。*/

for(;;) {

__RESET_WATCHDOG();

}

}

void interrupt 6 TPMC1() {

a=TPMC1SC_CH1F;

TPMC1SC_CH1F=0; /*清除中断标志位*/

TPMC1VH=0x01;

TPMC1VL=0X0F4;/*重装通道寄存器初值。*/

}

3.4 实验四模数转换(ADC)实验

4.实验原理

将时间连续、幅值连续的模拟量转换为时间离散幅值也离散的数字量,A/D转换器一般要经过采样、保持、量化及编码4个过程。在实际电路中,通常分为采样和保持、量化和编码两个过程同时实现。图2-8 所示为ADC电路结构图。

图 3-8 ADC电路结构参考图

5.实验内容

⑴利用ADC转换,采用通道0,在仿真输入条件下对模数转换进行观察。即:选择下载方式为Full Chip Simulation,然后在运行菜单里选择HCS08FCS/ADC Module/Queue ADC Input Data(ADDI)。输入一个介于$0——$FF中的数值,运行程序,在memory窗口的$0100-0101处观察a中所得到的数值是否与输入值一致。

⑵利用中断,选择VREFH通道,进行模数转换,设置转换结果为10位,连续转换5次,观察结果是否为$03FF。在中断服务函数处设置断点,观察进入中断的状况。

⑶利用硬件中断脉冲来触发AD转换,选择VREFL通道,转换5次,结果取8位精度,转换结束后点亮LED1和LED2。

⑷①选择VREFH通道,启动内部比较器,转换结果取8位精度,选择大于或等于触发比较模式,比较值

低位寄存器取为$90,记录实验结果。

②在①的基础上修改程序,将ADCSC1=0x1d换为ADCSC1=0x1e,选择VREFL通道,记录实验结果。

③在②的基础上修改程序,将比较器的触发方式选为小于触发,记录实验结果。

④在③的基础上修改程序,选择VREFH通道,记录实验结果。

6.参考程序

⑴仿真输入ADC模数转换参考程序:

#include

#include "derivative.h"

int a;

void main(void) {

DisableInterrupts;

APCTL1=0x01; /* AD0管脚,屏蔽I/O控制,只作为A/D输入通道使用*/

ADCCFG=0x90; /* 配置为低功耗、1分频、长采样、8位模式、总线时钟 */ ADCSC1=0x00; /*启动一次AD转换*/

while(ADCSC1_COCO!=1) {__RESET_WATCHDOG();} /*查询转换是否结束*/

a=ADCRL; /*读取转换结果并转移*/

for(;;){__RESET_WATCHDOG(); }

}

⑵中断法转换5次内部高电平:

#include

#include "derivative.h"

int a[5];

int r,i;

void main(void)

{

DisableInterrupts;

ADCCFG=0x98; /*初始化,采用10位精度转换结果*/ for(r=0;r<5;r++)

{ /*转换5次*/

ADCSC2=0;

ADCSC1=0x5d ; /*启动一次转换,转换结果应为$03FF*/

EnableInterrupts;

for(i=0;i<100;i++){ __RESET_WATCHDOG();}/*等待转换结束触发中断*/

}

for(;;) { __RESET_WATCHDOG(); }

}

void interrupt 19 ADC(){ /*中断服务子程序,将结果保存*/

a[r]=ADCR; /*读取转换结果并转移*/

}

⑶硬件中断脉冲触发AD转换:

#include

#include "derivative.h"

int a[5];

int r;

void main(void) {

DisableInterrupts;

PTBDD=0xFF;

ADCCFG=0x90; /* 配置为低功耗,1分频、长采样、8位模式、总线时钟 */

for(r=0;r<5;r++) { /*循环5次*/

SRTISC=0x14; /*设置RTI,使能实时中断。*/

ADCSC2=0x40; /*选择硬件触发转换*/

ADCSC1=0x1E ; /*选择VREFL通道 转换内部低电平 */

while(ADCSC1_COCO!=1){__RESET_WATCHDOG();} /*等待转换结束*/

a[r]=ADCRL; /*一个转换结束后,读取数据入内存*/

}

PTBD_PTBD6=0;

PTBD_PTBD7=0;

for(;;) { __RESET_WATCHDOG(); } /* 无限循环,禁止看门狗复位*/

}

I.转换高电平,大于或等于触发比较器模式:

#include

#include "derivative.h"

int a[10];

int r ;

void main(void) {

DisableInterrupts;

ADCCFG=0x90; /* 配置为低功耗、1分频、长采样、8位模式、总线时钟 */ for(r=0;r<10;r++) { /*循环10次*/

ADCSC2=0x30; /*软件触发转换,启动比较、置大于或等于触发*/

ADCCVL=0x90; /*低位比较值寄存器。*/

ADCSC1=0x1d; /*接通内部高电平,若为0x1e则表示连接内部低电平*/

while(ADCSC1_COCO!=1) {__RESET_WATCHDOG();} /*判断转换是否结束*/

a[r]=ADCRL; /*读取转换结果并转移*/

}

for(;;) {__RESET_WATCHDOG(); }

}

II.转换低电平,小于触发比较器模式:

#include

#include "derivative.h"

int a[10];

int r ;

void main(void) {

DisableInterrupts;

ADCCFG=0x90; /* 配置为低功耗、1分频、长采样、8位模式、总线时钟 */ for(r=0;r<10;r++) { /*循环10次*/

ADCSC2=0x20; /*软件触发转换,启动比较器、置小于触发*/

ADCCVL=0x90; /*低位比较值寄存器。*/

ADCSC1=0x1e; /*连接内部低电平 */

while(ADCSC1_COCO!=1) {__RESET_WATCHDOG();} /*判断转换是否结束*/

a[r]=ADCRL; /*读取转换结果并转移*/

}

for(;;) {__RESET_WATCHDOG(); }

}

3.5 实验五异步串行通信SCI

4.实验原理

数据的串行发送使用SCI模块内部的移位寄存器将数据逐位地发送到传输线上。信号线上无信号传

输时保持逻辑1。

易知,起始位必须是逻辑0,停止位必须是1,停止位可以是1个、1.5个或2个,含义是两个被发

送的数据之间至少要间隔1位、1.5位或2位;中间的部分叫数据位,是被传输的内容,它的位数可以

是5位、6位、7位、8位、9位,一般用7位、8位和9位(最后一位是奇偶校验位)的格式进行数据

传输;发送时从低位起,逐位地发出,低位在前,高位在后。当采用9位的格式进行传输的时候,最后

一位(第九位)是“奇偶校验位”,它是通过SCI模块中SCIC3寄存器的R8(接收)、T8(发送)位来设

置。在发送过程中,被人工添加到T8位的值,由单片机本身自动地添加到发送数据的第九位(最后一

位),在接收过程中,单片机也会自动将接收到的数据的第九位(最后一位)卸载到R8位,这是它的运

行机制。

5.实验内容

⑴将相应管脚用导线连接起来,即:在保证两个通信单片机共地的情况下,发送单片机的TXD与接收单片机的RXD连接起来。在相应参考程序中,发送程序和接收程序按照查询和中断两种方式各给出了两个参考程序,发送和接收可两两组合共有四种情况,两人一组,选取两种进行实验,记录实验结果,画出程序流程图。

⑵按照TXD—RXD的对应关系将两个单片机的串口引脚连接起来(同时还要保证共地)。利用中断方式,实现接收、发送依次进行,单片机1发送数据0x37(若发送成功则点亮LED1),单片机2进行接收,当接收到0x37时(接收成功则点亮LED2),再往单片机1发送一个数据0x38(发送成功则点亮LED1),若单片机1接收成功则点亮LED2。

6.参考程序

⑴①发送参考程序

I 查询方式发送:

#include

#include "derivative.h"

/*只发送一次不采用中断*/

int a;

void main(void) {

DisableInterrupts;

PTBDD=0xFF;

PTBD=0xFF;

SCIBDH=0;

SCIBDL=0x1A;

SCIC1=0x00;

SCID=0x37; /*发送数据为0x37*/

SCIC2=0x08;/*不采用中断,打开发送器*/

while(SCIS1_TDRE!=1){ __RESET_WATCHDOG();

}

PTBD_PTBD6=0; /*发送成功则点亮LED1*/

for(;;) {

__RESET_WATCHDOG();

}

}

II 中断方式发送:

#include

#include "derivative.h"

/*中断发送*/

int a;

void main(void) {

EnableInterrupts;

PTBDD=0xFF;

PTBD=0xFF;

SCIBDH=0x00;

SCIBDL=0x1A;

SCIC1=0x00; /*普通发送模式*/

SCID=0x37;

SCIC2=0x88; /*采用中断,打开发送器*/

for(;;) {

__RESET_WATCHDOG();

}

}

void interrupt 16 SCI1 () {

PTBD_PTBD6=0; /*点亮LED1,表示发送成功 */ SCIC2_TIE=0; /*禁止发送中断 */

}

②接收参考程序

I 查询方式接收:

#include

#include "derivative.h"

/*查询接收一次*/

int b;

void main(void) {

DisableInterrupts;

PTBDD=0xFF;

PTBD=0xFF;

SCIBDH=0x00;

SCIBDL=0x1A;

SCIC1=0x00;

SCIC2=0x04; /*只打开接收器,不采用中断方式*/

while(b!=0x37){

while(SCIS1_RDRF!=1){ __RESET_WATCHDOG();

}

b=SCID;

}

PTBD_PTBD6=0; /*若接收成功则点亮LED1*/

for(;;) {

__RESET_WATCHDOG();

}

}

II 中断方式接收:

#include

#include "derivative.h"

/*中断接收一次 */

int c,d;

void main(void) {

EnableInterrupts;

PTBDD=0xFF;

PTBD=0xFF;

SCIBDH=0x00;

SCIBDL=0x1A;

SCIC1=0x00;

SCIC2=0x24; /*打开接收器,允许接收中断 */

for(;;) {

__RESET_WATCHDOG();

}

}

void interrupt 15 sci0(){

SCIC2_RIE=0;

d=SCIS1; /*清楚中断标志位RDRF*/

c=SCID;

if(c==0x37){

PTBD_PTBD6=0; /*若接收成功则点亮LED1*/ DisableInterrupts;

}

else {

SCIC2_RIE=1;

}

}

II中断发送与中断接收相结合

I 单片机1参考程序(先发送后接收):

#include

#include "derivative.h"

/*中断发送,再中断接收*/

int a,b;

void main(void) {

EnableInterrupts;

PTBDD=0xFF;

PTBD=0xFF;

SCIBDH=0x00;

SCIBDL=0x1A;

SCIC1=0x00; /*普通发送模式*/

SCID=0x37;

SCIC2=0x88; /*采用中断,打开发送器*/

for(;;) {

__RESET_WATCHDOG();

}

}

void interrupt 15 SCI0 () { /*接收中断函数 */

SCIC2_RIE=0; /*先禁止接收中断 */

b=SCIS1;

a=SCID; /*清除接收标志位 */

if(a==0x38){

PTBD_PTBD7=0;/*若接收成功点亮LED2*/

}

else SCIC2_RIE=1; /*若未接收到正确结果,继续允许接收中断 */ }

void interrupt 16 SCI1 () { /*发送中断函数 */

PTBD_PTBD6=0; /*点亮LED1,表示发送成功*/ SCIC2_TIE=0; /*禁止发送中断*/

SCIC2=0x24; /*允许接收中断*/

}

II 单片机2参考程序(先接收后发送):

#include

#include "derivative.h"

/*中断接收一次再中断发送

int c,d;

void main(void) {

EnableInterrupts;

PTBDD=0xFF;

PTBD=0xFF;

SCIBDH=0x00;

SCIBDL=0x1A;

SCIC1=0x00;

SCIC2=0x24;

for(;;) {

__RESET_WATCHDOG();

}

}

void interrupt 15 sci0(){/*接收中断服务函数*/

SCIC2_RIE=0; /* 禁止接收中断 */

d=SCIS1;

c=SCID; /*清除中断标志位RDRF*/

if(c==0x37){

PTBD_PTBD7=0; /* 点亮LED2表示接收成功 */ SCID=0x38;

SCIC2=0x88; /* 发送一个新的数据*/

}

else {

SCIC2_RIE=1;

}

}

void interrupt 16 sci1(){ /* 发送中断函数 */

SCIC2_TIE=0; /* 禁止发送中断 */

PTBD_PTBD6=0; /*点亮LED1表示发送成功*/

}

3.5 实验六同步串行通信SPI

4.实验原理

SPI系统的工作原理可以想象成一个16位环行移位寄存器,一半在单片机里,另一半在外设里,当单片机准备好发送数据时,这个16位寄存器循环移位8位,原来单片机的8位数据移位到了从设备端的8位空间,原来从设备端的8位数据移位到了单片机的8位空间,这样有效地在单片机与外设之间交换了数据,如图2-9所示。在某些情况下,这种循环移位是不完全的,因为数据可能只是从单片机到外设或只是从外设到单片机。

图3-9 SPI系统连接图

SPI结构框图如图2-10所示。

(完整word版)智能车发展历史

智能小车是一个集环境感知、规划决策、自动驾驶等功能于一体的综合系统。它集中的运用了计算机、传感器、信息。通信、导航、人工智能及自动控制等技术,是典型的高新技术综合体。 一.国外智能车设计竞赛 (1)美国的智能车大赛 美国国防部与院校、企业和发明家联合开展,全球领先的智能汽车竞赛。 2007年11月,美国第三届智能汽车大赛在加州维克托维尔举行。本届智能汽车比赛的目标是对未来科学家的激励。大学、企业和发明家们期望制造出通过洛杉矶和拉斯维加斯间荒地、行程160km的自主控制汽车。 参赛汽车的车顶上有旋转的激光器,两边有转动的照相机,完全由电脑控制,利用卫星导航、摄像、雷达和激光,人工智能系统可判断出汽车的位置和去向,随后将指令传输到负责驾驶车辆的系统,丝毫不受人的干涉,用传感器策划和选择路线。参赛的无人驾驶智能汽车沿着附近公路飞奔。 (2)韩国大学生智能车大赛 韩国汉阳大学汽车控制实验室在飞思卡尔半导体公司资助下举办,以HCS12单片机为核心的大学生智能模型汽车竞赛。 组委会提供一个标准的汽车模型、直流电机和可充电式电池,参赛队伍要制作一个能够自主识别路线的智能车,在专门设计的跑道上自动识别道路行驶,谁最快跑完全程而没有冲出跑道并且技术报告评分较高,谁就是获胜者。 二.国内智能车辆竞赛现状研究 (1)竞赛的起源 2005年11月,中国教育部高等学校自动化专业指导分委员会与飞思卡尔半导体公司签署了双方长期合作协议书。协议书规定从2006年起,飞思卡尔将至少连续5年协办“飞思卡尔”杯全国大学生智能汽车邀请赛,提供参赛队的标准硬、软件技术平台和竞赛优胜者奖金,并为主办单位提供一定的竞赛组织经费,我国智能车竞赛由此开始. (2)智能车竞赛的地位 教育部:与老牌的数学建模、电子设计、机械设计、结构设计等四大竞赛并列,被认定为国家教育部正式承认的五大大学生竞赛项目. 各高校:清华、交大、科大等名校均参加,最投入为北京科大,每年均举行校内赛(09年规模为79支队伍). 校内:综合类竞赛(A类)仅3种,分别为智能汽车、机器人、挑战杯。 (3)竞赛历史——第一届邀请赛 2006年8月20日至21日在清华大学进行,共有来自全国57所高校的112支参赛队参加。赛道中只有直道和弯道,没有上下坡。从赛车寻迹技术方案来看,赛道检测方式也大体分为红外发射/接受管检测方式和CCD/CMOS摄像头检测方式两类。摄像头方案的成绩普遍好于红外传感器方案。 (4)竞赛历史——第二届,赛区+总决赛 扩大到全国具有以自动化专业为主的理工类高等本科学校约300余所。采取赛区和全国总决赛结合的形式。全国分为5个赛区,总决赛在上海交大举行。总决赛中出现上下坡的限制,比赛变得复杂了。小车的平均速度较比上年有了显著的提高,采用摄像头方案的成绩更加明显(决赛前十名的队伍全为摄像头队伍)。同比韩国的智能车大赛,我们的竞赛成绩已经超过了韩国。 (5)竞赛历史——第三届,赛区+总决赛 第三届智能车大赛在东北大学举行,有551支代表队伍参加了分区赛,104支队伍参加了总

第十届飞思卡尔参赛题目及相关要求

第十届全国大学生飞思卡尔杯智能汽车大赛校内选拔赛 参赛题目及相关要求 1、题目A低频功率放大器 设计并制作低频功率放大器。其原理示意图如下: 要求: 1)基本要求 在放大通道的正弦信号输入电压幅度为(5~700)mV pp,采用双电源供电,不大于±20V;等效负载电阻R L为8Ω下,放大器应满足: ①最大不失真输出功率P OR≥8W;(波形无明显失真) ②带宽BW≥(40~20000)Hz;(功放部分) ③在P OR下的效率≥50%; ④在前置放大级输入端交流短接到地时,R L=8Ω上的交流声V PP≤400mV。 ⑤具有音量调节功能。 (功放部分只能采用分立元件或运放,若采用专用集成功放将酌情扣分) 2)发挥部分 ①制作数字音量控制电路(可以使用专用音响音量控制集成电路,也可用通用数字电路及单片机控制电路实现),用两只轻触开关分别实现音量的加减,控制等级不小于8级。 ②制作两路音源选择电路,用一只轻触开关实现音源转换。 ③功能显示:音源选择显示,音量等级显示。 ④其它。 2、题目B电能收集充电器 设计并制作一个电能收集充电器,充电器及测试原理示意图如图1。该充电器的核心为直流电源变换器,它从一直流电源中吸收电能,以尽可能大的电流充入一个可充电池。直流电源的输出功率有限,其电动势Es在一定范围内缓慢变化,当Es为不同值时,直流电源变换器的电路结构,参数可以不同。监测和控制电路由直流电源变换器供电。由于Es的变化极慢,监测和控制电路应该采用间歇工作方式,以降低其能耗。可充电池的电动势Ec=3.6V,内阻Rc=0.1Ω。

图1 测试原理示意图 (E 和E c用稳压电源提供,R d用于防止电流倒灌) s 要求: 1)基本要求 ①在Rs=100Ω,Es=10V~20V时,充电电流Ic大于(Es-Ec)/(Rs+Rc)。 ②在Rs=100Ω时,能向电池充电的Es尽可能低。 ③Es从0逐渐升高时,能自动启动充电功能的Es尽可能低。 ④Es降低到不能向电池充电,最低至0时,尽量降低电池放电电流。 ⑤监测和控制电路工作间歇设定范围为 0.1 s~5s。 2)发挥部分 ①在Rs=1Ω,Es=1.2V~3.6V时,以尽可能大的电流向电池充电。 ②能向电池充电的Es尽可能低。当Es≥1.1V时,取Rs =1Ω; 当Es<1.1V时,取Rs =0.1Ω。 ③电池完全放电,Es从0逐渐升高时,能自动启动充电功能(充电输出端开路电压 >3.6V,短路电流>0)的Es尽可能低。当Es≥1.1V时,取Rs =1Ω;当Es< 1.1V时,取Rs=0.1Ω。 ④降低成本。 ⑤其他。 说明 1.测试最低可充电Es的方法:逐渐降低Es,直到充电电流Ic略大于0。当Es 高于3.6V时,Rs为100Ω;Es低于3.6V时,更换Rs为1Ω;Es降低到1.1V以下时,更换Rs为0.1Ω。然后继续降低Es,直到满足要求。 2.测试自动启动充电功能的方法:从0开始逐渐升高Es,Rs为0.1Ω;当Es 升高到高于1.1V时,更换Rs为1Ω。然后继续升高Es,直到满足要求。

飞思卡尔单片机LED控制例程详解

我的第一个LED程序 准备工作: 硬件:Freescale MC9S08JM60型单片机一块; 软件:集成开发环境codewarrior IDE; 开发板上有两个LED灯,如下图所示: 实验步骤: 1.首先,确保单片机集成开发环境及USBDM驱动正确安装。其中USBDM的安装步骤如下:?假设之前安装过单片机的集成开发环境6.3版本:CW_MCU_V6_3_SE; ?运行USBDM_4_7_0i_Win,这个程序会在c盘的程序文件夹下增加一个目录C:\Program Files\pgo\USBDM 4.7.0,在这个目录下: 1〉C:\ProgramFiles\pgo\USBDM 4.7.0\FlashImages\JMxx下的文件 USBDM_JMxxCLD_V4.sx是下载器的固件文件; 2〉C:\Program Files\pgo\USBDM 4.7.0\USBDM_Drivers\Drivers下有下载器的usb 驱动 所以在插入usb下载器,电脑提示发现新的usb硬件的时候,选择手动指定驱动 安装位置到以上目录即可。 ?运行USBDM_4_7_0i_Win之后,还会在目录: C:\Program Files\Freescale\CodeWarrior for Microcontrollers V6.3\prog\gdi 下增加一些文件,从修改时间上来看,增加了6个文件,这些文件是为了在codewarrior 集成开发环境下对usb下载器的调试、下载的支持。

2.新建一个工程,工程建立过程如下: ?运行单片机集成开发环境codewarrior IDE ?出现如下界面 ●Create New Project :创建一个新项目工程 ●Load Example Project :加载一个示例工程 ●Load Previous Project :加载以前创建过的工程 ●Run Getting started Tutorial:运行CodeWarrior软件帮助文档 ●Start Using CodeWarrior:立刻使用CodeWarrior ?点击Create New project按钮,以创建一个新的工程,出现选择CPU的界面 如下,请选择HCS08/HCS08JM Family/MC9S08JM60,在右边的Connection窗口

第三届全国大学生“飞思卡尔”杯智能汽车竞赛之技术报告

第三届全国大学生“飞思卡尔”杯 智能汽车竞赛 技术报告 学校:北京科技大学 队伍名称:北京科技大学CCD一队 参赛队员:张鹏 徐怡 任亚楠 带队教师:刘立 马飞

关于技术报告和研究论文使用授权的说明 本人完全了解第三届全国大学生“飞思卡尔”杯智能汽车竞赛关保留、使用技术报告和研究论文的规定,即:参赛作品著作权归参赛者本人,比赛组委会和飞思卡尔半导体公司可以在相关主页上收录并公开参赛作品的设计方案、技术报告以及参赛模型车的视频、图像资料,并将相关内容编纂收录在组委会出版论文集中。 参赛队员签名: 带队教师签名: 日期:

摘要 本智能车系统设计以MC9S12DG128微控制器为核心,通过一个CMOS摄像头检测模型车的运动位置和运动方向,使用比较器对图像进行二值化处理,用光电编码器检测模型车的速度并使用PID控制算法调节驱动电机的转速和舵机的方向,完成对模型车运动速度和运动方向的闭环控制。为了提高智能车的行驶速度和可靠性,对比了各种方案的优缺点,使用Labview仿真平台进行了大量底层和上层测试。实验结果表明,系统设计方案可行。 关键词:MC9S12DG128,CMOS摄像头,PID,无线通讯

ABSTRACT In this paper we will demonstrate a smart car system based on the micro-controller unit MC9S12DG128.The micro-controller use a CMOS image sensor to obtain lane image information, then adjusts the model car`s moving position and direction. An inferred sensor measure the car`s moving speed. We use PID control method to adjust, the rotate speed of driving electromotor and direction of steering electromotor.So,we complete the closed-loop control to the speed and direction. In order to increase the speed and the reliability of the car, the advantage and disadvantage of the different schemes are compared, and a great number of the bottom layer and the upper layer tests are carried on combined with the Labview simulation platform.The result of tests indicates that the design scheme of system is available. KEYWORDS: MC9S12DG128,CMOS image sensor,PID

飞思卡尔智能车竞赛新手入门建议

每年都会有很多新人怀着满腔热情来做智能车,但其中的很多人很快就被耗光了热情和耐心而放弃。很多新人都不知道如何入手,总有些有劲无处使的感觉,觉得自己什么都不会,却又不知道该干什么。新人中存在的主要问题我总结了以下几点: l缺乏自信,有畏难情绪 作为新人,一切都是新的。没有设计过电路,没有接触过单片机,几乎什么都不会。有些新人听了两次课,看了两篇技术报告,就发现无数不懂不会的东西,于是热情在消退,信心在减弱。这些都是放弃的前兆。殊不知,高手都是从新人过来的,没有谁天生什么都会做。一件事件,如果还没开始做,就自己否定自己,认为自己做不到,那么肯定是做不到的。 l习惯了被动接收知识,丧失了主动学习的能力。 现在的学生大多从小习惯了被灌输知识,只学老师教的,只学老师考的。殊不知一旦走向社会,将不再有老师来教,不再有应付不完的考试。做智能车和传统的教学不同,学生将从被动学习的地位转变为主动学习。就算有指导老师,有指导的学长,但也都处于被动地位,往往都不会主动来教。有的学生一开始就没有转变思想,还希望就像实验课一样,老师安排好步骤1,2,3……,然后自己按照老师安排好的步骤按部就班的完成。这样的学生,往往都丧失了提出问题和分析问题的能力,只是一个应付考试的机器。要知道,解决问题的第一步是提出问题,如果总等着别人来教,那么问题永远会挡在你面前。 l缺乏团队精神和合作意识 智能车比赛是以团队的形式参赛,只依靠个人能力单兵作战就能取得好成绩的是很少很少的。当今社会,任何人的成功都离不开身后的团队的支撑。智能车是一个很复杂的系统,电路、机械、传感器、单片机、底层驱动、控制算法……。如果所有的任务都是一个人去完成,固然锻炼了自己,但想做的很好却很不现实。很多新人,来到实验室,来到一个陌生的环境和团队,连向学长请教,和同学交流的勇气都没有,又如何融入团队呢。除了要主动融入团队,还要培养自己的团队意识。团队精神往往表现为一种责任感,如果团队遇到问题,每个人都只顾自己,出了错误,不想着解决问题,而是互相推诿埋怨。这样的团队,肯定是无法取得好成绩的。 l缺乏耐心和细心的精神 其实把一件事做好很简单,细心加上耐心。不细心就想不到,没有耐心,即使想到了也做不到。做事怕麻烦,将就,说白了就是惰性在作祟。明明可以把支架做的更轻更漂亮,明明可以把程序写的更简洁,明明可以把电路设计得更完善……。其实,每个人都有很大潜力,如果不逼自己一次,你永远不知道自己的潜力有多

飞思卡尔--智能车舵机讲解

飞思卡尔--智能车舵机讲解

2.2 舵机的安装 完成了玩具车的拆卸之后要做的第二步就是安装舵机,现在市场上卖的玩具车虽然也具有转向 功能,但是前轮的转向多是依靠直流电机来驱动,无论向哪个方向转都是一下打到底,无法控制转 过固定的角度,因此根据我们的设计需求,需要将原有的转向部分替换成现有的舵机,以实现固定 转角的转向。舵机的实物图如图 2.1所示。 需要说明的是由于小车系玩具车改装,在安装舵机是需要合理的利用小车的结构,将舵机安装 牢固,同时还需注意合理利用购买舵机是附赠的齿轮,从而将舵机固定在合适的位置。舵机的安装 方式有俯式、卧式多种,不同的安装方法力臂长短、响应速度都有所不同,这一点请自己根据实际 情况合理选择,图 2.2 为舵机的安装图。 5

图 2.1 舵机实物图图 2.2 舵机安装图 舵机安装过程中有一点需要尤其注意,由于舵机不是360°可转的,因此必须保证车轮左右转 的极限在舵机的转角范围之内。 舵机安装完毕之后就可以对小车的转角进行控制了,但是由于玩具车的车体设计往往限制了小 车的转角,因此可以对小车进行局部的“破坏”来增大前轮的转角,要知道在比赛中追求速度的同 时一个大的转角对小车的可控性会有一个很大的提升,如图2.3 所示,就是对增加小车转角的一个 改造,这是我在去年小车比赛中的用法。将阻碍前轮转角的一部分用烙铁直接烫掉。 但是这种做法也有风险,由于你的改造会破坏小车的整体 7

结构,有可能会对小车的硬件结构造 成破坏,因此如果你的小车在改造之后显得过于脆弱的话那你就要对你的小车采取些加固措施了。 3.4 舵机转向模块设计 舵机是小车转向的控制机构,具有体积小、力矩大、外部机械设计简单、稳定性高等特 点,无论是在硬件还是软件舵机设计是小车控制部分的重要组成部分,舵机的主要工作流程 为:控制信号→控制电路板→电机转动→齿轮组减速→舵盘转动→位置反馈电位计→控制电路板反馈。图 3.11 为舵机的实物图。 7

飞思卡尔第一张

3.1 实验一 I/O口输入输出实验 4.实验原理 如图3-1所示,将PTB6设置为输出端口后,若向PTB6写高电平时,LED灯不亮,若写低电平,则LED亮。PTA2设置为输入端口后,在按键SW未按下时,读PTA2始终为高电平,只有在按键SW按下时,读PTA2时才得到低电平。 图3-1 LED灯与按键控制电路原理图 5.实验内容 ⑴结合开发板电路图,用跳线夹连接对应LED引脚。即LED1、LED2分别与PTB6、PTB7相连接。将PTB 口定义为输出接口。对端口写0即可点亮LED灯。单步运行观察实验现象。 ⑵结合开发板电路图,用跳线夹再将开发板上的按键SW1、SW2连到PTA2。将PTA口定义为输入口,将PTB口定义为输出口。按下SW1时点亮LED1、LED2。按下SW2时熄灭LED1、LED2。 6.参考程序 ⑴直接点亮LED灯,其参考程序如下。 C语言程序: #include #include "derivative.h" /* 头文件 */ void main(void) { PTBDD=0xff; /*定义PTB口为输出口 */ PTBD=0xff; /*输出高电平,LED灯灭*/ PTBD=0x00; /*PTB口输出低电平,即PTB6、PTB7输出低电平 */

for(;;) { __RESET_WATCHDOG(); /* 清看门狗 */ } /* 死循环 */ } 汇编程序(加粗部分为所需添加的程序代码): ;******************************************************************* ;* This stationery serves as the framework for a user application. * ;* For a more comprehensive program that demonstrates the more * ;* advanced functionality of this processor, please see the * ;* demonstration applications, located in the examples * ;* subdirectory of the "Freescale CodeWarrior for HC08" program * ;* directory. * ;******************************************************************* ; Include derivative-specific definitions INCLUDE 'derivative.inc' ; ; export symbols ; XDEF _Startup ABSENTRY _Startup ; ; variable/data section ; ORG RAMStart ; Insert your data definition here ExampleVar: DS.B 1 ; ; code section ; ORG ROMStart _Startup: LDHX #RAMEnd+1 ; initialize the stack pointer TXS CLI ; enable interrupts mainLoop: ; Insert your code here MOV #$FF,PTBDD; 端口方向寄存器初始化为输出 MOV #$FF,PTBD; 输出高点平,LED灯灭 MOV #$00,PTBD; 输出低电平,LED灯亮 NOP

飞思卡尔 智能车舵机控制

智能车的制作中,看经验来说,舵机的控制是个关键.相比驱动电机的调速,舵机的控制对于智能车的整体速度来说要重要的多. PID算法是个经典的算法,一定要将舵机的PID调好,这样来说即使不进行驱动电机的调速(匀速),也能跑出一个很好的成绩. 机械方面: 从我们的测试上来看,舵机的力矩比较大,完全足以驱动前轮的转向.因此舵机的相应速度就成了关键.怎么增加舵机的响应速度呢?更改舵机的电路?不行,组委会不允许.一个非常有效的办法是更改舵机连接件的长度.我们来看看示意图: 从上图我们能看到,当舵机转动时,左右轮子就发生偏转.很明显,连接件长度增加,就会使舵机转动更小的转角而达到同样的效果.舵机的特点是转动一定的角度需要一定的时间.不如说(只是比喻,没有数据),舵机转动10度需要2ms,那么要使轮子转动同样的角度,增长连接件后就只需要转动5度,那么时间是1ms,就能反应更快了.据经验,这个舵机的连接件还有必要修改.大约增长0.5倍~2倍. 在今年中,有人使用了两个舵机分别控制两个轮子.想法很好.但今年不允许使用了.

接下来就是软件上面的问题了. 这里的软件问题不单单是软件上的问题,因为我们要牵涉到传感器的布局问题.其实,没有人说自己的传感器布局是最好的,但是肯定有最适合你的算法的.比如说,常规的传感器布局是如下图: 这里好像说到了传感器,我们只是略微的一提.上图只是个示意图,意思就是在中心的地方传感器比较的密集,在两边的地方传感器比较的稀疏.这样做是有好处的,大家看车辆在行驶到转弯处的情况: 相信看到这里,大家应该是一目了然了,在转弯的时候,车是偏离跑道的,所以两边比较稀疏还是比较科学的,关于这个,我们将在传感器中在仔细讨论。 在说到接下来的舵机的控制问题,方法比较的多,有人是根据传感器的状态,运用查表法差出舵机应该的转角,这个做法简单,而且具有较好的滤波"效果",能够将错误的传感器状态滤掉;还有人根据计算出来的传感器的中心点(比

飞思卡尔单片机寄存器及汇编指令详解

附录I:寄存器地址列表 直接页面寄存器总结

高页面寄存器总结

非易失寄存器总结 注:直接页面寄存器表地址的低字节用粗体显示,直接寻址对其访问时,仅写地址低字节即可。第2列中寄存器名用粗体显示以区别右边的位名。有0的单元格表示未用到的位总是读为0,有破折号的单元格表示未用或者保留,对其读不定。

附录II 指令接与寻址方式 HCS08指令集概括 运算符 () = 括号种表示寄存器或存储器位置的内容 ← = 用……加载(读: “得到”) & = 布尔与 | = 布尔或 ⊕= 布尔异或 ×= 乘 ÷ = 除 : = 串联 + = 加 - = 求反(二进制补码) CPU registers A =>累加器 CCR =>条件代码寄存器 H =>索引寄存器,高8位 X => 索引寄存器,低8位 PC =>程序计数器 PCH =>程序计数器,高8位 PCL =>程序计数器,低8位 SP =>堆栈指针 存储器和寻址 M =>一个存储区位置或者绝对值数据,视寻址模式而定 M:M + 0x0001 => 两个连续存储位置的16位值.高8位位于M的地址,低8位位于更高的连续地址. 条件代码寄存器(CCR)位 V => 二进制补码溢出指示,第7位 H => 半进位,第4位 I => 中断屏蔽,第 3位 N => 求反指示器, 第2位 Z => 置零指示器, 第1位 C => 进/借, 第0位 (进位第 7位 ) CCR工作性符号 – => 位不受影响 0 = > 位强制为0 1 = > 位强制为1

= >根据运算结果设置或清除位 U = > 运算后没有定义 机器编码符号 dd =>一个直接寻址0x0000–0x00FF的低8位(高字节假设为0x00) ee => 16位偏移量的高8位 ff => 16位偏移量的低8位 ii => 立即数的一个字节 jj => 16位立即数值的高位字节 kk => 16位立即数值的低位字节 hh => 16位扩展寻址的高位字节 ll => 16位扩展寻址的低位字节 rr => 相对偏移量 n —任何表达范围在0–7之间的一个有符号数的标号或表达式 opr8i —任何一个表达8位立即值的标号或表达式 opr16 —任何一个表达16位立即值的标号或表达式 opr8a —任何一个表达一个8位值的标号或表达式.指令对待这个8位值为直接页面64K 字节地址空间(0x00xx)中地址的低8位. opr16a —任何一个表达16位值的标号或表达式.指令对待这个值为直接页面64K字节地址空间. oprx8 —任何一个表达8位无符号值的标号或表达式,用于索引寻址. oprx16 —任何一个16位值的标号或表达式.因为HCS08有一个16位地址总线,这可以为一个有符号或者无符号值. rel —任何指引在当前指令目标代码最后一个字节之后–128 to +127个字节之内的标号或表达式.汇编器会计算包括当前指令目标代码在内的8位有符号偏移量. 寻址方式 隐含寻址(Inherent)如CLRA,只有操作码,无操作数,需要操作的数据一般为CPU寄存器,因此不需要再去找操作数了。(INH) 立即寻址 (Immediate)如LDA #$0A,“$”表示16进制,此时操作数位于FLASH空间,与程序一起存放。(IMM) 直接寻址 (Direct)如 LDA $88,只能访问$0000-$00FF的存储器空间,指令短速度快; (DIR) 扩展寻址 (Extended)如果操作数地址超出了$00FF,自动为扩展寻址;(EXT) 相对寻址(Relative)如BRA LOOP,指令中一般给出8位有符号数表示的偏移量。(REL) 变址寻址 (Indexed) 采用[H:X]或SP作为指针的间接寻址方式。( IX )( IX1 )( IX2 ) 变址寻址 (Indexed) 1〉无偏移量:CLR ,X 简写(IX) 2〉无偏移量,指令完成后指针加1(H:X = H:X + 0x0001) ,简写(IX+)只用于指令MOV和CBEQ指令中;

飞思卡尔智能车电机资料

3.1.6驱动电机介绍 驱动电机采用直流伺服电机,我们在此选用的是RS-380SH型号的伺服电机,这是因为直流伺服电机具有优良的速度控制性能,它输出较大的转矩,直接拖动负载运行,同时它又受控制信号的直接控制进行转速调节。在很多方面有优越性,具体来说,它具有以下优点: (1)具有较大的转矩,以克服传动装置的摩擦转矩和负载转矩。 (2)调速范围宽,高精度,机械特性及调节特性线性好,且运行速度平稳。 (3)具有快速响应能力,可以适应复杂的速度变化。 (4)电机的负载特性硬,有较大的过载能力,确保运行速度不受负载冲击的 影响。 (5)可以长时间地处于停转状态而不会烧毁电机,一般电机不能长时间运行于 停转状态,电机长时间停转时,稳定温升不超过允许值时输出的最大堵转转矩称为连续堵转转矩,相应的电枢电流为连续堵转电流。 图3.1为该伺服电机的结构图。图3.2是此伺服电机的性能曲线。 图3.1 伺服电机的结构图

图3.2 伺服电机的性能曲线 3.1.7 舵机介绍 舵机是一种位置伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。其工作原理是:控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。舵机的控制信号是PWM信号,利用占空比的变化改变舵机的位置。一般舵机的控制要求如图3.3所示。图3.4为舵机的控制线。

飞思卡尔S12系列寄存器和中断讲解

S12的输入/输入端口(I/O口) I/O端口功能 可设置为通用I/O口、驱动、内部上拉/下拉、中断输入等功能。 设置I/O口工作方式的寄存器有: DDR、IO、RDR、PE、IE和PS。 DDR:设定I/O口的数据方向。 IO :设定输出电平的高低。 RDR:选择I/O口的驱动能力。 PE:选择上拉/下拉。 IE:允许或禁止端口中断。 PS:1、中断允许位置位时,选择上升沿/下降沿触发中断;2、中断禁止时且PE有效时,用于选择上拉还是下拉。 I/O端口设置 1、A口、B口、E口寄存器 (1)数据方向寄存器DDRA、DDRB、DDRE DDRA、DDRB、DDRE均为8位寄存器,复位后其值均为0。 当DDRA=0、DDRB=0、DDRE=0 时A口、B口和E口均为输入口。 否则,A口、B口、E口为输出口。当DDRA、DDRB、DDRE的任何一 位置1时,则该位对应的引脚被设置为输出。 例如,将A口设置为输出口,则其C语言程序的语句为:DDRA=0xff;(2)A口、B口、E口上拉控制寄存器PUCR PUCR为8位寄存器,复位后的值为0。当PUPAE、PUPBE、PUPEE被设置为1时,A口、B口、E口具有内部上拉功能;为0时,上拉无效。当A口、B口、E口为地址/数据总线时,PUPAE和PUPBE无效。 (3)A口、B口、E口降功率驱动控制寄存器RDRIV RDRIV为8位寄存器,复位后的值为0,此时,A口、B口、E口驱动保持全功率;当RDPA、RDPB、RDPE为1时,A口、B口、E口输出引脚的驱动功率下降 (4)数据寄存器PORTA、PORTB、PORTE PORTA、PORTB、PORTE均为8位寄存器,复位后的值为0,端口引脚输出低电平;要使引脚输出高电平,相应端口对应位应该置1。 由于PE0是/XIRQ、PE1是IRQ,因此,PE0和PE1只能设置为输入。

第五届飞思卡尔智能车大赛华中科技大学电磁组技术报告

第五届飞思卡尔杯全国大学生 智能汽车竞赛 技 术 报 告 学校:华中科技大学 队伍名称:华中科技大学五队 参赛队员:方华启 张江汉 诸金良 带队教师:何顶新 罗惠

关于技术报告和研究论文使用授权的说明 本人完全了解第五届全国大学生“飞思卡尔”杯智能汽车竞赛关保留、使用技术报告和研究论文的规定,即:参赛作品著作权归参赛者本人,比赛组委会和飞思卡尔半导体公司可以在相关主页上收录并公开参赛作品的设计方案、技术报告以及参赛模型车的视频、图像资料,并将相关内容编纂收录在组委会出版论文集中。 参赛队员签名: 带队教师签名: 日期:

目录 第1章引言 (1) 1.1 概述 (1) 1.2 全文安排 (2) 第2章电路设计 (3) 2.1 电路系统框图 (3) 2.2 电源部分 (4) 2.3 电机驱动部分 (5) 2.4 电磁传感器 (6) 第3章机械设计 (8) 3.1 车体结构和主要参数及其调整 (8) 3.2 舵机的固定 (10) 3.3 传感器的固定 (11) 3.4 编码器的固定 (11) 第4章软件设计 (12) 4.1 程序整体框架 (12) 4.2 前台系统 (13) 4.3 后台系统 (13) 4.4 软件详细设计 (14) 第5章调试 (15) 第6章全文总结 (16) 6.1 智能车主要技术参数 (16) 6.2 不足与改进 (16) 6.3 致谢与总结 (17) I

参考文献 (18) 附录A 源代码 (18) II

第1章引言 第1章引言 教育部为了加强大学生实践、创新能力和团队精神的培养,在已举办全国大学生数学建模、电子设计、机械设计、结构设计等4大竞赛的基础上,委托教育部高等学校自动化专业教学指导分委员会主办每年一度的全国大学生智能汽车竞赛(教高司函[2005]201号文)[1]。 为响应教育部的号召,本校积极组队参加第五届“飞思卡尔”杯全国大学生智能汽车竞赛。从2009 年12 月开始着手进行准备,历时近8 个月,经过设计理念的不断进步,制作精度的不断提高,经历 2 代智能车硬件平台及相关算法的改进,最终设计出一套完整的智能车开发、调试平台。作为电磁组的华中科技大学五队采用轻质量机械设计、大前瞻传感器和连续化算法处理的基本技术路线,在前瞻距离、噪声抑制、驱动优化、整车布局等方面加强研究创新,在有限计算能力下获得了较高的赛道信息准确率。使智能车能够满足高速运行下的动力性和稳定性需求,获得了良好的综合性能和赛场表现。 本文将对智能车的总体设计和各部分的详细设计进行一一介绍。 1.1 概述 1.1.1 电路设计 飞思卡尔电磁组智能汽车硬件主要分为主控板,传感器板。本车在主控板上主要特色为电机使用H桥驱动,从性能和扩展性上优于集成驱动器方案。传感器板设计着重考虑提高传感器的前瞻量和信号的抗干扰能力。 1.1.2 机械设计 机械方面,主要是对舵机的安装进行了研究,加长了舵机的连杆,以增加反应速度。另外,主要研究车差速性能的研究以及传感器支架的固定。 1.1.3 控制程序设计 一方面使用免费的μCOS操作系统,这给智能车的整体调试提供了很多方便;另一方面,在大前瞻传感器的基础上设计出合理的舵机、电机控制算法,在满足稳定性要求的基础上提高速度。 1

飞思卡尔第十届成绩

第十届全国大学生“飞思卡尔”杯智能汽车竞赛 全国总决赛成绩公告 第十届全国大学生智能汽车竞赛全国总决赛于2015年8月26日至29日在山东大学举行。共有132所学校、224支队伍参加比赛。其中,摄像头组65支,光电组66支,电磁组65支,创意赛23支,表演队伍4支,特邀队伍1支。共计参赛同学758人,指导教师423人。 经过三天的现场环境适应、预赛和决赛,本届总决赛最终决出竞速赛一等奖和二等奖、创意赛一等奖和二等奖、技术方案赛一等奖等奖项。同时,竞赛组委会在闭幕式上颁发了竞赛组织贡献奖。 现将本届竞赛的各奖项和参赛队伍的成绩公告如下。 一、创意赛获奖名单 学校 队名 等级 1.北京科技大学 北京科技大学创意组 一等奖 2.东南大学 SEU 一等奖 3.江汉大学 智能单车 一等奖 4.西北工业大学 鱼鹰队 一等奖 5.安徽工业大学 凤凰 一等奖 6.哈尔滨工业大学 蓝鳍鲨 一等奖 7.同济大学 益驰队 二等奖 8.哈尔滨工程大学 冰城穿行者 二等奖 9.华中科技大学 华中科技大学创意队 二等奖 10.五邑大学 邑大五人组 二等奖 11.武汉科技大学 首安队 二等奖 12.北京邮电大学 螺旋桨 二等奖 13.上海应用技术学院 SIT ‐ 创意队 二等奖 14.广东技术师范学院 暴风陀螺 二等奖 15.湖北第二师范学院 灵狐老二 二等奖 16.太原理工大学 晋豹创意一队 二等奖 17.江苏大学 一江队 二等奖 二、技术方案赛一等奖(最佳技术方案奖)获奖名单: 1. 太原理工大学 晋豹一队 2. 哈尔滨工业大学 Eclipse 3. 哈尔滨工业大学 Binary Star 4. 山东大学 风火雷音

飞思卡尔智能车比赛电磁组路径检测设计方案

飞思卡尔智能车比赛电磁组路径检测设计方案电磁组竞赛车模 路径检测设计参考方案 (竞赛秘书处 2010-1,版本 1.0) 一、前言 第五届全国大学生智能汽车竞赛新增加了电磁组比赛。竞赛车模需要能够通 过自动识别赛道中心线位置处由通有 100mA 交变电流的导线所产生的电磁场进行路径检测。除此之外在赛道的起跑线处还有永磁铁标志起跑线的位置。具体要求请参阅《第五届智能汽车竞赛细则》技术文档。 本文给出了一种简便的交变磁场的检测方案,目的是使得部分初次参加比赛 的队伍能够尽快有一个设计方案,开始制作和调试自己的车模。本方案通过微型车模实际运行,证明了它的可行性。微型车模运行录像参见竞赛网站上视频文件。 二、设计原理 1、导线周围的电磁场 根据麦克斯韦电磁场理论,交变电流会在周围产生交变的电磁场。智能汽车 竞赛使用路径导航的交流电流频率为 20kHz,产生的电磁波属于甚低频(VLF) 电磁波。甚低频频率范围处于工频和低频电磁破中间,为 3kHz,30kHz,波长为 100km,10km。如下图所示: 图 1:电流周围的电磁场示意图

导线周围的电场和磁场,按照一定规律分布。通过检测相应的电磁场的强度 和方向可以反过来获得距离导线的空间位置,这正是我们进行电磁导航的目的。 由于赛道导航电线和小车尺寸 l 远远小于电磁波的波长,,电磁场辐射能量很小(如果天线的长度 l 远小于电磁波长,在施加交变电压后,电磁波辐射功率正比于天线长度的四次方),所以能够感应到电磁波的能量非常小。为此,我们将导线周围变化的磁场近似缓变的磁场,按照检测静态磁场的方法获取导线周围的磁场分布,从而进行位置检测。 由毕奥-萨伐尔定律知:通有稳恒电流 I 长度为 L 的直导线周围会产生磁场,距离导线距离为 r 处 P 点的磁感应强度为: 图 2 sin直线电流的磁场 , d, ,(0 , 4 10, 7 TmA 1 ) B , ,, cos,1 2 ,。 (1) ,1 4 r 由此得: B , cos, 4 r 4 r

第八届飞思卡尔比赛比赛细则

第八届全国大学生“飞思卡尔”杯智能汽车竞赛 竞速比赛规则与赛场纪律 参赛选手须使用竞赛秘书处统一指定的竞赛车模套件,采用飞思卡尔半导体公司的8位、16位、32位微控制器作为核心控制单元,自主构思控制方案进行系统设计,包括传感器信号采集处理、电机驱动、转向舵机控制以及控制算法软件开发等,完成智能车工程制作及调试,于指定日期与地点参加各分(省)赛区的场地比赛,在获得决赛资格后,参加全国决赛区的场地比赛。参赛队伍的名次(成绩)由赛车现场成功完成赛道比赛时间来决定,参加全国总决赛的队伍同时必须提交车模技术报告。大赛根据道路检测方案不同分为电磁、光电平衡与摄像头三个赛题组。使用四轮车模通过感应由赛道中心电线产生的交变磁场进行路经检测的属于电磁组;使用四轮车模通过采集赛道图像(一维、二维)或者连续扫描赛道反射点的方式进行进行路经检测的属于摄像头组;使用指定两轮车模保持车体直立行走的车模属于平衡组。 竞赛秘书处制定如下比赛规则适用于各分(省)赛区比赛以及全国总决赛,在实际可操作性基础上力求公正与公平。 一、器材限制规定 1.

电机RN-260 各赛题组车模运行规则: (a) 电磁组:四轮车模正常运行。 车模使用A型车模。车模运行方向为:转向轮在前,动力轮在后,如图1所示: 车模运行方向 动力轮 转向轮 图1电四轮车模运行模式 (b) 摄像头组:车模反方向运行。 车模使用B型车模。车模运行方向为:动力轮在前,转向轮在后,如图2所示:

动力轮转向轮车模运行方向 图 2摄车模运行模式 (3) 光电平衡组:车模直立行走。 使用D 型车模。车模运行时只允许动力轮着地,车模直立行走。车模运 行方向应按照图3所示: D 车模 动力轮 车模运行方向 注意:车模需要 按照图示的方向 运行。 图 3光平衡组车模运行模式 ● 细节及改动限制见附件一。 2. 须采用飞思卡尔半导体公司的8位、16位、32位处理器作为唯一的微控制器。 ● 有关细节及其它电子器件使用的限制见附件二; 3. 三个赛题组使用传感器限制: ● 参加电磁赛题组不允许使用光学传感器获得道路的光学信息,但是可以使用光电码盘测量车速; ● 参加光电平衡组的车模可以使用光电传感器、指定型号的线性CCD 传感器进行道路检测,禁止使用激光传感器。 光电平衡组若采用线性CCD ,需使用Texas Advanced Optoelectronic Solution 公司的TSL1401系列的线性CCD ,如下图所示:

飞思卡尔竞赛规则

第七届全国大学生“飞思卡尔”杯智能汽车竞赛 竞速比赛规则与赛场纪律 参赛选手须使用竞赛秘书处统一指定的竞赛车模套件,采用飞思卡尔半导体公司的8位、16位、32位微控制器作为核心控制单元,自主构思控制方案进行系统设计,包括传感器信号采集处理、电机驱动、转向舵机控制以及控制算法软件开发等,完成智能车工程制作及调试,于指定日期与地点参加各分(省)赛区的场地比赛,在获得决赛资格后,参加全国决赛区的场地比赛。参赛队伍的名次(成绩)由赛车现场成功完成赛道比赛时间来决定,参加全国总决赛的队伍同时必须提交车膜技术报告。大赛根据车模检测路径方案不同分为电磁、光电与摄像头三个赛题组。车模通过感应由赛道中心电线产生的交变磁场进行路经检测的属于电磁组;车模通过采集赛道图像(一维、二维)或者连续扫描赛道反射点的方式进行进行路经检测的属于摄像头组;车模通过采集赛道上少数孤立点反射亮度进行路经检测的属于光电组。 竞赛秘书处制定如下比赛规则适用于各分(省)赛区预赛以及全国总决赛,在实际可操作性基础上力求公正与公平。 一、器材限制规定 号 摄像头型 车 模 车模:G768 电机:RS380-ST/3545, 舵机:FUTABA3010

型车 模 车模型号 电机:540,伺服器:S-D6 光电组 型 车 模 车模型号:N286 电机:RN260-CN 38-18130 伺服器:FUTABA3010 电磁组 各赛题组车模运行规则: a)光电组,摄像头组:车模正常运行。 车模使用A型车模(摄像头组)、B型车模(光电组)。车模运行方向为, 转向轮在前,动力轮在后。如图1所示: 图1 光电组车模运行方向说 b)电磁组:车模直立行走。 使用C型车模。车模运行时只允许动力轮着地,车模直立行走。如图2 所示:

第七届飞思卡尔智能车国赛预赛排名

光电组预赛排名 序号学校名称队伍名称比赛成绩名次 1 北京科技大学北京科技大学光电一队13.011 1 2 北京工业大学G-Tank 13.156 2 3 山东大学光电一队13.271 3 4 中南大学比亚迪双鱼座2012 13.6 5 4 5 华南理工大学木棉一队13.712 5 6 国防科技大学光电铁军一师13.803 6 7 华中科技大学华中科技大学一队13.838 7 8 乐山师范学院乐师5队13.889 8 9 武汉大学有时想起14.692 9 10 华南农业大学珠江学院野狼战队14.805 10 11 湖北汽车工业学院光电二队14.883 11 12 东北大学秦皇岛分校东秦3队14.958 12 13 中国地质大学(武汉)地大御风队14.992 13 14 合肥工业大学工大光电二队14.993 14 15 成都学院成大二队15.015 15 16 南京师范大学ALPS 15.125 16 17 北京理工大学北京理工大学光电一队15.252 17 18 杭州电子科技大学杭电光电一队15.262 18 19 山东工商学院迅雷1队15.33 19 20 皖西学院电协飞车15.349 20 21 天津大学天津大学光电一队16.086 21 22 广州大学华软软件学院华软电子一队16.203 22 23 兰州交通大学CRH2 16.231 23 24 四川师范大学成都学院川成一队16.274 24 25 浙江大学浙江大学华硕二队16.313 25 26 安徽大学追风队16.351 26 27 哈尔滨工程大学极品飞车2号16.468 27 28 哈尔滨工业大学航天福道光电之星1队16.53 28 29 浙江工业大学之江学院T-Force 16.721 29 30 河北联合大学轻工学院光电1队16.821 30 31 成都信息工程学院极速闪电16.995 31 32 辽宁工业大学疾速飞鹰17.211 32 33 东华大学东华光电飞龙2 17.225 33 34 河南工业大学奋进队17.234 34 35 南昌航空大学零速队17.299 35 36 河北大学工商学院灵锐一队17.836 36 37 安徽工程大学光影蓝宙17.993 37 38 哈尔滨华德学院华德蹑影驭风队18.024 38 39 山东轻工业学院Atomhachiko 18.356 39

相关文档
最新文档