小车控制应用
- 两轮小车使用stm32f103zet6控制,使用freertos系统管理多个任务,整体构为:
方向控制
-
方向控制即为控制H桥导通方向,只需要控制两个IO输入输出,10,01,为前或者后方向(根据电机安装方向),00和11为惯性和刹车状态。 -
方向控制可以使用一个freertos任务。通过消息队列传输单个变量完成其他任务对小车方向的改变(如WIFI控制小车方向)
编码器采集电机转速
-
电机采用霍尔编码器,采用32定时器复用中的编码器模式采集,32编码器模式以及倍频模式原理和模式网上也有很多资料,可以自己查询相关资料。关于编码器模式代码,可以参考 https://blog.csdn.net/qq_42812330/article/details/88726680 -
计算电机转速,距离以及方向:编码定时器中断中,计算溢出计数Overflow_count 然后通过单位时间的定时器中收集两个编码器定时器中的溢出计数Overflow_count 和上一次的溢出计数 Last_count计算单位时间内产生的脉冲数量。由此可以根据下图中公式计算出速度和距离。 -
这里建议将倍频参数,编码器线束,电机减速比先宏定义了(方便后续再更改电机时修改代码以及更改小车车轮尺寸大小),然后在freertos创建任务时候,先计算各个公式系数(减少在中断中的计算量)。在计算完成所有结果后通过传输结构体指针,将速度、位移、以及方向信息传递给其他freertos任务应用。
PID
- 这里速度设定使用QT上位机设置,后续会写上位机开发过程。。。
- 网上PID相关教程相当之多,这里不多说。
WIFI
- 小车串口使用uart->wifi模块,这里使用的有人模块,这里可以选用如esp8266等
- 小车串口2使用DMA接收和发送(freertos中采用这种方式更为适合),网上freertos+串口DMA教程也有很多,这里不多提。
- WIFI采用TCP连接。应用通讯协议为自拟定协议。采用协议传输所有的小车信息和控制信息:
MPU6050
ROS
|