欢迎来到天天文库
浏览记录
ID:6603245
大小:1.58 MB
页数:53页
时间:2018-01-20
《xs128平衡车课程设计》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、(一)设计任务一、综述本次单片机原理的设计内容是,以sx128芯片作为核心处理芯片,利用加速度计和陀螺仪采集车模姿态,通过驱动电机提供动力,使两轮车可以自行调整姿态维持平衡不倒;SolidWorks机械模型二、设计内容1.电源系统分别稳出5v,3.3v,12v三种电压,供不同模块使用2.人机交互包含按键,oled液晶屏,蓝牙,sd卡,拨码开关,指示灯,蜂鸣器等电路用于提示车模运行状态3.驱动电路使用mos管和全桥驱动芯片驱动电机1.传感器使用ad模块读取加速度计和陀螺仪检测车模姿,并监测电池电压,脉冲累加器和光码盘检测车轮速度2.程序对应程序使各个模块相互配合完成设计任务
2、3.上位机将运行过程的数据存入sd卡,并用c#编写上位机,便于波形观察(一)设计说明一、功能模块图电源系统PC机XS128最小系统MOS管H桥驱动电路直流电机加速度计、陀螺仪光电码盘、对管按键,拨码开关液晶屏、蜂鸣器、LED灯SD卡蓝牙传感器电机驱动人机交互上位机一、硬件原理1.电源系统电池电压在充满到供电不足时电压约从8.4v变化至7.2v,并且不同模块需要的电压各不相同,故需使用稳压芯片稳出不同电压供各个模块使用用tps7350稳出5v给单片机,光电对管供电tps7333稳出3.3v给加速度计、陀螺仪和液晶屏供电,0512模块稳出12v给全桥驱动芯片供电tps7350
3、tps73330512模块1.驱动电路驱动电路使用全桥驱动芯片hip4082、MOS管,该芯片用12v供电,下半桥直接驱动,上半桥用二极管和自举电容驱动。Hip4082全桥驱动为防止驱动电路反冲烧坏单片机,在驱动电路和单片机之间加三态门74hc244隔离74hc2441.人机交互按键,用于配合液晶屏使用,拨码开关用于设置系统不同运行状态Led灯和蜂鸣器用于监测运行状态12864oled液晶屏用于显示各个参数,IO口模拟spi协议通信,仅需留出插槽,去耦电容和限流电阻(12864在3.3v工作,而单片机IO是5v);oled1.PC机交互SD卡用spi协议通信SD卡蓝牙模块
4、比较简单,只需留出sci接口2.传感器光电码盘产生两路相位相差90度的脉冲信号,正常只需数一路脉冲数就能换算转速,但如果想要知道正反转则需要对两路信号正交解码,由于xs128只有T7口一个脉冲累加器,没有正交解码功能,故需要外加D触发器CD4013检测两路正交信号识别正反转。CD4013加速度计和陀螺仪只需留出接口1.单片机系统板一、PCB图主控板驱动板一、软件流程图SD卡存储主函数初始化是否成功蜂鸣器系统LED系统蜂鸣器系统SD卡缓存以满蓝牙发送1msPIT定时中断传感器采样加速度计陀螺仪融合PWM控制填充SD卡缓存区一、上位机(一)核心源程序一、Main.c文件#in
5、clude"include.h"externunsignedcharoled_flag;intpwm;intleft_speed;voidmain(void){DisableInterrupts;if(initial_all()==0)//检测初始化是否成功{for(;;){}}EnableInterrupts;for(;;){led_control();//led信号灯控制if(oled_flag==1){display_menu();//oled显示}//buzzer_short(3);if(buff_full_flag==1)//当前缓存已满是启动存储{buff_f
6、ull_flag=0;save_sd();}WirelessSerial(acc_ad,real_angle,left_speed,pwm);//蓝牙发送}}//=========================================================================//函数名:interrupt//功能描述:PIT中断//////输入参数:无//输出参数:无//返回值:无//==========================================================================voidi
7、nterrupt66PIT(void){PITTF_PTF0=1;//清中断标志位start_count();//时间测量开始left_speed=left_speed_get();asmple_all_channel();acc_angle=acc_volt_to_deg(acc_ad);///加速度计采集转换gyro_deg_1ms=gyro_volt_to_degs(gyro_ad);//陀螺仪采集转换real_angle=real_angle_get(acc_angle,real_angle,gyro_deg_1ms)
此文档下载收益归作者所有