当前位置:文档之家› 矿大飞思卡尔实验指导书及程序

矿大飞思卡尔实验指导书及程序

矿大飞思卡尔实验指导书及程序
矿大飞思卡尔实验指导书及程序

中国矿业大学信电学院飞思卡尔实验指导书及实验程序

实验一(4学时)

一、实验题目

实验硬件与软件认识

二、实验目的与要求

1. 正确认识硬件系统

2. 掌握IAR软件的基本使用方法

三、主要实验内容

1. 硬件评估板认识与MCU的外观识别

a. 根据原理图找到不同器件与MCU相连接的管脚

b. 理解系统的基本稳压电路

2. IAR安装与基本使用

3. 评估板升级与例程下载

四、检验方式

1. 结合原理图找到不同器件和MCU的连接管脚

2. 成功下载例程,并能简单演示。即随着手势的变化,三色LED呈现不同状态。

实验二(4学时)

一、实验题目

LED发光与变色实验

二、实验目的与要求

1. 掌握I/O口的基本编程方法

2. 掌握基本工程构建方法

三、主要实验内容

1. 开关控制LED及其编程方法

a. 找到LED对应MCU的管脚

b. 编程控制三个不同颜色LED亮灭

2.程序修改与调试

四、检验方式

1. 控制单个LED闪烁,要求能编程控制闪烁频率

2. 控制三个LED交叉闪烁,要求能编程控制闪烁的顺序和频率

实验三(4学时)

一、实验题目

串行通信实验

二、实验目的与要求

1. 掌握MCU串行通信基本编程方法

2. 学会MCU与微机的串行通信编程

三、主要实验内容

1. 轮询方式串口通信

2. 中断方式串口通信

3. 程序修改与调试

四、验证方式

1. 连接上位机,从串口以不同波特率发送字符,并得到下位机的反馈

实验四(4学时)

一、实验题目

串口控制LED实验

二、实验目的与要求

1. 熟练应用三色LED控制

2. 熟练应用串口通信

三、主要实验内容

1. 利用串口控制LED显示赤橙黄绿青蓝紫七色

2. 程序修改与调试

四、验证方式

1. 演示,要求三色LED能从赤逐渐显示到紫

实验五(8学时)

一、实验题目

加速度传感器读取

二、实验目的与要求

1. 认识I2C通信协议

2. 利用I2C协议与传感器进行通信

3. 熟练应用三色LED控制

三、主要实验内容

1. 读取加速度传感器三轴加速度和根据不同加速度改变LED颜色

2. 程序修改与调试

四、验证方式

1. 从加速度传感器读取数据,并在串口打印输出

2. 根据加速度传感器不同状态改变三色LED的颜色

实验六(4学时)

一、实验题目

打飞机小游戏设计

二、实验目的与要求

1. 加速度传感器熟练应用

2. 熟练运用串口

三、主要实验内容

1. 综合利用多个构件读取加速度传感器数据控制游戏中的飞机运动

2. 程序修改与调试

四、验证方式

完成游戏获得5000分

实验七(4学时)

一、实验题目

简单计步器

二、实验目的与要求

1. 加速度传感器熟练应用

2. 计步算法理解

三、主要实验内容

1. 综合利用多个构件读取加速度传感器数据完成简单人体计数

2. 程序修改与调试

四、验证方式

1. 走10步、20步、30步,LED成不同颜色

实验程序

实验一实验硬件与软件认识int main (void)

{

#ifdef CMSIS // If we are conforming to CMSIS, we need to call start here start();

#endif

printf("\n\rRunning the GGGGGG project.\n\r");

SIM_SCGC5 |= SIM_SCGC5_PORTB_MASK;

SIM_SCGC5 |= SIM_SCGC5_PORTD_MASK;

PORTB_PCR19=PORT_PCR_MUX(1);

PORTB_PCR18=PORT_PCR_MUX(1);

PORTD_PCR1=PORT_PCR_MUX(1);

GPIOB_PDDR|=1<<19;

GPIOB_PDDR|=1<<18;

GPIOD_PDDR|=1<<1;

GPIOB_PDOR|=(1<<19);

GPIOD_PDOR|=(1<<1);

while(1)

{

GPIOB_PDOR&=~(1<<18);

for(uint32 i=0;i<0x4fffff;i++);

GPIOB_PDOR|=(1<<18);

for(uint32 i=0;i<0x4fffff;i++);

}

}

int main (void)

{

#ifdef CMSIS // If we are conforming to CMSIS, we need to call start here start();

#endif

printf("\n\rRunning the 2222222 project.\n\r");

SIM_SCGC5 |= SIM_SCGC5_PORTB_MASK;

SIM_SCGC5 |= SIM_SCGC5_PORTD_MASK;

PORTB_PCR19=PORT_PCR_MUX(1);

PORTB_PCR18=PORT_PCR_MUX(1);

PORTD_PCR1=PORT_PCR_MUX(1);

GPIOB_PDDR|=1<<19;

GPIOB_PDDR|=1<<18;

GPIOD_PDDR|=1<<1;

while(1)

{

GPIOB_PDOR&=~(1<<18);

GPIOB_PDOR|=(1<<19);

GPIOD_PDOR|=(1<<1);

for(uint32 i=0;i<0x4fffff;i++);

GPIOB_PDOR|=(1<<18);

GPIOB_PDOR&=~(1<<19);

GPIOD_PDOR|=(1<<1);

for(uint32 i=0;i<0x4fffff;i++);

GPIOB_PDOR|=(1<<18);

GPIOB_PDOR|=(1<<19);

GPIOD_PDOR&=~(1<<1);

for(uint32 i=0;i<0x4fffff;i++);

}

实验二 LED发光与变色实验void UART_Init(uint16 baud_rate)

{

uint16 uart0_clk_khz=24000;

uint16 sbr;

PORTA_PCR1=PORT_PCR_MUX(0x02);

PORTA_PCR2=PORT_PCR_MUX(0x02);

SIM_SCGC4 |=SIM_SCGC4_UART0_MASK;

SIM_BASE_PTR->SOPT2 |=SIM_SOPT2_UART0SRC(1);

UART0_C2 &=~(UART0_C2_TE_MASK | UART0_C2_RE_MASK);

sbr = (uint16)((uart0_clk_khz*1000)/(baud_rate * 16));

UART0_BDH=UART0_BDH &(~UART0_BDH_SBR_MASK);

UART0_BDL=(uint8)(sbr & UART0_BDL_SBR_MASK);

UART0_C4= UART0_C4_OSR(15);

UART0_C1=0x00;

UART0_S1 |=0x1F;

UART0_S2 |=(UART0_S2_LBKDE_MASK|UART0_S2_RXEDGIF_MASK);

UART0_C2 |=(UART_C2_TE_MASK|UART_C2_RE_MASK);

}

int main (void)

{

char ch;

#ifdef CMSIS // If we are conforming to CMSIS, we need to call start here start();

#endif

UART_Init(9600);

printf("\n\rRunning the sixianghuibao project.\n\r");

while(1)

{

while (!(UART0_S1&UART0_S1_RDRF_MASK));

ch=UART0_D;

while (!(UART0_S1&UART0_S1_TDRE_MASK));

UART0_D=ch;

}

}

void UART_Init(uint32 baud_rate)

{

uint16 uart0_clk_khz=24000;

uint16 sbr;

PORTA_PCR1=PORT_PCR_MUX(0x02);

PORTA_PCR2=PORT_PCR_MUX(0x02);

SIM_SCGC4|=SIM_SCGC4_UART0_MASK;

SIM_SOPT2|=SIM_SOPT2_UART0SRC(1);

UART0_C2 &=~(UART0_C2_TE_MASK | UART0_C2_RE_MASK);

sbr=(uint16)((uart0_clk_khz*1000)/(baud_rate*16));

UART0_BDH=0x00;

UART0_BDL=0x0D;

UART0_C4=UART0_C4_OSR(15);

UART0_C1=0x00;

UART0_S1 |=0x1f;

UART0_C2 |=(UART_C2_TE_MASK | UART_C2_RE_MASK);

}

void UART_irq_enable()

{

UART0_C2|= UART0_C2_RIE_MASK;

enable_irq(12);

}

void uart0_isr()

{

char ch;

ch=UART0_D;

while (!(UART0_S1 & UART0_S1_TDRE_MASK));

UART0_D=ch;

}

int main(void)

char ch;

#ifdef CMSIS

start();

#endif

UART_Init (115200);

UART_irq_enable();

printf("\n\rhollomoto\n\r");

while(1)

{

}

}

/********************************************************************/ Isr.h

#ifndef __ISR_H

#define __ISR_H 1

/* Example */

/*

#undef VECTOR_101

#define VECTOR_101 lpt_isr

// ISR(s) are defined in your project directory.

extern void lpt_isr(void);

*/

#undef VECTOR_028

#define VECTOR_028 uart0_isr

extern void uart0_isr(void);

#endif //__ISR_H

实验三串行通信实验/*

* File: i2c_accel.c

* Purpose: Main process

*

*/

#include "common.h"

#ifdef CMSIS

#include "start.h"

#endif

#define SENSOR_I2C_ADDRESS 0x1D

#define IICWRITE(iicaddress) ((iicaddress<<1) & 0xFE)

#define IICREAD(iicaddress) ((iicaddress<<1) | 0x01)

#define SENSOR_I2C_ADDRESS_W IICWRITE(SENSOR_I2C_ADDRESS)

#define SENSOR_I2C_ADDRESS_R IICREAD(SENSOR_I2C_ADDRESS)

void i2c_Init()

{

SIM_SCGC4 |= SIM_SCGC4_I2C0_MASK;

SIM_SCGC5 |= SIM_SCGC5_PORTC_MASK;

PORTE_PCR24 = PORT_PCR_MUX(5)| PORT_PCR_PE_MASK | PORT_PCR_PS_MASK; PORTE_PCR25 = PORT_PCR_MUX(5)| PORT_PCR_PE_MASK | PORT_PCR_PS_MASK; I2C0_F = 0x00;

I2C0_C1 = I2C_C1_IICEN_MASK;

I2C0_FLT |= I2C_FLT_FLT(16);

}

uint8 i2c_read_byte(uint8 reg)

{

uint16 ch;

uint8 c;

I2C0_C1 |= I2C_C1_TX_MASK;

I2C0_C1 &= ~I2C_C1_TXAK_MASK;

I2C0_S |= I2C_S_IICIF_MASK;

I2C0_C1 |= I2C_C1_MST_MASK;

I2C0_D = SENSOR_I2C_ADDRESS_W;

while((I2C0_S & I2C_S_IICIF_MASK) == 0);

I2C0_S |= I2C_S_IICIF_MASK;

while((I2C0_S & I2C_S_RXAK_MASK) == 1);

I2C0_D = reg;

while((I2C0_S & I2C_S_IICIF_MASK) == 0);

I2C0_S|=I2C_S_IICIF_MASK;

while((I2C0_S & I2C_S_RXAK_MASK) == 1);

I2C0_C1 |= I2C_C1_RSTA_MASK;

for(ch = 0; ch < 100; ch++)

{

asm("nop");

}

I2C0_D = SENSOR_I2C_ADDRESS_R;

while((I2C0_S & I2C_S_IICIF_MASK) == 0);

I2C0_S|=I2C_S_IICIF_MASK;

I2C0_C1 &= ~I2C_C1_TX_MASK;

I2C0_C1 |= I2C_C1_TXAK_MASK;

c = I2C0_D;

while((I2C0_S & I2C_S_IICIF_MASK) == 0);

I2C0_S|=I2C_S_IICIF_MASK;

I2C0_C1 &= ~I2C_C1_MST_MASK;

c = I2C0_D;

for(ch = 0; ch < 500; ch++)

{

asm("nop");

}

return c;

}

void i2c_write_byte(uint8 reg, uint8 m)

{

uint16 ch;

I2C0_C1 |= I2C_C1_TX_MASK;

I2C0_C1 &= ~I2C_C1_TXAK_MASK;

I2C0_S |= I2C_S_IICIF_MASK;

I2C0_C1 |= I2C_C1_MST_MASK;

I2C0_D = SENSOR_I2C_ADDRESS_W;

I2C0_S |= I2C_S_IICIF_MASK;

while((I2C0_S & I2C_S_RXAK_MASK) == 1); I2C0_D = reg;

while((I2C0_S & I2C_S_IICIF_MASK) == 0);

I2C0_S|=I2C_S_IICIF_MASK;

while((I2C0_S & I2C_S_RXAK_MASK) == 1);

I2C0_D = m;

while((I2C0_S & I2C_S_IICIF_MASK) == 0);

I2C0_S|=I2C_S_IICIF_MASK;

while((I2C0_S & I2C_S_RXAK_MASK) == 1);

I2C0_C1 &= ~I2C_C1_MST_MASK;

for(ch = 0; ch < 500; ch++)

{

asm("nop");

}

}

void UART_Init(uint32 baud_rate)

{

uint16 uart0_clk_khz = 24000;

uint16 sbr;

PORTA_PCR1 = PORT_PCR_MUX(0x02);

PORTA_PCR2 = PORT_PCR_MUX(0x02);

SIM_SCGC4 |= SIM_SCGC4_UART0_MASK;

SIM_SOPT2 |= SIM_SOPT2_UART0SRC(1);

UART0_C2 &= ~(UART0_C2_TE_MASK | UART0_C2_RE_MASK);

sbr = (uint16)((uart0_clk_khz*1000)/(baud_rate * 16));

UART0_BDH = UART0_BDH & (~UART0_BDH_SBR_MASK);

UART0_BDL = (uint8)(sbr & UART0_BDL_SBR_MASK);

UART0_C4 = UART0_C4_OSR(15);

UART0_C1 = 0x00;

UART0_S1 |= 0x1F;

UART0_C2 |= (UART_C2_TE_MASK | UART_C2_RE_MASK);

}

void pwm_Init(uint16 period, uint16 duty)

{

//SIM_SOPT2 = SIM_SOPT2_PLLFLLSEL_MASK;

SIM_SOPT2 |= SIM_SOPT2_TPMSRC(1);

SIM_SCGC6 |= SIM_SCGC6_TPM0_MASK

|SIM_SCGC6_TPM2_MASK;

PORTD_PCR1 |= PORT_PCR_MUX(4);

TPM0_BASE_PTR->SC = 0 | TPM_SC_CMOD(0);

TPM0_BASE_PTR->CNT = 0;

TPM0_BASE_PTR->MOD = period;

TPM0_C1SC = 0 | TPM_CnSC_MSB_MASK

| TPM_CnSC_ELSB_MASK;

TPM0_C1V = duty;

TPM0_BASE_PTR->SC = 0 | TPM_SC_CMOD(1)

|TPM_SC_PS(4) ;

PORTB_PCR18 |= PORT_PCR_MUX(3);

PORTB_PCR19 |= PORT_PCR_MUX(3);

TPM2_BASE_PTR->SC = 0 | TPM_SC_CMOD(0);

TPM2_BASE_PTR->CNT = 0;

TPM2_BASE_PTR->MOD = period;

TPM2_C0SC = 0 | TPM_CnSC_MSB_MASK

| TPM_CnSC_ELSB_MASK;

TPM2_C0V = duty;

TPM2_C1SC = 0 | TPM_CnSC_MSB_MASK

| TPM_CnSC_ELSB_MASK;

TPM2_C1V = duty;

TPM2_BASE_PTR->SC = 0 | TPM_SC_CMOD(1)

|TPM_SC_PS(4) ;

}

void pwm_Set(uint8 ch, uint16 duty)

{

switch (ch)

{

case 1 : TPM0_C1V = duty;

break;

case 2 : TPM2_C0V = duty;

break;

case 3 : TPM2_C1V = duty;

break;

}

}

/********************************************************************/

uint8 x;

uint8 XH, XL, YH, YL, ZH, ZL;

int8 xh, yh, zh;

uint8 temp;

/********************************************************************/

int main (void)

{

#ifdef CMSIS // If we are conforming to CMSIS, we need to call start here start();

#endif

printf("\n\rRunning the experiment_5 project.\n\r");

UART_Init(9600);

i2c_Init();

pwm_Init(100, 50);

x = i2c_read_byte(0x0D);

if (x == 0x1A)

{

i2c_write_byte(0x2A, 0x19);

i2c_write_byte(0x0E, 0x01);

}

else

{

printf("\n\rPlease check out your MMA81451!\n\r");

}

while(1)

{

x = i2c_read_byte(0x00);

if (x & 0x08 == 0x08)

{

XH = i2c_read_byte(0x01);

XL = i2c_read_byte(0x02);

YH = i2c_read_byte(0x03);

YL = i2c_read_byte(0x04);

ZH = i2c_read_byte(0x05);

ZL = i2c_read_byte(0x06);

uart0_putchar (UART0_BASE_PTR, 0xFF);

uart0_putchar (UART0_BASE_PTR, XH - 1);

uart0_putchar (UART0_BASE_PTR, XL);

uart0_putchar (UART0_BASE_PTR, YH - 1);

uart0_putchar (UART0_BASE_PTR, YL);

uart0_putchar (UART0_BASE_PTR, ZH - 1);

uart0_putchar (UART0_BASE_PTR, ZL);

xh = i2c_read_byte(0x01);

yh = i2c_read_byte(0x03);

zh = i2c_read_byte(0x05);

temp = (uint8)((128 + xh) / 256.0 * 100.0);

pwm_Set(1,temp);

temp = (uint8)((128 + yh) / 256.0 * 100.0);

pwm_Set(2,temp);

temp = (uint8)((128 + zh) / 256.0 * 100.0);

pwm_Set(3,temp);

}

else

{

continue;

}

}

}

/********************************************************************/

实验四串口控制LED实验 .C #include "common.h"

#ifdef CMSIS

#include "start.h"

#endif

#define SENSOR_I2C_ADDRESS 0x1D

#define IICWRITE(iicaddress) ((iicaddress<<1) & 0xFE)

#define IICREAD(iicaddress) ((iicaddress<<1) | 0x01)

#define SENSOR_I2C_ADDRESS_W IICWRITE(SENSOR_I2C_ADDRESS)

#define SENSOR_I2C_ADDRESS_R IICREAD(SENSOR_I2C_ADDRESS)

void UART_Init(uint32 baud_rate)

{uint16 uart0_clk_khz=24000;

uint16 sbr;

PORTA_PCR1=PORT_PCR_MUX(0x02);

PORTA_PCR2=PORT_PCR_MUX(0x02);

SIM_SCGC4|=SIM_SCGC4_UART0_MASK;

SIM_SOPT2|=SIM_SOPT2_UART0SRC(1);

UART0_C2&=~(UART0_C2_TE_MASK|UART0_C2_RE_MASK);

sbr=(uint16)((uart0_clk_khz*1000)/(baud_rate*16));

UART0_BDH=UART0_BDH & (~UART0_BDH_SBR_MASK);

UART0_BDL=(uint8)(sbr & UART0_BDL_SBR_MASK);

UART0_C4=UART0_C4_OSR(15);

UART0_C1=0x00;

UART0_S1|=0x1F;

UART0_C2|=(UART_C2_TE_MASK|UART_C2_RE_MASK);

}

void UART_irq_enable()

{

UART0_C2|=UART0_C2_RIE_MASK;

enable_irq(12);

}

void pwm_Init(uint16 period,uint16 duty)

{SIM_SOPT2|=SIM_SOPT2_TPMSRC(1);

SIM_SCGC6|=SIM_SCGC6_TPM0_MASK

|SIM_SCGC6_TPM2_MASK;

PORTD_PCR1|=PORT_PCR_MUX(4);

TPM0_BASE_PTR->SC=0|TPM_SC_CMOD(0);

TPM0_BASE_PTR->CNT=0;

TPM0_BASE_PTR->MOD=period;

TPM0_C1SC=0|TPM_CnSC_MSB_MASK

|TPM_CnSC_ELSB_MASK;

TPM0_C1V=duty;

TPM0_BASE_PTR->SC=0|TPM_SC_CMOD(1)

|TPM_SC_PS(4);

PORTB_PCR18|=PORT_PCR_MUX(3);

PORTB_PCR19|=PORT_PCR_MUX(3);

TPM2_BASE_PTR->SC=0|TPM_SC_CMOD(0);

TPM2_BASE_PTR->CNT=0;

TPM2_BASE_PTR->MOD=period;

TPM2_C0SC=0|TPM_CnSC_MSB_MASK

|TPM_CnSC_ELSB_MASK;

TPM2_C0V=duty;

TPM2_C1SC=0|TPM_CnSC_MSB_MASK

|TPM_CnSC_ELSB_MASK;

TPM2_C1V=duty;

TPM2_BASE_PTR->SC=0|TPM_SC_CMOD(1)

|TPM_SC_PS(4);

}

void pwm_Set(uint8 ch,uint16 duty)

{

switch(ch)

{case 1:TPM0_C1V=duty;

break;

case 2:TPM2_C0V=duty;

break;

case 3:TPM2_C1V=duty;

break;

}

}

void uart0_isr()

char ch;

ch=UART0_D;

switch(ch)

{case 1:

pwm_Set(2,0);

pwm_Set(1,100);

pwm_Set(3,100);

break;

case 2:

pwm_Set(2,0);

pwm_Set(3,50);

pwm_Set(1,100);

break;

case 3:

pwm_Set(2,0);

pwm_Set(3,0);

pwm_Set(1,100);

break;

case 4:

pwm_Set(2,100);

pwm_Set(1,100);

pwm_Set(3,0);

break;

case 5:

pwm_Set(2,100);

pwm_Set(3,0);

pwm_Set(1,0);

break;

case 6:

pwm_Set(2,100);

pwm_Set(3,100);

pwm_Set(1,0);

break;

case 7:

pwm_Set(2,50);

pwm_Set(3,100);

pwm_Set(1,0);

break;

default:

pwm_Set(2,100);

pwm_Set(3,100);

pwm_Set(1,100);

break;

}

while(!(UART0_S1 & UART0_S1_TDRE_MASK));

UART0_D=ch;

}

/********************************************************************/

int main(void)

{

#ifdef CMSIS

start();

#endif

UART_Init(9600);

UART_irq_enable();

pwm_Init(100,100);

while(1);

/* while(1)

{

pwm_Set(2,0);

pwm_Set(1,100);

pwm_Set(3,100);

}

*/

}

实验四串口控制LED实验.h #ifndef __ISR_H

#define __ISR_H 1

/* Example */

/*

#define VECTOR_101 lpt_isr

// ISR(s) are defined in your project directory. extern void lpt_isr(void);

*/

#undef VECTOR_028

#define VECTOR_028 uart0_isr

extern void uart0_isr(void);

#endif //__ISR_H

/* End of "isr.h" */

实验五加速度传感器读取/*

* File: i2c_accel.c

* Purpose: Main process

*

*/

#include "common.h"

#ifdef CMSIS

#include "start.h"

#endif

#define SENSOR_I2C_ADDRESS 0x1D

#define IICWRITE(iicaddress) ((iicaddress<<1) & 0xFE)

#define IICREAD(iicaddress) ((iicaddress<<1) | 0x01)

#define SENSOR_I2C_ADDRESS_W IICWRITE(SENSOR_I2C_ADDRESS)

#define SENSOR_I2C_ADDRESS_R IICREAD(SENSOR_I2C_ADDRESS)

void i2c_Init()

{

SIM_SCGC4 |= SIM_SCGC4_I2C0_MASK;

SIM_SCGC5 |= SIM_SCGC5_PORTC_MASK;

PORTE_PCR24 = PORT_PCR_MUX(5)| PORT_PCR_PE_MASK | PORT_PCR_PS_MASK;

PORTE_PCR25 = PORT_PCR_MUX(5)| PORT_PCR_PE_MASK | PORT_PCR_PS_MASK;

I2C0_F = 0x00;

I2C0_C1 = I2C_C1_IICEN_MASK;

I2C0_FLT |= I2C_FLT_FLT(16);

}

uint8 i2c_read_byte(uint8 reg)

{

uint16 ch;

uint8 c;

I2C0_C1 |= I2C_C1_TX_MASK;

I2C0_C1 &= ~I2C_C1_TXAK_MASK;

I2C0_S |= I2C_S_IICIF_MASK;

I2C0_C1 |= I2C_C1_MST_MASK;

I2C0_D = SENSOR_I2C_ADDRESS_W;

while((I2C0_S & I2C_S_IICIF_MASK) == 0);

I2C0_S |= I2C_S_IICIF_MASK;

while((I2C0_S & I2C_S_RXAK_MASK) == 1);

I2C0_D = reg;

while((I2C0_S & I2C_S_IICIF_MASK) == 0);

I2C0_S|=I2C_S_IICIF_MASK;

while((I2C0_S & I2C_S_RXAK_MASK) == 1);

I2C0_C1 |= I2C_C1_RSTA_MASK;

for(ch = 0; ch < 100; ch++)

{

asm("nop");

}

I2C0_D = SENSOR_I2C_ADDRESS_R;

while((I2C0_S & I2C_S_IICIF_MASK) == 0);

I2C0_S|=I2C_S_IICIF_MASK;

I2C0_C1 &= ~I2C_C1_TX_MASK;

I2C0_C1 |= I2C_C1_TXAK_MASK;

c = I2C0_D;

while((I2C0_S & I2C_S_IICIF_MASK) == 0);

I2C0_S|=I2C_S_IICIF_MASK;

I2C0_C1 &= ~I2C_C1_MST_MASK;

c = I2C0_D;

for(ch = 0; ch < 500; ch++)

{

asm("nop");

}

return c;

}

void i2c_write_byte(uint8 reg, uint8 m)

{

uint16 ch;

I2C0_C1 |= I2C_C1_TX_MASK;

I2C0_C1 &= ~I2C_C1_TXAK_MASK;

I2C0_S |= I2C_S_IICIF_MASK;

I2C0_D = SENSOR_I2C_ADDRESS_W;

while((I2C0_S & I2C_S_IICIF_MASK) == 0);

I2C0_S |= I2C_S_IICIF_MASK;

while((I2C0_S & I2C_S_RXAK_MASK) == 1); I2C0_D = reg;

while((I2C0_S & I2C_S_IICIF_MASK) == 0);

I2C0_S|=I2C_S_IICIF_MASK;

while((I2C0_S & I2C_S_RXAK_MASK) == 1);

I2C0_D = m;

while((I2C0_S & I2C_S_IICIF_MASK) == 0);

I2C0_S|=I2C_S_IICIF_MASK;

while((I2C0_S & I2C_S_RXAK_MASK) == 1);

I2C0_C1 &= ~I2C_C1_MST_MASK;

for(ch = 0; ch < 500; ch++)

{

asm("nop");

}

}

void UART_Init(uint32 baud_rate)

{

uint16 uart0_clk_khz = 24000;

uint16 sbr;

PORTA_PCR1 = PORT_PCR_MUX(0x02);

PORTA_PCR2 = PORT_PCR_MUX(0x02);

SIM_SCGC4 |= SIM_SCGC4_UART0_MASK;

SIM_SOPT2 |= SIM_SOPT2_UART0SRC(1);

UART0_C2 &= ~(UART0_C2_TE_MASK | UART0_C2_RE_MASK);

sbr = (uint16)((uart0_clk_khz*1000)/(baud_rate * 16));

UART0_BDH = UART0_BDH & (~UART0_BDH_SBR_MASK);

UART0_BDL = (uint8)(sbr & UART0_BDL_SBR_MASK);

UART0_C4 = UART0_C4_OSR(15);

UART0_C1 = 0x00;

UART0_S1 |= 0x1F;

UART0_C2 |= (UART_C2_TE_MASK | UART_C2_RE_MASK);

}

void pwm_Init(uint16 period, uint16 duty)

{

SIM_SOPT2 |= SIM_SOPT2_TPMSRC(1);

SIM_SCGC6 |= SIM_SCGC6_TPM0_MASK

|SIM_SCGC6_TPM2_MASK;

PORTD_PCR1 |= PORT_PCR_MUX(4);

TPM0_BASE_PTR->SC = 0 | TPM_SC_CMOD(0);

TPM0_BASE_PTR->CNT = 0;

TPM0_BASE_PTR->MOD = period;

TPM0_C1SC = 0 | TPM_CnSC_MSB_MASK

| TPM_CnSC_ELSB_MASK;

TPM0_C1V = duty;

TPM0_BASE_PTR->SC = 0 | TPM_SC_CMOD(1)

|TPM_SC_PS(4) ;

PORTB_PCR18 |= PORT_PCR_MUX(3);

PORTB_PCR19 |= PORT_PCR_MUX(3);

TPM2_BASE_PTR->SC = 0 | TPM_SC_CMOD(0);

TPM2_BASE_PTR->CNT = 0;

TPM2_BASE_PTR->MOD = period;

TPM2_C0SC = 0 | TPM_CnSC_MSB_MASK

| TPM_CnSC_ELSB_MASK;

TPM2_C0V = duty;

TPM2_C1SC = 0 | TPM_CnSC_MSB_MASK

| TPM_CnSC_ELSB_MASK;

TPM2_C1V = duty;

TPM2_BASE_PTR->SC = 0 | TPM_SC_CMOD(1)

|TPM_SC_PS(4) ;

}

void pwm_Set(uint8 ch, uint16 duty)

{

switch (ch)

{

case 1 : TPM0_C1V = duty;

break;

case 2 : TPM2_C0V = duty;

break;

case 3 : TPM2_C1V = duty;

break;

}

}

uint8 x;

uint8 XH, XL, YH, YL, ZH, ZL;

int8 xh, yh, zh;

uint8 temp;

int main (void)

{

#ifdef CMSIS // If we are conforming to CMSIS, we need to call start here start();

#endif

UART_Init(9600);

i2c_Init();

pwm_Init(100, 50);

x = i2c_read_byte(0x0D);

if (x == 0x1A)

{

i2c_write_byte(0x2A, 0x19);

i2c_write_byte(0x0E, 0x01);

}

else

{

printf("\n\rPlease check out your MMA81451!\n\r");

}

while(1)

{

x = i2c_read_byte(0x00);

if (x & 0x08 == 0x08)

{

XH = i2c_read_byte(0x01);

XL = i2c_read_byte(0x02);

YH = i2c_read_byte(0x03);

YL = i2c_read_byte(0x04);

ZH = i2c_read_byte(0x05);

ZL = i2c_read_byte(0x06);

xh = i2c_read_byte(0x01);

yh = i2c_read_byte(0x03);

zh = i2c_read_byte(0x05);

temp = (uint8)((128 + xh) / 256.0 * 100.0);

pwm_Set(1,temp);

temp = (uint8)((128 + yh) / 256.0 * 100.0);

pwm_Set(2,temp);

temp = (uint8)((128 + zh) / 256.0 * 100.0);

pwm_Set(3,temp);

}

else

{

continue;

}

}

}

实验六简单计步器

/*

* File: i2c_accel.c

* Purpose: Main process

*

*/

#include "common.h"

#include "math.h"

//#include "stdlib.h"

#ifdef CMSIS

#include "start.h"

#endif

#define SENSOR_I2C_ADDRESS 0x1D

#define IICWRITE(iicaddress) ((iicaddress<<1) & 0xFE)

#define IICREAD(iicaddress) ((iicaddress<<1) | 0x01)

#define SENSOR_I2C_ADDRESS_W IICWRITE(SENSOR_I2C_ADDRESS)

#define SENSOR_I2C_ADDRESS_R IICREAD(SENSOR_I2C_ADDRESS)

uint8 th1=10,th2=10;

int cnt;

void i2c_Init()

{

SIM_SCGC4 |= SIM_SCGC4_I2C0_MASK;

SIM_SCGC5 |= SIM_SCGC5_PORTC_MASK;

PORTE_PCR24 = PORT_PCR_MUX(5)| PORT_PCR_PE_MASK | PORT_PCR_PS_MASK;

PORTE_PCR25 = PORT_PCR_MUX(5)| PORT_PCR_PE_MASK | PORT_PCR_PS_MASK;

I2C0_F = 0x00;

I2C0_C1 = I2C_C1_IICEN_MASK;

I2C0_FLT |= I2C_FLT_FLT(16);

}

uint8 i2c_read_byte(uint8 reg)

{

uint16 ch;

uint8 c;

I2C0_C1 |= I2C_C1_TX_MASK; //设置MCU为发送模式

I2C0_C1 &= ~I2C_C1_TXAK_MASK; //设置发送完每个字节接收ACK信号

I2C0_S |= I2C_S_IICIF_MASK; //复位数据接收完成标志位

I2C0_C1 |= I2C_C1_MST_MASK; //产生START信号

I2C0_D = SENSOR_I2C_ADDRESS_W;

while((I2C0_S & I2C_S_IICIF_MASK) == 0); //直到数据传送完成在测试阶段可以使用延时那样更有利于测试 I2C0_S |= I2C_S_IICIF_MASK; //复位数据接收完成标志位

while((I2C0_S & I2C_S_RXAK_MASK) == 1); //直到接收到ACK信号

I2C0_D = reg;

while((I2C0_S & I2C_S_IICIF_MASK) == 0);

I2C0_S|=I2C_S_IICIF_MASK;

while((I2C0_S & I2C_S_RXAK_MASK) == 1);

I2C0_C1 |= I2C_C1_RSTA_MASK;

for(ch = 0; ch < 100; ch++)

{

asm("nop");

}

I2C0_D = SENSOR_I2C_ADDRESS_R;

while((I2C0_S & I2C_S_IICIF_MASK) == 0);

I2C0_S|=I2C_S_IICIF_MASK;

I2C0_C1 &= ~I2C_C1_TX_MASK;

I2C0_C1 |= I2C_C1_TXAK_MASK;

c = I2C0_D;

while((I2C0_S & I2C_S_IICIF_MASK) == 0);

I2C0_S|=I2C_S_IICIF_MASK;

I2C0_C1 &= ~I2C_C1_MST_MASK;

c = I2C0_D;

for(ch = 0; ch < 500; ch++)

{

asm("nop");

}

return c;

}

void i2c_write_byte(uint8 reg, uint8 m)

{

uint16 ch;

I2C0_C1 |= I2C_C1_TX_MASK;

I2C0_S |= I2C_S_IICIF_MASK;

I2C0_C1 |= I2C_C1_MST_MASK;

I2C0_D = SENSOR_I2C_ADDRESS_W;

while((I2C0_S & I2C_S_IICIF_MASK) == 0);

I2C0_S |= I2C_S_IICIF_MASK;

while((I2C0_S & I2C_S_RXAK_MASK) == 1); I2C0_D = reg;

while((I2C0_S & I2C_S_IICIF_MASK) == 0);

I2C0_S|=I2C_S_IICIF_MASK;

while((I2C0_S & I2C_S_RXAK_MASK) == 1);

I2C0_D = m;

while((I2C0_S & I2C_S_IICIF_MASK) == 0);

I2C0_S|=I2C_S_IICIF_MASK;

while((I2C0_S & I2C_S_RXAK_MASK) == 1);

I2C0_C1 &= ~I2C_C1_MST_MASK;

for(ch = 0; ch < 500; ch++)

{

asm("nop");

}

}

void UART_Init(uint32 baud_rate)

{

uint16 uart0_clk_khz = 24000;

uint16 sbr;

PORTA_PCR1 = PORT_PCR_MUX(0x02);

PORTA_PCR2 = PORT_PCR_MUX(0x02);

SIM_SCGC4 |= SIM_SCGC4_UART0_MASK;

SIM_SOPT2 |= SIM_SOPT2_UART0SRC(1);

UART0_C2 &= ~(UART0_C2_TE_MASK | UART0_C2_RE_MASK);

sbr = (uint16)((uart0_clk_khz*1000)/(baud_rate * 16));

UART0_BDH = UART0_BDH & (~UART0_BDH_SBR_MASK);

UART0_BDL = (uint8)(sbr & UART0_BDL_SBR_MASK);

UART0_C4 = UART0_C4_OSR(15);

UART0_C1 = 0x00;

UART0_S1 |= 0x1F;

UART0_C2 |= (UART_C2_TE_MASK | UART_C2_RE_MASK);

}

void pwm_Init(uint16 period, uint16 duty)

{

SIM_SOPT2 |= SIM_SOPT2_TPMSRC(1);

SIM_SCGC6 |= SIM_SCGC6_TPM0_MASK

|SIM_SCGC6_TPM2_MASK;

PORTD_PCR1 |= PORT_PCR_MUX(4);

TPM0_BASE_PTR->SC = 0 | TPM_SC_CMOD(0);

TPM0_BASE_PTR->CNT = 0;

TPM0_BASE_PTR->MOD = period;

TPM0_C1SC = 0 | TPM_CnSC_MSB_MASK

| TPM_CnSC_ELSB_MASK;

TPM0_C1V = duty;

TPM0_BASE_PTR->SC = 0 | TPM_SC_CMOD(1)

|TPM_SC_PS(4) ;

PORTB_PCR18 |= PORT_PCR_MUX(3);

PORTB_PCR19 |= PORT_PCR_MUX(3);

TPM2_BASE_PTR->SC = 0 | TPM_SC_CMOD(0);

TPM2_BASE_PTR->CNT = 0;

TPM2_BASE_PTR->MOD = period;

TPM2_C0SC = 0 | TPM_CnSC_MSB_MASK

| TPM_CnSC_ELSB_MASK;

TPM2_C0V = duty;

TPM2_C1SC = 0 | TPM_CnSC_MSB_MASK

| TPM_CnSC_ELSB_MASK;

TPM2_C1V = duty;

TPM2_BASE_PTR->SC = 0 | TPM_SC_CMOD(1)

|TPM_SC_PS(4) ;

}

void pwm_Set(uint8 ch, uint16 duty)

{

switch (ch)

{

case 1 : TPM0_C1V = duty;

break;

case 2 : TPM2_C0V = duty;

break;

case 3 : TPM2_C1V = duty;

break;

}

}

void wait_nms(uint8 n)

{

uint8 i,j;

for(i=0;i

{

for(j=0;j<100;j++)

{

asm("nop");

}

}

}

/********************************************************************/ uint8 x;

uint8 XH, XL, YH, YL, ZH, ZL;

int8 xh, yh, zh;

uint8 temp;

/********************************************************************/ int main (void)

{

#ifdef CMSIS

start();

#endif

printf("\n\rRunning the experiment_5 project.\n\r");

UART_Init(9600);

i2c_Init();

pwm_Init(100, 50);

x = i2c_read_byte(0x0D);

if (x == 0x1A)

{

i2c_write_byte(0x2A, 0x19);

i2c_write_byte(0x0E, 0x01);

}

else

{

printf("\n\rPlease check out your MMA81451!\n\r");

}

while(1)

{

x = i2c_read_byte(0x00);

if (x & 0x08 == 0x08)

{

// XH = i2c_read_byte(0x01);

// XL = i2c_read_byte(0x02);

// YH = i2c_read_byte(0x03);

// YL = i2c_read_byte(0x04);

// ZH = i2c_read_byte(0x05);

// ZL = i2c_read_byte(0x06);

// uart0_putchar (UART0_BASE_PTR, 0xFF);

// uart0_putchar (UART0_BASE_PTR, XH - 1);

// uart0_putchar (UART0_BASE_PTR, XL);

// uart0_putchar (UART0_BASE_PTR, YH - 1);

// uart0_putchar (UART0_BASE_PTR, YL);

// uart0_putchar (UART0_BASE_PTR, ZH - 1);

// uart0_putchar (UART0_BASE_PTR, ZL);

xh = i2c_read_byte(0x01); //0001

// yh = i2c_read_byte(0x03); //0011

// zh = i2c_read_byte(0x05); //0101

//temp = (uint8)((128 + xh) / 256.0 * 100.0);

// pwm_Set(1,temp);

//temp = (uint8)((128 + yh) / 256.0 * 100.0); //pwm_Set(2,temp);

// temp = (uint8)((128 + zh) / 256.0 * 100.0); //pwm_Set(3,temp);

/* if(fabs(xh)>30&&fabs(yh)<30&&fabs(zh)<30)

{

pwm_Set(1,100);

pwm_Set(2,0);

pwm_Set(3,0);

}

if(fabs(xh)<30&&fabs(yh)>30&&fabs(zh)<30)

{

pwm_Set(2,100);

pwm_Set(1,0);

pwm_Set(3,0);

}

if(fabs(xh)<30&&fabs(yh)<30&&fabs(zh)>30)

{

pwm_Set(2,0);

pwm_Set(3,100);

pwm_Set(1,0);

}

*/

while(!(xh>(64+th1)))

{

wait_nms(20);

xh=i2c_read_byte(0x01);

}

while(!(xh>(64+th1)))

{

wait_nms(20);

xh=i2c_read_byte(0x01);

}

while(!(xh<(64-th2)))

{

wait_nms(20);

xh=i2c_read_byte(0x01);

}

while(!(xh<(64-th2)))

{

wait_nms(20);

xh=i2c_read_byte(0x01);

}

cnt++;

}

if(cnt<=10)

{

pwm_Set(2,0);

pwm_Set(3,100);

pwm_Set(1,100);

}

else if(cnt<=15)

{

pwm_Set(1,0);

pwm_Set(3,100);

pwm_Set(2,100);

}

else if(cnt<=20)

{

pwm_Set(3,0);

pwm_Set(1,100);

pwm_Set(2,100);

}

else

{

cnt=0;

continue;

}

}

}

/********************************************************************/

飞思卡尔单片机各种问题汇结

飞思卡尔问题汇结 一、flash/EEPROM的操作 Tips: a、HC08系列MCU中,很多Monitor ROM中固化了对flash操作的函数,用户只需调用即可,参考AN2874等应用笔记 b、HCS08系列和HCS12系列MCU对flash的操作十分类似,可以参考 AN2140 1、FLASH操作函数 (HCS08系列) https://www.doczj.com/doc/e87587966.html,/dispbbs.asp?boardID=3&RootID=111907&ID= 111907 2、如何将flash中的程序copy至ram中 https://www.doczj.com/doc/e87587966.html,/dispbbs.asp?boardID=3&RootID=104074&ID= 104074 3、S12内部寄存器的映射

https://www.doczj.com/doc/e87587966.html,/dispbbs.asp?boardID=3&RootID=103261&ID= 103261 4、S12EEPROM的使用、 INITRG,INITRM,INITEE寄存器的说明https://www.doczj.com/doc/e87587966.html,/dispbbs.asp?boardID=3&RootID=102260&ID= 102260 5.INITRM寄存器的使用 https://www.doczj.com/doc/e87587966.html,/dispbbs.asp?boardID=3&RootID=103214&ID= 103214 二、编程技巧 Tips: a、一般Codewarrior用引导生成工程的话,器件的头文件中都定义好了各个位,C语言编程只需找到对应的位进行操作即可 b、用户自定义变量进行位操作,可以参考Codewarrior的格式 1、CW位操作定义结构 https://www.doczj.com/doc/e87587966.html,/dispbbs.asp?boardID=3&RootID=87784&ID=8 7784

飞思卡尔单片机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窗口

从飞思卡尔SafeAssure功能安全保障方案看汽车安全设计概要

从飞思卡尔SafeAssure功能安全保障方案看汽车安全设计 就在您阅读完本文不到十分钟的时间内,全球大概有超过二十人已经因为车祸离开这个世界,而其中大约有90%是来自像中国这样的发展中国家(数据参考世界卫生组织统计。汽车造福人类的同时,在全球科技空前发达的今天,因为交通事故带来如此重大的公共安全威胁不啻为人类的一大悲剧。从汽车诞生开始,人们就没有停止过对汽车安全驾驶的追求。最早的安全带以及后来的安全气囊等被动安全措施挽救了数千万人的生命,后来发展起来的ABS(防抱死制动系统、ESP(电子稳定程序、EBD(电子制动力分配系等主动安全功能让汽车安全性再次大大提高。但尽管如此,交通事故依然是最大非自然死伤原因之一。图1 世界卫生组织统计:全球每年因交通事故死亡130万人,并有5000万人受伤“随着系统复杂性的提高,以及软件和机电设备的大量应用,因为系统失效和随机硬件失效导致的交通事故风险也日益增加。因此,近年开始出现了新的汽车安全概念——安全性预测。”在近日召开的“2012产业和技术展望媒体研讨会”上,飞思卡尔亚太区汽车及工业解决方案事业部全球产品市场经理郗蕴侠(Yolanda博士指出,“安全性预测即汽车里的一些系统能实时检测故障,在故障发生之前就能预警防止故障发生,这就是当前大家倡导的汽车功能安全的概念。”为此,飞思卡尔推出了命名为“SafeAssure”的安全保障方案,旨在帮助系统制造商更加轻松地满足汽车和工业市场中的功能安全标准要求,并大大降低开发难度、缩短开发周期。图2 汽车安全系统的演变——基于安全性预测的功能安全出现从IEC61508到ISO 26262,看汽车功能安全演变 2011年11月推出ISO 26262之前,汽车行业遵照的功能安全标准是电子、电气及可编程器件功能安全基本标准IEC 61508。然而,作为一种通用基础安全标准,对于汽车行业的特殊性而言,该标准有很多的不足,特别是近年来汽车系统的复杂性日益增长的条件下。从IEC 61508派生出来的ISO 26262为当前汽车行业量身定制,特别是ISO 26262对于硬件研发、软件研发的要求适合于当前先进的汽车工业的实际现状。 ISO 26262标准根据安全风险程度对系统或系统某组成部分确定划分由A到D的安全需求等级(汽车安全完整性等级——ASIL,其中ASIL D级为最高等级,具有最苛刻的安全要求。对系统供应商而言,必须满足这些因为安全等级提高而提出的更高的设计要求。安全事件总是和通常的功能、质量相关的研发活动以及产品生产伴随在一起。ISO26262强调了研

飞思卡尔单片机问题总结

飞思卡尔单片机问题总结 常见问题回答精华列表 为了方便网友查询相关问题,特将常见问题精华帖整理归类 本帖不断更新,欢迎网友们给出建议 另外,在提问时,请在标题中选用具体问题的字眼避免使用请问某某、请教、紧急求助等作为标题。对于具体器件,可以直接把器件类型写上,比如HC08QY4等;对于具体技术,比如CAN/LIN/ZigBee等也直接写明,便于版主分类回答,也便于其他网友查询。 一、flash/EEPROM的操作 Tips: a、HC08系列MCU中,很多Monitor ROM中固化了对flash操作的函数,用户只需调用即可,参考AN2874等应用笔记 b、HCS08系列和HCS12系列MCU对flash的操作十分类似,可以参考 AN2140 1、FLASH操作函数 (HCS08系列)

https://www.doczj.com/doc/e87587966.html,/dispbbs.asp?boardID=3&RootID=111907&ID= 111907 2、如何将flash中的程序copy至ram中 https://www.doczj.com/doc/e87587966.html,/dispbbs.asp?boardID=3&RootID=104074&ID= 104074 3、S12内部寄存器的映射 https://www.doczj.com/doc/e87587966.html,/dispbbs.asp?boardID=3&RootID=103261&ID= 103261 4、S12EEPROM的使用、 INITRG,INITRM,INITEE寄存器的说明https://www.doczj.com/doc/e87587966.html,/dispbbs.asp?boardID=3&RootID=102260&ID= 102260 5.INITRM寄存器的使用 https://www.doczj.com/doc/e87587966.html,/dispbbs.asp?boardID=3&RootID=103214&ID= 103214 二、编程技巧

飞思卡尔智能车摄像头组freescale程序代码

extern int left,w,top,h; extern HDC m_hdc; CBrush brush3(RGB(0,255,0)); CBrush brush4(RGB(255,0,0)); CBrush brush5(RGB(255,255,0)); #else #include #include "math.h" // #include "LQfun.h" #endif #ifdef ccd #define MAX_VIDEO_LINE 39 #define MAX_VIDEO_POINT 187 #else //#define MAX_VIDEO_LINE 26 // #define MAX_VIDEO_POINT 301 #define MAX_VIDEO_LINE 78 #define MAX_VIDEO_POINT 57 #endif extern unsigned char g_VideoImageDate[MAX_VIDEO_LINE][MAX_VIDEO_POINT]; #define INT8U unsigned char #define INT8S signed char #define INT16U unsigned int #define INT16S int #define INT32S int #define NO_DATA_180 254 //#define INT32U unsigned int unsigned char LIMIT=((MAX_VIDEO_POINT)/2); unsigned char MIDDLE[MAX_VIDEO_LINE]; #define MAX_BLACK_NUM 7 INT8S n;

飞思卡尔智能车电磁组信号采集

?пㄖ ???? ??? ? ??? ?? ? ? 1? ? ??? ? 哖 世?? ???? ??? ??? ??? ? ??? ㄎ? ?? ??????仁??20kHz??????⌒ ???仁?VLF? ??⌒???仁仁?? ? 仁 ?仁??⌒????3kHz?30kHz?⌒?? 100km?10km? ?? 3.1?? ??? ? ? ?? ? ? ?а ? ?????? ??? ? ? ? ? ?? ??オ???? ??? ??? ? ? ??? ? ? ???о? ??? ??? ??? ? ? ? ? ?? ? ??? й ?????? ? ? ?? ? ???? ?н ????? ? ? на???? ??? ? ? ?? ? ? ?? а ? ???? ?? ??? ?? ? ??? ? ? ?? ?? ??? ??? ?? ??仁? ??? ?? ???? ??? ?? ?? ????? ?? ? ?? ?????? ↓ ? ?? ?? ↓ ? ?? ?? ??? ???? ? ??? ?? ? ? ?? ? ↓ ?? ?? ? ? ? ? ?? っ ?? ???/& ????? ??? ? ? ??/&? ?? ? ?

?йㄐ ???? ?? ?LC? ?? ? ? ?? ?? ? ?? ??????? ??? ??AD???? 享 ?? 儈?↓? фн?? ?? ???AD? ???? ? ?? ?? 3.3 ?? ?? ???????? ?? 傼 ??н ??? ? ? н ? ?? ?? ?н ? н? ? ? ??? ? ?? ?нっ ???? ?????? ? ф? 儈? ? ?

飞思卡尔单片机知识点

1、单片机组成:1> CPU 2> 存储器3>I/O ; 2、存储器包括2大类:ROM , RAM 3、标准ASCII码使用(1)个字节表示字符; 4、BCD码是用()进制表示的()的数据; 5、HCS08QG8的最小系统包括(电源电路,复位电路,下载口,(内部时钟)); 6、QG8管脚数量(16)、只能输入的是(PTA5)、只能输出的是(PTA4)、程序下载的是、接外部时钟的是; 7、QG8的管脚可以作为数字输入输出、也可以作为模拟输入,可以作为模拟输入的有(); 8、QG8管脚复用优先级最低的功能是(I/O); 9、QG8存储器配置中,不同资源的分界线……; 10、CPU寄存器有(A, HX, PC, CCR, SP); 11、可以执行位操作的地址范围(0X0000~0X005F); 12、有地址的寄存器分成了(3)块(0页,高页,非易失); 13、如何在C语言中定义常数(数据类型变量名;),如何指定变量的地址(数据类型变量名@ 地址;); 14、堆栈的管理者是寄存器(SP); 15、SP的复位缺省值是(0X00FF); 16、堆栈对数据的操作特点是(向上生长型:先压后涨、先减后弹); 17、堆栈一般在RAM的高地址区域还是低地址区域?高地址区 18、内部时钟源包括哪4大部分? 19、外部时钟分哪2大类;振荡器,整形外部时钟 20、内部时钟中FLL固定倍频(512倍频); 21、ICS的7种工作模式(FEI, FEE, FBI, FBILP, FBE, FBELP, stop); 22、ICS的内部参考时钟是可以校准、微调的,调整的寄存器名(ICSTRM);该寄存器的数值越大,输出时钟频率越(低); 23、FLASH是按页管理的,页大小(512)字节,每页分(8)行; 24、高页寄存器位于FLASH的最后一页的(第六行/0xFFB0~0xFFBF)位置; 25、FLASH的最后一页最后一行是(中断向量); 26、FLASH块保护寄存器(FPROT);块加密寄存器(FOPT);对应的非易失寄存器分别是(NVOPT, NVPROT); 27、FLASH操作的一般过程是(); 28、FLASH操作的有效命令有(空检查,字节编程,突发模式编程,页擦除,全部ROM 擦除); 29、记录程序运行状态的CPU寄存器是(CCR); 30、指令系统包括6大类指令,分别是(算术运算指令、数据传送指令、数据和位操作、逻辑运算、程序控制、堆栈处理); 31、寻址方式是指(CPU访问操作数和数据的方法); 32、寻址方式包括7大类16种,分别是: INH IMM DTR EXT IX,IX1,IX2,SP1,SP2,IX+,IX1+ REL IMD, DD,IX+D,DIX+ 33、8指令模板和6指令模板分别是(); 34、QG8是高电平复位还是低电平复位?低电平 35、QG8数据存储器RAM的大小为(512)字节; 36、上电复位期间将管脚(A4)设置为(低)电平可以进入调试模式 37、QG8的存储器结构为冯·诺伊曼还是哈佛结构?冯诺依曼

飞思卡尔硬件和部分软件部分笔记

常见稳压芯片和电路图 Modified by Taiyou 2011-1-27 硬件部分 一、总体模块框图 1、基本模块包括电源模块、测速模块、驱动模块、道路识别模块等,再加上调试模块部分,调试模块部分可单独设计,调试完后拆下,框图如下: 2、此外,还可以包括车速,车架速度、电池电压和舵机位置检测等电路,增加模型车运行参数检测,提高模型车控制性能,增加调试电路方便现场调试。下面的第二图为硬件模块与上面层的关系。 二、具体电路图 1、电源模块 主要包括以下几个部分的电源:

1)5V电压。主要为单片机、信号调理电路以及部分接口电路提供电源,电压要求稳定、 噪声小,电流容量大于500mA。 补充,一般在输出端并联一个大电容来解决稳定性问题 2)6V电压。主要是为舵机提供工作电压,实际工作时,舵机所需要的工作电流一般在几 十毫安左右,电压无需十分稳定。 3)7.2V电压。这部分直接取自电池两端电压,主要为后轮电机驱动模块提供电源。 4)12V电压。如果采用CCD/CMOS图像传感器来进行道路检测,则需要12V工作电压。 5)2V电压。为红外发光管提供工作电压,可以采用开关电源从电池降压而得,这样可以 提高红外检测电路的电源利用效率。需要根据红外发射管的参数确定该电压值。 补充,此电路为光电组所需电压,我们不需要。 除此之外,如果使用了其的芯片和传感器,它们的工作电压可能不在上述之内,还需要通过专门的稳压电路提供相应的工作电压。例如采用飞思卡尔公司的MC7260加速度传感器进行车轮打滑检测,该传感器需要3.3V的工作电压。 补充,由于今年增加了坡度的控制,我们队考虑了增加坡度检测方面的传感器。 降压稳压电路可以采用可以采用串联稳压可开关稳压两种芯片。开关稳压芯片的工作效率高,但有较高的电源噪声,耗电量比较大的电路适于采用开关稳压电路。例如采用大电流红外检测电路,由于红外发射管数量较多,总的消耗电流很大,采用开关电源将电池电压将至2V左右,作为红外发射管的工作电压,此时每个红外发射管工作时只需串联很小的限流电阻甚至不用串联电阻,采用这种方法,可大大提高电源利用效率。 稳压电路的设计需要简单可靠,在满足电压波动范围的要求下应尽量简化电路设计,例如舵机电源在4.5V~6V的范围内,电流100mA左右,可以从7.2V的电池电压通过串联两只硅二极管获得。此外,通过实验可发现,组委会所提供的舵机可以直接工作在7.2V的电压下,此时舵机的响应速度也会提高,所以可以直接使用电池电压作为舵机的电源。 如果采用CCD或CMOS摄像头作为道路传感器,它们工作电压在9~12V范围内,此工作电压高于电池的电压,需要借助于斩波升压电路获取,可以采用专门升压芯片进行设计,也可以利用单片机PWM输出端口控制大功率晶体管进行斩波升压。有些CMOS摄像头工作电压在6~9V之间,所以也可以直接使用电池电压提供电源,所以选择CMOS摄像头可以简化电源电路的设计。 消除电源中的噪声并减少电压波动,需要在各级电源模块中安装滤波电容,包括容量小的高频滤波电容以及大容量的电解电容。由于存在电机驱动,为了避免电机在启动和制动过程产生的冲击电流对电源的影响,应尽量加大电池两端的电容容量,但不要超过大赛规则允许的电容容量限制。 另一本书上的版本(2.5V、5V、6.5V、7.2V、12V): 1)采用稳压芯片LM2576将电源电压稳压到5V后,给单片机系统电路、车速检测

飞思卡尔智能车比赛个人经验总结

先静下心来看几篇技术报告,可以是几个人一起看,边看边讨论,大致了解智能车制作的过程及所要完成的任务。 看完报告之后,对智能车也有了大概的了解,其实总结起来,要完成的任务也很简单,即输入模块——控制——输出。 (1)输入模块:各种传感器(光电,电磁,摄像头),原理不同,但功能都一样,都是用来采集赛道的信息。这里面就包含各种传感器的原理,选用,传感器电路的连接,还有传感器的安装、传感器的抗干扰等等需要大家去解决的问题。 (2)控制模块:传感器得到了我们想要的信息,进行相应的AD转换后,就把它输入到单片机中,单片机负责对信息的处理,如除噪,筛选合适的点等等,然后对不同的赛道信息做出相应的控制,这也是智能车制作过程中最为艰难的过程,要想出一个可行而又高效的算法,确实不是一件容易的事。这里面就涉及到单片机的知识、C语言知识和一定的控制算法,有时为了更直观地动态控制,还得加入串口发送和接收程序等等。 (3)输出模块:好的算法,只有通过实验证明才能算是真正的好算法。经过分析控制,单片机做出了相应的判断,就得把控制信号输出给电机(控制速度)和舵机(控制方向),所以就得对电机和舵机模块进行学习和掌握,还有实现精确有效地控制,又得加入闭环控制,PID算法。 明确了任务后,也有了较为清晰的控制思路,接下来就着手弄懂每一个模块。虽然看似简单,但实现起来非常得不容易,这里面要求掌握电路的知识,基本的机械硬件结构知识和单片机、编程等计算机知识。最最困难的是,在做的过程中会遇到很多想得到以及想不到的事情发生,一定得细心地发现问题,并想办法解决这些问题。 兴趣是首要的,除此之外,一定要花充足的时间和精力在上面,毕竟,有付出就会有收获,最后要明确分工和规划好进度。

飞思卡尔智能车程序

Main.c #include /* common defines and macros */ #include /* derivative information */ #pragma LINK_INFO DERIVATIVE "mc9s12db128b" #include "define.h" #include "init.h" // variable used in video process volatile unsigned char image_data[ROW_MAX][LINE_MAX] ; // data array of picture unsigned char black_x[ROW_MAX] ; // 0ne-dimensional array unsigned char row ; // x-position of the array unsigned char line ; // y-position of the array unsigned int row_count ; // row counter unsigned char line_sample ; // used to counter in AD unsigned char row_image ; unsigned char line_temp ; // temperary variable used in data transfer unsigned char sample_data[LINE_MAX] ; // used to save one-dimension array got in interruption // variables below are used in speed measure Unsigned char pulse[5] ; // used to save data in PA process Unsigned char counter; // temporary counter in Speed detect Unsigned char cur_speed; // current speed short stand; short data; unsigned char curve ; // valve used to decide straight or turn short Bounds(short data); short FuzzyLogic(short stand); /*----------------------------------------------------------------------------*\ receive_sci \*----------------------------------------------------------------------------*/ unsigned char receive_sci(void) // receive data through sci { unsigned char sci_data; while(SCI0SR1_RDRF!=1); sci_data=SCI0DRL; return sci_data; } /*----------------------------------------------------------------------------*\ transmit_sci \*----------------------------------------------------------------------------*/ void transmit_sci(unsigned char transmit_data) // send data through sci { while(SCI0SR1_TC!=1); while(SCI0SR1_TDRE!=1);

飞思卡尔智能车电磁组程序员成长之路(未完待续)

飞思卡尔智能车电磁组程序员成长之路 1.飞思卡尔智能车小车入门 智能汽车电磁组简介: 第五届全国大学“飞思卡尔杯”智能汽车竞赛新增加了“电磁组”。根据比赛技术 要求,电磁组竞赛,需要选手设计的智能车能够检测到道路中心线下电线中20KHz 交 变电流产生的磁场来导引小车沿着道路行驶。在平时调试和比赛过程中需要能够满足比 赛技术要求的 20KHz 的交流电源驱动赛道中心线下的线圈。同时参赛选手需要自行设 计合适的电磁传感器来检测赛道信息完成智能寻迹功能。 智能车制作是一个涵盖电子、电气、机械、控制等多个领域和学科的科技创新活动。简单点来说可以将其分为硬件电路(包括电源、MUC 控制部分、电机驱动、传感器)、机械、算法三方面的设计。电磁组在机械方面可以参照光电组的设计方案,这里不再赘述。本设计指导只讲述20KHZ 电源、电磁传感器设计方案以及部分算法。 智能车对单片机模块需求: 飞思卡尔单片机资源:

智能车涉及到IO模块,中断模块,PWM模块,DMA模块,AD模块等。在车模调试中还有必须的模块。如SCI模块、定时器模块,SPI模块等。其中还涉及到一些算法和数据的存储和搬移。一个好程序框架对智能车的制作过程中会达到事半功倍的效果。但是就智能车这样系统来说,如果完全专门移植一个操作系统或者写一个程序的bootload,感觉有一些本末倒置,如果有成熟的,可以借用的,那样会比较好。 2.电磁传感器的使用 20KHz电源参考设计方案: 电源技术指标要求: 根据官网关于电磁组赛道说明,20KHz 电源技术要求如下: 1.驱动赛道中心线下铺设的 0.1-0.3mm 直径的漆包线; 2.频率围:20K±2K; 3.电流围:50-150mA; 图 2.1 是赛道起跑区示意图,在中心 线铺设有漆包线。 首先分析赛道铺设铜线的电抗,从而得 到电源输出的电压围。我们按照普通的练习 赛道总长度 50m,使用直径 0.2mm 漆包线。在30 摄氏度下,铜线的电阻率大约为 0.0185 欧姆平方毫米/米。计算可以得到中心线的电阻大约为 29.4 欧姆。 按照导线电感量计算机公式: 其中 l, d 的单位均为 cm。可以计算出直径为 0.2mm,长度 50 米的铜线电感量为131 微亨。对应 20KHz 下,感抗约为 16.5 欧姆。

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

飞思卡尔智能车比赛电磁组路径检测设计方案电磁组竞赛车模 路径检测设计参考方案 (竞赛秘书处 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

飞思卡尔软件注意事项

飞思卡尔些许经验之软件设计 ------循迹基于电磁传感器,方向以及舵机调控基于B车模(仅供参考) 1、电感排布 先说下各种排布类型电感的特点: 左右竖直电感:对直角弯道十分敏感,可以清楚分辨出来十字弯与直角弯,但是对于曲率较大的S弯道会造成与直角弯道混淆。在直角弯的时候左右电感差异非常大,可以较早判别出直角弯道,与左右水平电感结合可排除竖直电感对直角弯与大曲率S弯的误判 左右水平电感:很适合判断直道以及小曲率弯道车子处在中心线的位置,但是对于曲率较大的S弯道与直角弯可能会造成左右判断相反的情况(即明明车子左偏赛道,但是根据电感差值却得出车子右偏赛道的结论),此时应该结合竖直电感或者斜电感来融合判断。 左右斜电感:对直角弯以及一切曲率的弯道敏感,缺点是过于敏感,若使用此电感差值作为误差偏移量会导致车子严重内切弯道,建议加入其余电感的权重,总体上不建议使用左右斜电感差值作为误差偏移量,但是作为一切弯道以及直道还有直角弯的方向判断是非常适合的。另外应该注意的是此电感排布对于十字弯道会误判,这是由于十字弯道磁场排布的影响,但是可以与左右水平电感或左右竖直电感结合排除对十字弯道的误判。 中间水平电感:此电感非常适合用于误差偏移量的计算,即误差量=直道中心线值-实时值;用此方法得到的差值在弯道的时候只用稍稍加以处理就可平滑的咬中线过弯。 电感的排布基本上就这几种方式了,下边要说的是车子电感排布选择左右竖直电感加左右水平电感:本次比赛太原理工大学的电感排布,个人感觉过弯时对赛道误差偏移量的处理有较高要求,处理不好很有可能让车子严重内切赛道导致出界。 左右竖直电感加左右水平电感加中心水平电感:用中心水平电感获取赛道误差偏移量,方法参考上面的描述。弯道方向判断用左右竖直电感。直道方向判断用左右水平电感,直角预判用竖直电感,具体是若竖直电感左右差值达到一定程度了就看左右水平电感,若左右水平电感差值较小且左右电感值都较大,说明快要进入直角弯,否则说明在大曲率的S弯。 左右斜电感加左右水平电感加中间水平电感:用中心水平电感获取赛道误差偏移量,方法参考上面的描述。斜电感判断弯道以及直角弯方向。区分十字与直角的方法是看左右水平电感与左右斜电感算出来的方向是否相反,若相反且左右水平电感差值较小且单个水平电感值较大,说明进入了十字区,方向判断应该用左右水平电感。进入直角弯前左右水平电感值会比直道上值稍小且差值较小,且中间水平电感值比处在中心线的时候稍小且左右斜电感差值较,此时基本可以判定是即将进入直角弯道了。 左右水平电感加中心水平电感:个人没有使用过,不过本次比赛有人用并且上届学长也有人用,并且还跑出了不错的成绩,这个排布方式下方向还有赛道误差偏移量的选取可结合上述方法以及自己开拓。

全国大学生飞思卡尔比赛规则

全国大学生“飞思卡尔”杯智能汽车竞赛 竞速比赛规则与赛场纪律 参赛选手须使用竞赛秘书处统一指定的竞赛车模套件,采用飞思卡尔半导体公司的8 位、16 位微控制器作为核心控制单元,自主构思控制方案进行系统设计,包括传感器信号采集处理、电机驱动、转向舵机控制以及控制算法软件开发等,完成智能车工程制作及调试,于指定日期与地点参加各分赛区的场地比赛,在获得决赛资格后,参加全国总决赛的场地比赛。参赛队伍的名次(成绩)由赛车现场成功完成赛道比赛时间为主,技术报告、制作工程质量评分为辅来决定。大赛根据车模检测路径方案不同分为电磁、光电与摄像头三个赛题组。车模通过感应由赛道中心电线产生的交变磁场进行路径检测的属于电磁组;车模通过采集赛道图像(一维、二维)进行路径检测的属于摄像头组;车模通过采集赛道上少数孤立点反射亮度进行路径检测的属于光电组。 竞赛秘书处制定如下比赛规则适用于各分赛区预赛以及全国总决赛,在实际可操作性基础上力求公正与公平。 一、器材限制规定 1.须采用统一指定的车模。本届比赛指定采用两种车模: A 型车模:广东博思公司提 供。限定电磁组比赛使用。 B 型车模:北京科宇通博科技有限公司提供。限定光电组、摄像头组使用。 细节及改动限制见附件一。 2.须采用飞思卡尔半导体公司的8 位、16 位处理器(单核)作为唯一的微控制器。 有关 细节及其它电子器件使用的限制见附件二; 3.参加电磁赛题组不允许使用传感器获取道路的光学信息进行路径检测。 参加光电赛 题组中不允许传感器获取道路图像信息进行路径检测。 参加摄像头赛题组可以使用光电管作为辅助检测手段。 4.其他事项 如果损毁车模中禁止改动的部件,需要使用相同型号的部件替换; 车模改 装完毕后,尺寸不能超过:250mm 宽和400mm 长。

飞思卡尔 电磁组

第十届“飞思卡尔”杯全国大学生 智能汽车竞赛 技术报告 学校:常熟理工学院 队伍名称:物电电磁二队 参赛队员:梅亚军、沈锦杰、黄志鹏、张峰 带队老师:徐健、顾涵

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

摘要 本文介绍了常熟理工学院物电电磁二队电磁车的成果。智能车的硬件平台采用带MK60DN256Vll10处理器,软件平台为IAR Embedded Workbench开发环境,车模采用大赛组委会统一提供的两辆B型车模。 文中介绍了智能车机械结构调整,传感器电路设计,舵机、电机控制算法以及起跑线的检测等。车模以MK60DN256Vll10单片机为控制核心,以安装在车体前的工字电感作为循迹传感器,采用干簧管检测起跑线,以欧姆龙编码器检测速度信息。车模系统的简单工作原理是MK60DN256Vll10单片机通过AD口采集电感检测的拟量,并通过算法处理,然后返回值用于舵机控制,根据编码器返回值进行电机的闭环控制。通过串口,借用蓝牙等工具进行舵机PD参数,电机PID的调节,以及整定传感器参数的整合处理,再通过数字红外进行两车之间联系,保持车距。 关键字:机械结构、电磁寻线、舵机PD控制、电机PID控制

目录 第一章总体方案设计------------------------------------------------------------------------------------------- 6 第二章智能车机械结构调整与优化 ------------------------------------------------------------------------ 9 2.1 主销内倾 ---------------------------------------------------------------------------------------------- 9 2.2 主销后倾 -------------------------------------------------------------------------------------------- 10 2.3 外倾角 ------------------------------------------------------------------------------------------------ 11 2.4车轮安装示意图如下:---------------------------------------------- 12 2.5 舵机的安装----------------------------------------------------------------------------------------- 12 2.6 舵机安装示意图如下: ------------------------------------------------------------------------- 13 2.7 小结 --------------------------------------------------------------------------------------------------- 13 第三章电路设计说明 --------------------------------------------------------------------------------------- 14 3.1 电源模块--------------------------------------------------------------------------------------------- 14 3.2 传感器模块------------------------------------------------------------------------------------------ 15 3.3 电机模块--------------------------------------------------------------------------------------------- 15 3.4 舵机模块--------------------------------------------------------------------------------------------- 16 3.5 最小系统板设计 ----------------------------------------------------------------------------------- 16 3.6 系统主板设计 -------------------------------------------------------------------------------------- 17 3.7 小结 --------------------------------------------------------------------------------------------------- 18 第四章智能车控制软件设计说明 ------------------------------------------------------------------------- 19 4.1 软件设计总体框架 -------------------------------------------------------------------------------- 19 4.2 电机PID控制 -------------------------------------------------------------------------------------- 20 4.3 舵机的控制----------------------------------------------------------------------------------------- 24 4.4 传感器数据的处理 -------------------------------------------------------------------------------- 24 4.5 小结 --------------------------------------------------------------------------------------------------- 24 第五章开发工具、制作、安装、调试过程说明 ------------------------------------------------------ 25 5.1 软件编译环境 -------------------------------------------------------------------------------------- 25 5.2 显示模块 -------------------------------------------------------------------------------------------- 25 5.3 蓝牙调试模块-------------------------------------------------------------------------------------- 26 5.4 上位机调试----------------------------------------------------------------------------------------- 26 5.5 本章小结 -------------------------------------------------------------------------------------------- 27 模型车的主要技术参数说明 --------------------------------------------------------------------------------- 28 结论 ---------------------------------------------------------------------------------------------------------------- 29 参考文献 ---------------------------------------------------------------------------------------------------------- 31 附录A:程序源代码 ------------------------------------------------------------------------------------------ 32

相关主题
文本预览
相关文档 最新文档