作品亮点:
机械结构:采用目前市场上广泛应用的圆盘形和辊刷结构,采用全亚克力材料,在减少重量的同时,能够较好地保证耐碰撞能力。
硬件设计:传感器电路,驱动电路以及主控芯片均集成在内部,采用直流减速电机驱动,12V锂电池供电。
软件设计:,11
作品说明:
[align=left]一、 总体构架设计[/align][align=left]采用stm32为主控板的芯片,稳压芯片采用TPS76850,驱动芯片采用L298N,避障传感器采用hc-sr04超声波模块以及红外模块,编码器采用16线光电码盘。[/align]
[align=left][media=swf,500,375]http://player.youku.com/player.php/sid/XMTI2NjY0MDYwOA==/v.swf[/media][/align][align=left]若视频无法查看请点击:[url=http://v.youku.com/v_show/id_XMTI2NjY0MDYwOA==.html?from=s1.8-1-1.2]http://v.youku.com/v_show/id_XMTI2NjY0MDYwOA==.html?from=s1.8-1-1.2[/url][/align][align=left]二、 软件详解[/align][align=left]部分程序[/align][align=left]#include "includes.h"[/align][align=left]/* [/align][align=left] * 函数名:main[/align][align=left] * 描述 : 主函数[/align][align=left] * 输入 :无[/align][align=left] * 输出 : 无[/align][align=left] */[/align][align=left] //要写入到STM32 FLASH的字符串数组[/align][align=left]u8 mode=0;//机器人模式[/align][align=left]u8 key=0,coder_read_flag=0;//编码器读取标志[/align][align=left]struct DTIME *DTime={0};[/align][align=left]struct DIS_PARA *dis_para={0};[/align][align=left]struct ULTRONIC *ultronic={0};[/align][align=left]struct MPU6050 *mpu6050={0};[/align][align=left]/*************************[/align][align=left]函数名称:void init(void)[/align][align=left]功能: 硬件初始化[/align][align=left]参数 无[/align][align=left]输出 无[/align][align=left]*************************/[/align][align=left]void init(void)[/align][align=left]{ [/align][align=left] DTime=(struct DTIME*)malloc(sizeof(struct DTIME));[/align][align=left] dis_para=(struct DIS_PARA*)malloc(sizeof(struct DIS_PARA));[/align][align=left] ultronic=(struct ULTRONIC*)malloc(sizeof(struct ULTRONIC));[/align][align=left] mpu6050=(struct MPU6050*)malloc(sizeof(struct MPU6050));[/align][align=left] delay_init();[/align][align=left] NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级[/align][align=left] para_init(DTime);//参数初始化[/align][align=left] key_init();[/align][align=left] oled_init();//液晶屏初始化[/align][align=left] RTC_Init(2014,11,25,22,44,0); //RTC初始化,参数为现在年月日时间[/align][align=left] motor_init();//电机初始化,四路PWM控制[/align][align=left] ir_init();//红外避障与防跌落[/align][align=left] ultronic_init();//捕获初始化,还未给触发信号[/align][align=left] encode_init();//编码初始化[/align][align=left]}[/align][align=left]#if MODE==APPLY[/align][align=left]int main(void)[/align][align=left]{[/align][align=left] init();//所有硬件初始化[/align][align=left] if(mode==TIME_MODE)//判断是否为定时模式下启动[/align][align=left] {[/align][align=left] DTIME_Read(DTime);//从FLASH中读取DTIME[/align][align=left] rtc_nearweek(DTime);//修改RTC闹钟计数器值为下一预定时间[/align][align=left] }[/align][align=left] else//不是待机唤醒则进入按键控制界面[/align][align=left] {[/align][align=left] while(!mode)[/align][align=left] {[/align][align=left] mode=key_mode(DTime);//等待用户选择模式[/align][align=left] }[/align][align=left] }[/align][align=left] ultronic_trig();//超声波信号触发[/align][align=left] TIM2_Timer_Init(10,72);//10US定时器[/align][align=left] while(1)[/align][align=left] { [/align][align=left] if(DTime->Set_seconds>DTime->seconds)//时间到[/align][align=left] {[/align][align=left] stop();//关机[/align][align=left] }[/align][align=left] coder_read_flag=encode_read(dis_para);//编码器读取[/align][align=left] if(coder_read_flag)//更新编码器距离后控制一次[/align][align=left] { [/align][align=left] //show_para(ultronic,dis_para);//显示参数 [/align][align=left] road_judge(ultronic,dis_para);//判断道路,“回”字形[/align][align=left] danger_happen(ultronic,dis_para);//判断是否发生危险[/align][align=left] control_car(dis_para->turn_way);//控制车体[/align][align=left] }[/align][align=left] }[/align][align=left]}[/align][align=left]#endif[/align]