第一次 0 4.7 10.63 0 0 0 第二次 10 4.5 11.11 0.8 12.5 2.1 第三次 20 4.9 10.20 1.8 11.1 1.9 由测试结果可见,本小车基本达到题目的基本要求和发挥部分要求。 4.误差分析
小车有时并不能完全直线行走,略微有点跑偏,经分析原因有两个: 1)小车是新买的,齿轮磨合情况不同,导致两个轮子速度不一致。
2)因为小车上装置比较多,导致重心偏移,轮子受到的阻力不同,导致小车跑偏。
七.设计总结
本作品以两片STC 12C5A60S2增强型51单片机为核心部件,通过个接收站收到音频信号的响应时间不同,配合一套完整的程序,实现了小车的精确定位。在设计中,我们尽量采用低功耗器件,力求硬件电路的经济性和精简性,充分发挥软件控制灵活方便的特点,来满足设计要求。
八.参考文献
[1]全国大学生电子设计竞赛组委会. 全国大学生电子设计竞赛获奖作品选编[M] .北京理工大学出版社,2007
[2]黄开胜. 学做智能车——挑战“飞思卡尔”杯[M] .北京航天航空大学出版社,2007 [3]万福君, 潘松峰.单片微机原理系统设计及应用[M] .合肥:中国科学技术大学出版社,2001
[4] (日)森政弘,(日)铃木泰博.机器人竞赛指南 [M] .北京:科学出版社,2002 [5] 王灏,毛宗源.机器人的智能控制方法[M] .北京:国际工业出版社,2002
[6] 张培仁,张志坚.基于16/32位DSP机器人控制系统设计与实现[M] .北京:清华大学出版社
九. 附录
附1:部分元器件清单
芯片:STC 12C5A60S2*2 NEC_MMC*1 L293*1 74LHC04*1, LM386*3 LM567*3 TP521*1 nFR24L01无线通信模块*2
MIC*3 喇叭*1 电阻电容若干 导线若干 单片机最小系统
附2:仪器设备清单
秒表 米尺 万用表 函数信号发生器 示波器
附3.:程序清单
/********************************************************************************
8
* FileName:carmotorSPI.C (be included in project fts-89c52.Uv2) *
* Brief Introduction:2009年全国大学生电子设计竞赛 本科组 题目B 中需要用到的对电机 控制芯片(C公司的MMC-1)的单片机控制程序。单片机采用STC 12C5A60S2芯片,接PWM或步进
电机波形产生芯片MMC-1,通过L293驱动芯片驱动直流电机。 *
* Author:吴 飞 *
* Date:2009.9.2~2009.5 *
* Edition: *
* note:STC12C5A60S2/AD/PWM系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,
是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。
内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S),针对电机控制,强干扰场合。
所以本系统中的延时程序 delay_10us(uchar n); delay_ms(uint n);延时时间只有设定值的1/10左右!!!!
********************************************************************************/
//#include
#include
// for the intended STC12C5A60S2 derivative */ #include
#define uchar unsigned char #define uint unsigned int
//========================================== //定义空指令
#define _Nop() _nop_()
//========================================== //端口定义
//uchar temp1,temp2; sbit SPISO=P1^3; sbit MOSI=P1^4;
9
sbit SPICLK=P1^5;
//变量定义 uchar motor;
//常量定义
#define motorL 0x50 //小车左轮直流电机受MMC电机通道0(CH1DCPWM及CH1DCDIR) //0x50为该通道命令寄存器地址 #define motorR 0x54 //小车右轮直流电机受MMC电机通道1(CH2DCPWM及CH2DCDIR) //0x50为该通道命令寄存器地址 #define dirfront 1 #define dirback 0
//=========================================== //函数声明
void WT_BYT_SPI(unsigned char cByte);
void drivemotor(uchar motor,uchar speed,bit dir); void stopmotor(uchar motor); void delay_10us(uchar n); void delay_ms(uint n);
//void SPI_Write(char dat);
//unsigned char RD_BYT_SPI(void);
//void WT_WORD_SPI(unsigned int cWord);
void main() { EA=0; //关中断 delay_ms(10); //等待系统及MMC-1初始化 while(1) { drivemotor(motorL,0x1F,dirfront); //for testing delay_ms(30000); stopmotor(motorL); //for testing delay_ms(30000); drivemotor(motorL,0x1F,dirback); //for testing delay_ms(30000); stopmotor(motorL); //for testing delay_ms(30000); }
10
}
/********************************************************************* *Function Name: drivemotor *Function description: 驱动电机运转.可控制且必须依次正确填写以下输入参数。 *Parameter: IN: motor:电机编号,取值范围---motorL、motorR; speed:电机转速等级,取值范围从慢到快为---0xff至0x0,注意顺序; dir:电机转动方向,取值范围---dirfront、dirback. OUT: void
**********************************************************************/
void drivemotor(uchar motor,uchar speed,bit dir) { uchar command; if (dir==dirfront) {command=0xc0;} else {command=0xe0;} WT_BYT_SPI(motor+3); WT_BYT_SPI(speed); WT_BYT_SPI(motor); WT_BYT_SPI(command); }
/********************************************************************* *Function Name: stopmotor *Function description: 停止电机运转.可控制且必须依次正确填写要停止的电机编号。 *Parameter: IN: motor:电机编号,取值范围---motorL、motorR; OUT: void
**********************************************************************/
void stopmotor(uchar motor) { WT_BYT_SPI(motor); WT_BYT_SPI(0x40); }
11
/********************************************************************* *Function Name: WT_BYT_SPI *Function description: 向SPI总线写出一个字节。 *Parameter: IN: cByte:写出的内容,取值范围---0x0至0xff; OUT: void
**********************************************************************/
void WT_BYT_SPI(unsigned char cByte) { unsigned char i; SPICLK=0; delay_10us(10); for(i=0;i<8;i++) { if((cByte&0x80)==0) MOSI=0; else MOSI=1; delay_10us(10); //根据MMC-1用户手册sck频率 : 500HZ ~ 100KHZ 即周期0.2ms~10us
//注意定时时间约为1/10 的10*10us 即10us,周期为20us9 SPICLK=1; delay_10us(10); SPICLK=0; cByte<<=1; } }
/********************************************************************* *Function Name: delay_10us *Function description: 1.delay n*10us. *Parameter: IN: void OUT: void
**********************************************************************/ void delay_10us(uchar n) {do
{_nop_(); _nop_(); _nop_(); _nop_();
12
_nop_(); } while(--n); }
/********************************************************************* *Function Name: delay_ms *Function description: 1.delay n*1ms function. *Parameter: IN: void OUT: void
**********************************************************************/ void delay_ms(uint n) {do delay_10us(131); while(--n); // WDI=~WDI;
十、结束语
通过本次大赛,我们学到了很多在课本中学不到的知识,在实验室的实践经
验让我们对单片机这门课有了更深的了解,同时也更快的掌握了单片机的运用。声音导引系统就是通过两个单片机控制单元之间的无线通信来完成控制要求的。这就更加体现了单片机控制的重要性。相信单片机在控制领域中将会有更加广阔的应用前景。由于比赛时间和现场条件的限制,发挥部分基本完成,有待于日后完善。
13
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库整理声音引导系统论文(含电路)(3)在线全文阅读。
相关推荐: