没有 随机 送一些 文档、资料?
包括 例程、源码什么的?
急求飞思卡尔智能车电磁组程序~
我去给你看看吧 我大三的时候也参加过 看看有没有?
/*
***********************************************************************************
* Test.c
* Description: This file includes I/ O function for test, the PWM outputs function for test, function
* testing sensors.
* (c) Copyright 2006,Zhao Cheng
* All Rights Reserved
*
* By : Zhao Cheng
* Note : Don't change this file if possible.
**********************************************************************************/
#include
#include
#define HIGHSPEED 8000
#define LOWSPEED 11000 /* 速度变量,0-24000 数值越大,速度越慢 */
void PWMout(int, int);
/* 24000-20000 */
void IOtest(void)
{
static unsigned char i=0,j=0x01,k;
DDRB = DDRA = 0xFF;
PORTB = 0xf0;
for(;;)
{
k=(~j)&0x7f;
PORTA = PORTB = k;
while (TCNT != 0x0000);
while (TCNT == 0x0000)
{
if(i>9)
{
j=j<<1;
i=0;
}
i++;
}
if(j>=0x80)
j=0x01;
}
}
void PWMtest(void)
{
int counter=-4500;
DDRB = 0xff;
PORTB = 0xff;
TSCR1 = 0x80; /* enable timer TCNT */
TSCR2 = 0x00; /* TCNT prescaler setup */
for(;;)
{
while (TCNT != 0x0000);
while (TCNT == 0x0000);
counter=counter+30;
if(counter >= 3000)
{
counter = 0;
PWMout(4500, LOWSPEED);
}
if(counter == 1500)
{
PWMout(-4500, LOWSPEED);
}
PORTB = (char)(counter/100);
}
}
void SignalTest(void)
{
unsigned char signal;
int Direction, Velocity;
Direction = 0;
Velocity = LOWSPEED;
DDRA = 0x00;
DDRB = 0xff;
signal = PORTA;
PORTB = ~signal;
switch(signal)
{
case 0x08: /* 0001 1000 */
case 0x10:
Direction = 800;
Velocity = HIGHSPEED;
break;
case 0x04: /* 0010 0100 */
case 0x20:
Direction = 1500;
Velocity = HIGHSPEED;
break;
case 0x02: /* 0100 0010 */
case 0x40:
Direction = 2800;
Velocity = HIGHSPEED;
break;
case 0x01: /* 1000 0001 */
case 0x80:
Direction = 4000;
Velocity = LOWSPEED;
break;
case 0x3c: /* 0011 1100 over start line */
case 0xff: /* 1111 1111 over crossing line */
case 0x00: /* 0000 0000 go straight not need changed state */
default:
break;
}
if(signal > 0x0f)
Direction = -Direction;
PWMout(Direction, LOWSPEED);
}
/*
***********************************************************************************
* LCD1620.c
* ICC-AVR application builder : 2006-1-8 21:43:48
* Target : M8
* Crystal: 4.0000Mhz
*
* Note : Don't change this file if possible.
**********************************************************************************/
#define CMD_CLEAR 0x01
#define CMD_RESET 0x02
#include
#include
#define LCD_DATA 0xff
#define LCD_EN 0x01 //PORTC 0
#define LCD_RS 0x02 //PORTC 1
#define LCD_RW 0x04 //PORTC 2
#define LCD_DATAPORT PORTB
#define LCD_ENPORT PORTA
#define LCD_RSPORT PORTA
#define LCD_RWPORT PORTA
void lcd_init(void);
void lcd_write_cmd(unsigned cmd,unsigned data);
void lcd_setxy(unsigned char x,unsigned char y);
void lcd_write_string(unsigned char X,unsigned char Y,unsigned char *str);
void delay_nus(unsigned int n);
void delay_nms(unsigned int n);
void lcd_init(void)
{
DDRB |= LCD_DATA;
DDRA |= LCD_EN | LCD_RS | LCD_RW;
LCD_RWPORT&=~LCD_RW;
LCD_DATAPORT=0x30; //控制字规则:5:8bit,4:16x2,3:5x7
LCD_ENPORT|=LCD_EN;
delay_nus(1);
LCD_ENPORT&=~LCD_EN;
delay_nus(40);
lcd_write_cmd(0,0x38); //8bit test
lcd_write_cmd(0,0x0c); //显示开
lcd_write_cmd(0,0x01); //显示清屏
lcd_write_cmd(0,0x06); //显示光标移动设置
}
void lcd_write_cmd(unsigned cmd,unsigned data)
{
if(cmd==0)
LCD_RSPORT&=~LCD_RS;
else
LCD_RSPORT|=LCD_RS;
LCD_DATAPORT&=0x00;
LCD_DATAPORT=data;
LCD_ENPORT|=LCD_EN;
delay_nus(10);
LCD_ENPORT&=~LCD_EN;
delay_nus(10);
}
void lcd_setxy(unsigned char x,unsigned char y)
{
unsigned char addr;
if(y==0)
addr=x+0x80;
else
addr=x+0xc0;
lcd_write_cmd(0,addr);
}
void lcd_write_string(unsigned char X,unsigned char Y,unsigned char *str)
{
lcd_setxy(X,Y);
while(*str)
{
lcd_write_cmd(1,*str);
str++;
}
}
void delay_1us(void) //1us延时函数
{
asm("nop");
}
void delay_nus(unsigned int n) //N us延时函数
{
unsigned int i=0;
for (i=0;i<n;i++)
delay_1us();
}
void delay_1ms(void) //1ms延时函数
{
unsigned int i;
for (i=0;i<1140;i++);
}
void delay_nms(unsigned int n) //N ms延时函数
{
unsigned int i=0;
for (i=0;i<n;i++)
delay_1ms();
}
//call this routine to initialize all peripherals
void main(void)
{
lcd_init();
while(1)
{
lcd_write_cmd(0,0x01); //清屏
delay_nms(2);
lcd_write_string(0,0,"happy new year");
delay_nms(100);
lcd_write_string(0,1,"LCD successful!");
delay_nms(100);
}
}
/******************************* 程序结束 *********************************/
怎样?
#19365201178#
我是飞思卡尔智能车初学者 不知道怎么入门 那位大侠能告诉我 - ******
#那包# 硬件方面,也就是电路设计,关于比赛用到的电路不是特别复杂,需要具备一定的电路基础,模拟电路,数字电路和一些EDA设计的能力,主要还是多看前人的东西,看懂了再发展自己的,想创新的空间存在但是不是很大. 软件方面,首先要...
#19365201178#
飞思卡尔智能车光电组硬件需要了解哪些内容 - ******
#那包# 大方向上:光电管的点亮,舵机的控制,借鉴上届电磁车模的电机驱动,车模改装方法等 小细节处:飞思卡尔内部资源的各个配置(如IO口的控制,AD转换,定时器,PWM输出,输入捕捉,串口通信) 有时间的话可以研究研究SD卡,CAN总线技术,以及uC/OS-II(或者Linux)操作系统,这些要比单线程的流水程序要科学要快,而且稳定,多多益善
#19365201178#
请问”飞思卡尔“智能车的制作主要要求那方面的知识或技能? - ******
#那包# 如果搞软件一定要有一定的编程基础,至少要能熟练使用C语言,然后对单片机的要求也比较高,一般我们在学校学的都是51系列单片机,飞思卡尔比赛用的是S12单片机,但他们的基本原理是相通的.之后要有控制理论的基础,真正比赛要想快而且稳,一定要有好的算法,这样相关的经典控制理论,现代控制理论,计算机控制技术等都应该有所了解. 当然在硬件上,三电是基础,模电很重要,电力电子技术也应该知道,最好还要懂Protel绘制电路板. 由于我不是搞机械的,所以机械方面不便多说!到youku,土豆上有很多视频的. 比赛每年一次,分四个赛区,最后总决赛.
#19365201178#
飞思卡尔电磁智能寻迹小车编程用的什么软件 - ******
#那包# keil,CodeWarrior,还有苏大老师编的环境都可以用的
#19365201178#
用什么软件可以模拟飞思卡尔智能车的循迹路线,求各位高手指导啊,谢谢啊 - ******
#那包# 有的,清华大学的plastic是专门用来设计智能车比赛程序的仿真软件.希望对你有帮助,如果帮到你了请采纳.
#19365201178#
初学者学习飞思卡尔智能车 - ******
#那包# 最近接触了一些飞思卡尔单片机,也算是初学吧,……你会c语言就可以了,首先你得看明白芯片的资料,学习这款芯片的最基本的东西,比如系统时钟该怎么设定,IO口怎么用,以及里面的寄存器该如何设定等等,这些都得弄明白.另外,就是学习模块,如:pwm模块,ECT模块等等,学习时可以看别人的程序,做到看的懂,会用就行.最后,祝你学习快乐.
#19365201178#
求教 求教 第一次做飞思卡尔智能车, PID究竟怎么设置参数? 根据什么现象调节参数? - ******
#那包# 参数整定找最佳,从小到大顺序查 先是比例后积分,最后再把微分加 曲线振荡很频繁,比例度盘要放大 曲线漂浮绕大湾,比例度盘往小扳 曲线偏离回复慢,积分时间往下降 曲线波动周期长,积分时间再加长 曲线振荡频率快,先把微分降下来 动差大来波动慢,微分时间应加长 理想曲线两个波,前高后低四比一 一看二调多分析,调节质量不会低
#19365201178#
参加飞思卡尔智能车比赛光电组需要学会单片机的哪些功 - ******
#那包# DMA, AD,IO(液晶,按键,灯),中断,输入捕获(或正交解码),pwm调制,串口.(最最基础的)还有一些知识,pid, 图像处理, 开放性思维 等等
#19365201178#
飞思卡尔智能车怎么用蓝牙改变量值 - ******
#那包# 首先能用蓝牙传输数据,再者在单片机程序里,加入根据接受到的数据重新给变量赋值 OK
#19365201178#
飞思卡尔智能车光电测速传感器怎么连接stm32 - ******
#那包# 你说的是光电编码器把,看你是多少相的,单相的话,任意接一个定时器的tim通道就可以了,你可以设置外部中断、捕获、计数等方式来测速. 要是是两相的话,AB相需要接STM32任意通用定时器的CH1和CH2通道,设置为正交解码的方式,可以计算得到更精确的速度、位置.也就是说你反转,计数器递减,正转自动递加,在配合溢出中断,可以准确的知道编码器转了多少转(带方向).