xs128平衡车课程设计精选.docx

  1. 1、本文档共53页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
xs128平衡车课程设计精选

设计任务综述本次单片机原理的设计内容是,以sx128芯片作为核心处理芯片,利用加速度计和陀螺仪采集车模姿态,通过驱动电机提供动力,使两轮车可以自行调整姿态维持平衡不倒;SolidWorks 机械模型设计内容电源系统分别稳出5v,3.3v,12v 三种电压,供不同模块使用人机交互包含按键,oled液晶屏,蓝牙,sd卡,拨码开关,指示灯,蜂鸣器等电路用于提示车模运行状态驱动电路使用mos管和全桥驱动芯片驱动电机传感器使用ad模块读取加速度计和陀螺仪检测车模姿,并监测电池电压,脉冲累加器和光码盘检测车轮速度程序对应程序使各个模块相互配合完成设计任务上位机将运行过程的数据存入sd卡,并用c#编写上位机,便于波形观察设计说明功能模块图硬件原理电源系统电池电压在充满到供电不足时电压约从8.4v变化至7.2v,并且不同模块需要的电压各不相同,故需使用稳压芯片稳出不同电压供各个模块使用用tps7350稳出5v给单片机,光电对管供电 tps7333稳出3.3v给加速度计、陀螺仪和液晶屏供电,0512模块稳出12v给全桥驱动芯片供电tps7350tp块驱动电路驱动电路使用全桥驱动芯片hip4082、MOS管,该芯片用12v供电,下半桥直接驱动,上半桥用二极管和自举电容驱动。Hip4082全桥驱动为防止驱动电路反冲烧坏单片机,在驱动电路和单片机之间加三态门74hc244隔离74hc244人机交互按键,用于配合液晶屏使用,拨码开关用于设置系统不同运行状态Led灯和蜂鸣器用于监测运行状态12864 oled液晶屏用于显示各个参数,IO口模拟spi协议通信,仅需留出插槽,去耦电容和限流电阻(12864在3.3v工作,而单片机IO是5v);oledPC机交互SD卡用spi协议通信SD卡蓝牙模块比较简单,只需留出sci接口传感器光电码盘产生两路相位相差90度的脉冲信号,正常只需数一路脉冲数就能换算转速,但如果想要知道正反转则需要对两路信号正交解码,由于xs128只有T7口一个脉冲累加器,没有正交解码功能,故需要外加D触发器CD4013检测两路正交信号识别正反转。CD4013加速度计和陀螺仪只需留出接口单片机系统板PCB图主控板驱动板软件流程图上位机核心源程序Main.c文件#include include.hextern unsigned char oled_flag;int pwm;int left_speed;void main(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_full_flag = 0; save_sd(); } WirelessSerial(acc_ad,real_angle,left_speed,pwm); //蓝牙发送 } }//=========================================================================//函数名 : interrupt//功能描述: PIT中断// // //输入参数: 无//输出参数: 无//返回值 : 无//==========================================================================void interrupt 66 PIT(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 = r

文档评论(0)

feixiang2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档