以前在网上看到不少的朋友都在发一些关于平衡车的帖子,也看到了他们的一些作品视屏,心里顿时好生羡慕,经过长时间的学习,最近最终还是下定决心自己也准备入手做一个平衡小车!
小车是一STM32作为主控MCU,电源采用12V电池(3节3.7V电池串联),传感器采用MPU6050,远程控制数据传输使用HC-05蓝牙模块,电机驱动采用TB6612FNG。
从正式采购大样到目前也已经有半个月时间,但是因为工作原因很多东西任然没有完成,在此大概讲解一下相关的控制,具体的将在后期进行进一步的讲解。
主控:该控制器是使用两片STM32作为主控,大家肯定会觉得有点浪费(其实我也是这么觉得的),我最终之所以使用是因为使用两块MCU是因为方便进行学习,其中一块mcu作为姿态解算,另一块mcu作为控制,这样子很多东西分开来,作为入门者来说就把整个系统简单化起来,我最开始只需要进行姿态的解算,对于姿态解算我采用对DMP的移植,之所以选用是因为在网上有很多的移植方法,我只需要根据大家的步骤进行工程的建立,然后修改MPU6050的IIC接口,然后将解算得到的数据串口输出。这样其中一块mcu的编程也就结束了!是不是觉得很轻松呀!另外一块芯片的东东还在进行中……现在就不做介绍了!
电源:电池采用12V总输出,然后通过LM2596转为5V作为电机编码盘的电力供给,1117转为3.3V作为STM32主控和传感器电力供给。
控制:在这里我采用了蓝牙模块,作为目前来说蓝牙对于智能手机来说是必备的功能,所以使用蓝牙模块就可以很轻松红的将手机作为遥控器使用,而且蓝牙模块采用串口通信,使用起来对于stm32来说毫无压力。
电机驱动:TB6612FNG芯片和L298N一样使用是非常简单的!对于该芯片的数据输入只需要控制两条数据线的高低电频和一条线的PWM就能够控制一个电机,而该芯片恰恰能够控制两个电机,所以只需要6条线便能够完成两个电机的驱动。
电机:对于电机来说就显得有点稍贵了,我购买的是带有编码器的电机,他们够输出电机的转速,通过mcu的数据读取与解算,能够得出转速和方向。
因为小车还没有完成我就暂且先不分享太多的东西,先给大家看一看编码读取的部分代码吧,其他的将在后期进一步分享!
void EXTI3_IRQHandler(void){ if(EXTI_GetITStatus(EXTI_Line3) != RESET){ if(PA15In == 1){ iCount_L--; //左轮计数减1 } else{ iCount_L++; //左轮计数加1 } EXTI_ClearITPendingBit(EXTI_Line3); } } void EXTI9_5_IRQHandler(void){ if(EXTI_GetITStatus(EXTI_Line5) != RESET){ if(PB4In == 1){ iCount_R++; //右轮计数加1 } else{ iCount_R--; //右轮计数减1 } //清除事件中断挂起位 EXTI_ClearITPendingBit(EXTI_Line5); } }
创建讨论帖子
登录 后参与评论