可以将车模的速度分解为三个速度,X方向的速度,Y方向的速度和旋转速度。转向的速度主要是控制车模的旋转速度,通过轮子的差动转向,来实现车模的旋转,从而进行方向的变换,这就是主要的思路。方向的控制也是使用的串级PID,将图像环和角速度环进行串联,图像环是使用图像实际像点Xo和测得的理想像点Xi的偏差作为外环的输入,进行PD运算,然后将输出Wi和测得的角速度Wo的偏差内环角速度环的输入,进行PD运算,将输出作为转向速度。其运算结构和电机的串级控制如出一辙,结构图如图9.37所示。相较于速度串级控制的结构,方向控制除了控制的量变化之外,还将积分器替换为微分器。因为方向的控制对于稳态误差要求没那么高,但对响应速度要求很高。
图9.37 电流速度串级PID
角速度是使用陀螺仪来测量的,陀螺仪通信方式为SPI通信,使用GPIO口软件模拟SPI通信的,SPI以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,单向传输时3根也可以,包括SDI(数据输入)、SDO(数据输出)、SCK(时钟)、CS(片选)。主从连接关系见图9.38。
①SDO —主设备数据输出,从设备数据输入 对应MOSI master output slave input。
②SDI—主设备数据输入,从设备数据输出 对应MISO master input slave output。
③SCLK—时钟信号,由主设备产生。
④CS—从设备使能信号,由主设备控制。
图9.38 SPI主从连接方式
SPI硬件连接之后,其收发时序图如图9.39所示。SPI是一个环形总线结构,由ss(cs)、SCLK、MOSI、MOSO构成,其时序其实很简单,主要是在SCLK的控制下,两个双向移位寄存器进行数据交换。
图9.39 SPI时序图(www.xing528.com)
假设8位寄存器装的是待发送的数据10101010,上升沿发送、下降沿接收、高位先发送。那么第一个上升沿来的时候数据将会是MOSO=1;寄存器=0101010x。下降沿到来的时候,MOSI上的电平将锁存到寄存器中,那么这时寄存器=0101010MOSI,8个时钟脉冲以后,两个寄存器的内容互相交换一次,这样就完成一个SPI时序。
陀螺仪可以测量空间三个方向的角速度,而在对角速度环的控制中,主要使用的是垂直方向Z轴的角速度。陀螺仪返回给单片机的参数不直接是角速度,而是需要进行转换的二进制数,其转换公式为式(9.1)。
其中Tget为获取的值,Tzero为陀螺仪的零漂,其获取方式为取陀螺仪静止不动时采5000组的角速度的平均值,0.030 517 57为陀螺仪的转化系数,这个系数不同则陀螺仪取值不同,获取方式为查阅芯片手册。
SPI使用的是4个GPIO口模拟的软件SPI,其具体实现程序和陀螺仪初始化程序如下:
虽然转向机速度控制都是串级PID的控制,但两者之间还是有本质区别。对于H车模的转向控制,还有更优的控制方法,就是在串级PID中,引入P参数内容变化,在车模低速运行的时候效果并不明显,但在高速运行的时候效果十分显著。具体实现算法就是将内环速度输出乘上一个常数K,再引用一个参数S来区分高速和低速,S的取值根据实际情况通过反复实验确定,因为它与轮胎的摩擦力,地面摩擦力有关,根据实验室的情况,S取值为1.8 m/s,这个值需要换算后再用,换算方法为:速度=1个PIT的脉冲数(1 m的脉冲数×PIT周期),1.8 m/s换算后为180,K和S的关系如式9.2所示。
其中M为当前测得的实际直线速度的值。
将四个车轮的实际速度加起来取平均就可以得到当前实际直线速度的值,因为转向速度是差速,前面两个车轮和后面两个车轮的转向速度大小相等,符号相反,加起来就可以抵消,四个车轮子取平均值后就是一个比较可靠的实际直线速度。K参数确定的具体程序如下:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。