2021-08-22 16:18:33 索炜达电子 430
项目编号:E430
文件大小:17M
源码说明:带中文注释
开发环境:C编译器
简要概述
平衡车代码+MATLAB上位机代码 本来是想做一个小车只需采集并发送数据,接收并执行simulink的命令,用simulink来做姿态解算和PID平衡控制的项目,但是在调试了三天之后以失败告终,主要原因是蓝牙模块的传输速度太慢了,所以就转而求其次,用matlab写了个上位机做姿态显示并且发送一些指令控制小车前进后退,当然也可以用手机蓝牙串口发送指令来控制。
软件架构
1.上位机的代码和exe程序在MATLABGUI文件夹。
2.平衡小车代码在balance_car文件夹。
相关说明
1.陀螺仪X轴正方向为小车的正前方。
2.我的主控芯片是STM32F103C8T6。
3.电机驱动模块用的L298N。
4.OLED使用的是4线SPI通讯协议,3线SPI应该亦可以。
5.PID参数我没有认真调,最近比较忙调了一个上午感觉能用就没再调了,如果车体跟我一样的话不用调或者微调就可以跑起来。
6.主控板我是参照我画的原理图用洞洞板搭的,有兴趣的小伙伴可以画板制作PCB,如果你是L298N的话请直接使用我的管脚连接方案,这也是我看手册规划出来的,毕竟在程序里面改管脚是比较麻烦的而且容易出现BUG。
7.没有做航向角的原因是MPU6050没有磁力计,计算出来的航向角偏移的很厉害,而且对于平衡车来说没有航向角对控制没有影响,而且好的磁力计不便宜。有兴趣的话可以加个磁力计,并且MPU也支持外扩磁力计很方便,这样的话就可以做惯性导航。
8.由于小车做了拿起保护,必须要将小车平放保持Pitch和Roll在0度左右两秒才能启动。
硬件原理图
目录│文件列表:
└ balancecar
├ balancecar_code
│ │ keilkill.bat
│ ├ MiniBalance
│ │ ├ CONTROL
│ │ │ │ control.c
│ │ │ └ control.h
│ │ ├ DataScope_DP
│ │ │ │ DataScope_DP.C
│ │ │ └ DataScope_DP.h
│ │ ├ DMP
│ │ │ │ dmpKey.h
│ │ │ │ dmpmap.h
│ │ │ │ inv_mpu.c
│ │ │ │ inv_mpu.h
│ │ │ │ inv_mpu_dmp_motion_driver.c
│ │ │ └ inv_mpu_dmp_motion_driver.h
│ │ ├ filter
│ │ │ │ filter.c
│ │ │ └ filter.h
│ │ ├ MPU6050
│ │ │ │ MPU6050.c
│ │ │ └ mpu6050.h
│ │ └ show
│ │ │ show.c
│ │ └ show.h
│ ├ MiniBalance_COER
│ │ │ core_cm3.c
│ │ │ core_cm3.h
│ │ └ startup_stm32f10x_md.s
│ ├ MiniBalance_HARDWARE
│ │ ├ ADC
│ │ │ │ adc.c
│ │ │ └ adc.h
│ │ ├ DataScope_DP
│ │ │ │ DataScope_DP.C
│ │ │ └ DataScope_DP.h
│ │ ├ DMP
│ │ │ │ dmpKey.h
│ │ │ │ dmpmap.h
│ │ │ │ inv_mpu.c
│ │ │ │ inv_mpu.h
│ │ │ │ inv_mpu_dmp_motion_driver.c
│ │ │ └ inv_mpu_dmp_motion_driver.h
│ │ ├ ENCODER
│ │ │ │ encoder.c
│ │ │ └ encoder.h
│ │ ├ EXTI
│ │ │ │ exti.c
│ │ │ └ exti.h
│ │ ├ IIC
│ │ │ │ IOI2C.c
│ │ │ └ IOI2C.h
│ │ ├ KEY
│ │ │ │ key.c
│ │ │ └ key.h
│ │ ├ LED
│ │ │ │ LED.C
│ │ │ └ LED.H
│ │ ├ MOTOR
│ │ │ │ motor.c
│ │ │ └ motor.h
│ │ ├ MPU6050
│ │ │ │ MPU6050.c
│ │ │ └ mpu6050.h
│ │ ├ MY_OLED
│ │ │ │ my_oled.c
│ │ │ └ my_oled.h
│ │ ├ OLED
│ │ │ │ oled.c
│ │ │ │ oled.h
│ │ │ └ oledfont.h
│ │ ├ STMFLASH
│ │ │ │ stmflash.c
│ │ │ └ stmflash.h
│ │ ├ TIMER
│ │ │ │ timer.c
│ │ │ └ timer.h
│ │ ├ USART2
│ │ │ │ usart2.c
│ │ │ └ usart2.h
│ │ └ USART3
│ │ │ usart3.c
│ │ └ usart3.h
│ ├ OBJ
│ │ │ adc.crf
│ │ │ adc.d
│ │ │ adc.o
│ │ │ control.crf
│ │ │ control.d
│ │ │ control.o
│ │ │ core_cm3.crf
│ │ │ core_cm3.d
│ │ │ core_cm3.o
│ │ │ datascope_dp.crf
│ │ │ datascope_dp.d
│ │ │ datascope_dp.o
│ │ │ delay.crf
│ │ │ delay.d
│ │ │ delay.o
│ │ │ encoder.crf
│ │ │ encoder.d
│ │ │ encoder.o
│ │ │ ExtDll.iex
│ │ │ exti.crf
│ │ │ exti.d
│ │ │ exti.o
│ │ │ filter.crf
│ │ │ filter.d
│ │ │ filter.o
│ │ │ inv_mpu.crf
│ │ │ inv_mpu.d
│ │ │ inv_mpu.o
│ │ │ inv_mpu_dmp_motion_driver.crf
│ │ │ inv_mpu_dmp_motion_driver.d
│ │ │ inv_mpu_dmp_motion_driver.o
│ │ │ ioi2c.crf
│ │ │ ioi2c.d
│ │ │ ioi2c.o
│ │ │ key.crf
│ │ │ key.d
│ │ │ key.o
│ │ │ led.crf
│ │ │ led.d
│ │ │ led.o
│ │ │ MiniBalance.axf
│ │ │ MiniBalance.build_log.htm
│ │ │ minibalance.crf
│ │ │ minibalance.d
│ │ │ MiniBalance.hex
│ │ │ MiniBalance.htm
│ │ │ MiniBalance.lnp
│ │ │ minibalance.o
│ │ │ MiniBalance.sct
│ │ │ MiniBalance_MiniBalance.dep
│ │ │ MiniBalance_sct.Bak
│ │ │ misc.crf
│ │ │ misc.d
│ │ │ misc.o
│ │ │ motor.crf
│ │ │ motor.d
│ │ │ motor.o
│ │ │ mpu6050.crf
│ │ │ mpu6050.d
│ │ │ mpu6050.o
│ │ │ my_oled.crf
│ │ │ my_oled.d
│ │ │ oled.crf
│ │ │ oled.d
│ │ │ oled.o
│ │ │ show.crf
│ │ │ show.d
│ │ │ show.o
│ │ │ startup_stm32f10x_md.d
│ │ │ startup_stm32f10x_md.o
│ │ │ stm32f10x_adc.crf
│ │ │ stm32f10x_adc.d
│ │ │ stm32f10x_adc.o
│ │ │ stm32f10x_bkp.crf
│ │ │ stm32f10x_bkp.d
│ │ │ stm32f10x_bkp.o
│ │ │ stm32f10x_can.crf
│ │ │ stm32f10x_can.d
│ │ │ stm32f10x_can.o
│ │ │ stm32f10x_cec.crf
│ │ │ stm32f10x_cec.d
│ │ │ stm32f10x_cec.o
│ │ │ stm32f10x_crc.crf
│ │ │ stm32f10x_crc.d
│ │ │ stm32f10x_crc.o
│ │ │ stm32f10x_dac.crf
│ │ │ stm32f10x_dac.d
│ │ │ stm32f10x_dac.o
│ │ │ stm32f10x_dbgmcu.crf
│ │ │ stm32f10x_dbgmcu.d
│ │ │ stm32f10x_dbgmcu.o
│ │ │ stm32f10x_dma.crf
│ │ │ stm32f10x_dma.d
│ │ │ stm32f10x_dma.o
│ │ │ stm32f10x_exti.crf
│ │ │ stm32f10x_exti.d
│ │ │ stm32f10x_exti.o
│ │ │ stm32f10x_flash.crf
│ │ │ stm32f10x_flash.d
│ │ │ stm32f10x_flash.o
│ │ │ stm32f10x_fsmc.crf
│ │ │ stm32f10x_fsmc.d
│ │ │ stm32f10x_fsmc.o
│ │ │ stm32f10x_gpio.crf
│ │ │ stm32f10x_gpio.d
│ │ │ stm32f10x_gpio.o
│ │ │ stm32f10x_i2c.crf
│ │ │ stm32f10x_i2c.d
│ │ │ stm32f10x_i2c.o
│ │ │ stm32f10x_it.crf
│ │ │ stm32f10x_it.d
│ │ │ stm32f10x_it.o
│ │ │ stm32f10x_iwdg.crf
│ │ │ stm32f10x_iwdg.d
│ │ │ stm32f10x_iwdg.o
│ │ │ stm32f10x_pwr.crf
│ │ │ stm32f10x_pwr.d
│ │ │ stm32f10x_pwr.o
│ │ │ stm32f10x_rcc.crf
│ │ │ stm32f10x_rcc.d
│ │ │ stm32f10x_rcc.o
│ │ │ stm32f10x_rtc.crf
│ │ │ stm32f10x_rtc.d
│ │ │ stm32f10x_rtc.o
│ │ │ stm32f10x_sdio.crf
│ │ │ stm32f10x_sdio.d
│ │ │ stm32f10x_sdio.o
│ │ │ stm32f10x_spi.crf
│ │ │ stm32f10x_spi.d
│ │ │ stm32f10x_spi.o
│ │ │ stm32f10x_tim.crf
│ │ │ stm32f10x_tim.d
│ │ │ stm32f10x_tim.o
│ │ │ stm32f10x_usart.crf
│ │ │ stm32f10x_usart.d
│ │ │ stm32f10x_usart.o
│ │ │ stm32f10x_wwdg.crf
│ │ │ stm32f10x_wwdg.d
│ │ │ stm32f10x_wwdg.o
│ │ │ stmflash.crf
│ │ │ stmflash.d
│ │ │ stmflash.o
│ │ │ sys.crf
│ │ │ sys.d
│ │ │ sys.o
│ │ │ system_stm32f10x.crf
│ │ │ system_stm32f10x.d
│ │ │ system_stm32f10x.o
│ │ │ timer.crf
│ │ │ timer.d
│ │ │ timer.o
│ │ │ usart.crf
│ │ │ usart.d
│ │ │ usart.o
│ │ │ usart2.crf
│ │ │ usart2.d
│ │ │ usart2.o
│ │ │ usart3.crf
│ │ │ usart3.d
│ │ └ usart3.o
│ ├ STM32F10x_FWLib
│ │ ├ inc
│ │ │ │ misc.h
│ │ │ │ stm32f10x_adc.h
│ │ │ │ stm32f10x_bkp.h
│ │ │ │ stm32f10x_can.h
│ │ │ │ stm32f10x_cec.h
│ │ │ │ stm32f10x_crc.h
│ │ │ │ stm32f10x_dac.h
│ │ │ │ stm32f10x_dbgmcu.h
│ │ │ │ stm32f10x_dma.h
│ │ │ │ stm32f10x_exti.h
│ │ │ │ stm32f10x_flash.h
│ │ │ │ stm32f10x_fsmc.h
│ │ │ │ stm32f10x_gpio.h
│ │ │ │ stm32f10x_i2c.h
│ │ │ │ stm32f10x_iwdg.h
│ │ │ │ stm32f10x_pwr.h
│ │ │ │ stm32f10x_rcc.h
│ │ │ │ stm32f10x_rtc.h
│ │ │ │ stm32f10x_sdio.h
│ │ │ │ stm32f10x_spi.h
│ │ │ │ stm32f10x_tim.h
│ │ │ │ stm32f10x_usart.h
│ │ │ └ stm32f10x_wwdg.h
│ │ └ src
│ │ │ misc.c
│ │ │ stm32f10x_adc.c
│ │ │ stm32f10x_bkp.c
│ │ │ stm32f10x_can.c
│ │ │ stm32f10x_cec.c
│ │ │ stm32f10x_crc.c
│ │ │ stm32f10x_dac.c
│ │ │ stm32f10x_dbgmcu.c
│ │ │ stm32f10x_dma.c
│ │ │ stm32f10x_exti.c
│ │ │ stm32f10x_flash.c
│ │ │ stm32f10x_fsmc.c
│ │ │ stm32f10x_gpio.c
│ │ │ stm32f10x_i2c.c
│ │ │ stm32f10x_iwdg.c
│ │ │ stm32f10x_pwr.c
│ │ │ stm32f10x_rcc.c
│ │ │ stm32f10x_rtc.c
│ │ │ stm32f10x_sdio.c
│ │ │ stm32f10x_spi.c
│ │ │ stm32f10x_tim.c
│ │ │ stm32f10x_usart.c
│ │ └ stm32f10x_wwdg.c
│ ├ SYSTEM
│ │ ├ delay
│ │ │ │ delay.c
│ │ │ └ delay.h
│ │ ├ sys
│ │ │ │ sys.c
│ │ │ └ sys.h
│ │ └ usart
│ │ │ usart.c
│ │ └ usart.h
│ └ USER
│ │ EventRecorderStub.scvd
│ │ MiniBalance.c
│ │ MiniBalance.map
│ │ MiniBalance.uvgui.passoni
│ │ MiniBalance.uvguix.25521
│ │ MiniBalance.uvgui_passoni.bak
│ │ MiniBalance.uvopt
│ │ MiniBalance.uvoptx
│ │ MiniBalance.uvproj.saved_uv4
│ │ MiniBalance.uvprojx
│ │ MiniBalance_MiniBalance.dep
│ │ MiniBalance_uvopt.bak
│ │ MiniBalance_uvproj.bak
│ │ startup_stm32f10x_md.lst
│ │ stm32f10x.h
│ │ stm32f10x_conf.h
│ │ stm32f10x_it.c
│ │ stm32f10x_it.h
│ │ system_stm32f10x.c
│ │ system_stm32f10x.h
│ ├ DebugConfig
│ │ └ MiniBalance_STM32F103C8_1.0.0.dbgconf
│ └ RTE
│ └ _MiniBalance
│ └ RTE_Components.h
├ MATLABGUI
│ │ callback.m
│ │ cargui2.fig
│ │ cargui2.m
│ │ cargui2.prj
│ │ readme
│ ├ cargui2
│ │ │ PackagingLog.html
│ │ ├ for_redistribution
│ │ │ └ MyAppInstaller_web.exe
│ │ ├ for_redistribution_files_only
│ │ │ │ cargui2.exe
│ │ │ │ icon.ico
│ │ │ │ readme.txt
│ │ │ └ splash.png
│ │ └ for_testing
│ │ │ cargui2.exe
│ │ │ mccExcludedFiles.log
│ │ │ readme.txt
│ │ │ requiredMCRProducts.txt
│ │ └ splash.png
│ └ cargui2_resources
│ │ icon.ico
│ │ icon_16.png
│ │ icon_24.png
│ │ icon_32.png
│ └ icon_48.png
└ png
│ IMG_20210712_110320.jpg
│ IMG_20210712_110326.jpg
│ QQ截图20210712111616.png
│ sch.png
└ 航天 地球 航拍照片.jpg