论文部分内容阅读
摘 要:介绍了一种基于nRF905的智能车无线遥控系统的实现方案。系统利用16位单片机MC9S12XS128作为核心处理芯片,光电编码器作为速度传感元件,MC33886作为直流电机的驱动芯片,通过nRF905无线控制收发模块来控制智能车的速度与方向;系统采用了增量型PID控制与模糊控制来实现智能车的闭环控制,以提高智能车的稳定性及快速性;通过RS232串口,可以在PC机上对智能车进行远程控制。
关键词:智能小车 MC9S12XS128 PID控制 nRF905
中图分类号:TP2 文献标识码:A 文章编号:1007-3973(2011)012-094-03
智能车已经在工业、农业、医疗、科研、国防及服务业等行业得到了一定的应用,特别是在军事领域的侦查、巡逻、战场运输、扫雷以及艰苦工作环境中的信息采集等众多方面,智能车发挥着重要的作用。本系统主要是通过nRF905无线模块将智能车行驶过程中的各种状态信息发送给上位机,上位机将所发来的信息进行实时处理之后,再对智能车进行控制,从而实现PC对智能车的远程控制。
1 系统的硬件设计
1.1 系统的硬件总体结构
如图1所示,整个系统硬件结构主要由飞思卡尔车模、电源模块、MC9S12XS128、C8051F340單片机、光电编码器、LCD1602液晶显示屏、nRF905和PC组成。采用嵌入式程序设计方法,在PC机上将控制指令通过串口发送给C8051F340,由C8051F340的SPI口将控制指令写到无线芯片的发射寄存器内,通过nRF905无线模块将数据发射出去。系统的控制模块如图2所示,在接收端nRF905将接受的数据通过SPI口写入MC9S12XS128处理器,MC9S12XS128通过内部A/D采集光电编码器产生的脉冲信号,与接受到的控制指令进行比较处理,产生两个独立的占空比可调的PWM波形,用于驱动舵机和电机模块,实现对智能车速度与方向的控制,利用液晶模块可显示智能车当前的速度与所行驶的路程。除此之外,还可以通过按键来发送控制指令,实现智能车的远程控制。(见图1、图2)
1.2 MC9S12XS128微控制器简介
MC9S12XS128微控制器采用了增强型16位S12处理器,内部有8KB的RAM, 2KB 的EEPROM, 128KB的FLASH,外部晶振16M,通过内部PLL可得40M总线时钟。有8路独立的PWM,16路12位A/D,有控制局域网模块的CAN总线,支持SPI、SCI、I2C串口通讯模式,其性能能够满足本设计的需求,该器件具有良好的稳定性,外围电路简单,功能强大。同时它支持Freescale特有的背景调试模式(BDM),可以进行在线系统调试,使开发效率大大提高。
1.3 无线收发模块
nRF905是挪威Nordic VLSI公司推出的单片射频收发器,可工作在 433/868/915Mhz国际通用ISM频段,频道之间的转换时间为650us,GMSK/GFSK调制和解调;由于采用了DDS+PLL频率合成技术,频率稳定性好,灵敏度高,达到-100dBm;最大发射功率达+10dBm,数据传输速率可达100kbit/s。天线可采用PBC 环形天线或单端鞭状天线,在开阔地带传输距离最远可达1km以上。
nRF905有两种工作模式和两种节能模式,如表1 所示,分别为掉电模式、待机模式、Shock- Burst RX接收模式和Shock- Burst TX发送模式,这几种模式由外界CPU 通过控制nRF905 的3个引脚PWR_UP、 TRX_CE 和TX_EN的高低电平来决定。
2 系统的软件设计
无线控制智能小车主要由无线数据收发器nRF905、MCU、小车和液晶显示部分组成。无线数据收发器nRF905与MCU之间通过SPI进行通信,MC9S12XS128通过PID算法控制智能小车的速度与方向。因此,软件设计的重点是nRF905数据的收发和智能车的速度、方向控制,且都用C语言编写。
2.1 nRF905程序设计
2.1.1 nRF905数据的发送过程
当微控制器要发送数据时,将接收机的地址和发送数据通过SPI 接口传输给nRF905模块;微控制器设置TRX_CE和TX_EN管脚同时置为高电平,启动发送端的nRF905模块为发送模式。
发送端的nRF905模块发送过程包括射频寄存器开启,数据打包,数据包发送;当数据包发送结束时,数据发送完成管脚(DR管脚)会变成高电平;如果AUTO_RETRAN被设置为高,nRF905模块将连续地发送数据包,直到TRX_CE 被设置为低;TRX_CE被设置为低时,nRF905模块数据包发送过程结束并回到待机模式。
2.1.2 nRF905数据的接收过程
系统接受数据的工作流程如图4所示。首先,微控制器控制TRX_CE为高电平、TX_EN为低电平,nRF905模块进入接收模式。当nRF905模块检测到与接收频率相同的载波时,设置载波检测管脚(CD管脚)为高电平;当nRF905 模块接收到有效的地址时,设置地址匹配管脚(AM 管脚)为高电平;当一个正确的数据包接收完毕后,nRF905模块自动去掉数据包的字头、地址和CRC 校验码,然后将数据接受完成管脚置为高电平;微控制器将TRX_CE 设置为低电平;微控制器通过SPI 接口以一定的速率提取数据包中的有效接收数据;最后,当所有的有效数据接收完毕,微控制器控制nRF905模块数据接收完成管脚(DR管脚)和地址匹配管脚(AM管脚)为低电平;nRF905进入待机模式。
无论是发送端还是接受端,MCU都需要通过SPI配置nRF905,设定无线发送模块的发射频率、波段、发射功率、地址码、地址位数、数据位数和CRC。因为数据准备位DR关系到数据是否已经发送和接受完成,所以系统采用了边沿捕获中断来检测DR的电平变化,以保证nRF905发送和接受的实时性。nRF905具体的配置函数和边沿捕获中断函数如下:
/*---------------------nRF905配置函数--------------------*/
RFConfig RxTxConf =
{
10, //设置频道
0x6c, //CH_NO,配置频段在433MHZ
0x0c, //输出功率为10db,不重发,节电为正常模式
0x44, //地址宽度设置,为4字节
0x04,0x04, //接收发送有效数据长度为4字节
0xCC,0xCC,0xCC,0xCC, //接收地址
0x58, //CRC充许,8位CRC校验,外部时钟信号不使能,16M晶振
};
/*-------------------边沿捕获中断函数---------------------*/
void PJI_init(void)
{
DDRJ_DDRJ0=0;
PPSJ_PPSJ0=1; //中断边沿选择寄存器
PIEJ_PIEJ0=1; //开启中断
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 24 PORTJ_ISR(void)
{ unsigned char i;
RxPacket(); // 接受数据
PIFJ_PIFJ0=1; // 清标志位
}
2.2 控制程序设计
小车的控制是系统软件设计的核心之一,其控制主要体现在速度控制和角度控制方面。速度控制使用了经典的增量式PID算法,考虑到角度的模糊性,角度的控制,使用了角度偏差的线性控制。
2.2.1 速度控制
系统通过串口和无线模块nRF905给智能车发送速度控制指令,速度控制包括启动、加速、减速、停止。这里给出了一个简单的控制指令的形成策略,系统采用了1~128共128级调速,1表示PWM的占空比为0%,128表示PWM的占空比為100%。当PWM的占空比为0%时,小车停止;当PWM的占空比为100%时,小车全速行驶;当PWM的占空比增加时,小车加速;当PWM的占空比减少时,小车减速。为了避免智能车因速度过大而导致振荡或不能及时响应速度控制指令等现象,系统利用了增量式PID控制速度。增量式PID是指数字控制器输出控制量的增量△u(k),以下是增量式PID控制算法:
由(1)式可以看出,如果计算机控制系统采用恒定的采样周期T,一旦确定了A、B、C,再根据前后三次测量的偏差值,就可以求出控制量的增量△u(k)。如果T过大,系统会出现响应慢和智能车滞后的现象;如果T过小,系统会因MCU的A/D转换速度跟不上,出现采集信号失真的现象。考虑到智能车的响应速度和扰动信号的周期,我们设定采样周期T=20ms,并采用临界比例法和经验法确定了增量式PID的三个参数值A=1,B=8,C=0.15。
速度控制的关键是如何建立PID返回的增量值与PWM占空比之间的关系,使得小车能够及时、稳定、准确的响应nRF905发来的速度控制指令,即让车模以最快的反应速度达到所期望的速度。车轮每前进一段距离时,光电编码器会产生一定数目的脉冲,MCU利用PIT对脉冲进行计数,由公式(2)便可计算出当前的速度值。
其中车轮的直径是52mm,Cur_Num是MCU采集到的脉冲数,差速器齿轮齿数是75,光电编码器齿轮齿数是26,光电编码器每转脉冲数为100,速度测量采样周期是20ms,车速的单位是m/s。程序每进入一次速度控制函数,首先读出与编码器连接的脉冲累加器计数寄存器 PACN的值,计算出当前速度,再与期望的速度比较,并将两速的差值送入PID函数计算出控制量的增量△u(k),如果△u(k)的值为负,表明小车车速快于期望值,需要减速;反之如果△u(k)的值为正,说明小车需要加速。加减速的急缓程度根据△u(k)值的大小决定。减速就是电机正转的PWM值递减,如果速度差很大,便要启动电机反转以迅速达到减速的目的。加速的过程是对电机正转 PWM累加的过程,但是要对 PWM 限定范围,加速的急缓只是每次累加的量大小不同。具体实现步骤如图3所示。
2.2.2 方向控制
智能车的方向控制决定了车体运行过程中的姿态,同时在很大程度上决定了在实际运行中的速度。舵机控制可以说是整个程序的关键部分,舵机控制必须具备响应时间短,稳态误差小等优点。考虑到角度的模糊性,我们使用了角度偏差的线性控制,通过试验表明角度偏差的线性控制对被控对象的参数变化具有较强的鲁棒性。
系统利用信号脉宽进行舵机转向调节,其调节角度为+45€啊?45€埃婊穆龀蹇刂菩藕胖芷谖?0ms。舵机转向角度为0€笆保隹砦?.52ms,占空比为7.6%;舵机转向角度为-45€笆保隹砦?.070ms,占空比为5.35%;舵机转向角度为+45€笆保隹砦?.970ms,占空比为9.85%。为了更好的控制智能车的转向,系统采用了十六进制0x90~0xe9共90个等级作为角度调节。当上位机通过无线模块nRF905给智能车发送0x90指令时,智能车舵机顺时针旋转45€埃〕迪蛴易坏狈⑺?xBC指令时, 智能车舵机转向角度为0€埃〕抵毕咝惺唬坏狈⑺?xE9指令时, 智能车舵机逆时针旋转45€埃〕迪蜃笞坏狈⑺?x81时,智能车开始向后行驶,同时启动报警功能。
公式(3)给出了如何将无线模块nRF905接收到十六进制指令转换成舵机所需的脉宽,具体公式如下:
其中temp1为脉宽,初始值为1.52ms,nRF905RxBuf[0]是所接收到的十六进制数。
3实验结果分析
本系统可完成如下任务:(1)通过按键可以无线控制智能车的启动,加速,减速,转向,后退,停止;(2)通过PC也可以实现以上的控制,并能实现智能车任意角度的转向,具有报警功能;(3)显示智能车的当前速度和所行驶的路程。系统对智能车速度和方向进行了分级控制,用1~128指令控制智能车的速度,用144~233指令来控制智能车的方向,图4是在PC端给智能车发送的速度与方向指令。
智能车在行驶的过程中能够实时显示当前车的速度与所行驶的路程,因此我们可以很容易知道出小车的运动情况,这给系统的调试工作带来了极大的便利,图5是通过液晶显示智能车的当前速度和所行驶的路程。
5 结论
本文介绍的无线控制智能小车系统,通过单片射频收发器nRF905发送和接受指令,结合PID控制算法,实现远程无线控制智能小车。系统通过实际通信验证,运行稳定,通信可靠存,整个系统具有体积小、功耗低以及通信距离远等优点,具有广泛的应用前景。
参考文献:
[1] 邵贝贝.单片机嵌入式应用的在线开发方法[M].北京:清华大学出版社,2004.
[2] 孙同景,陈桂友.Freescale 9S12 十六位单片机原理及嵌入式开发技术[M].北京:机械工业出版社,2008.
[3] nRF905 Single Chip 433/868/915 MHz Radio Tranceiver,January 2004, Nordic VLSI.
[4] 谭浩强.C语言程序设计[M].北京:清华大学出版社,2005.
[5] 仇慎谦.PID调节规律和过程控制[M].南京:江苏科学技术出版社,1987.
关键词:智能小车 MC9S12XS128 PID控制 nRF905
中图分类号:TP2 文献标识码:A 文章编号:1007-3973(2011)012-094-03
智能车已经在工业、农业、医疗、科研、国防及服务业等行业得到了一定的应用,特别是在军事领域的侦查、巡逻、战场运输、扫雷以及艰苦工作环境中的信息采集等众多方面,智能车发挥着重要的作用。本系统主要是通过nRF905无线模块将智能车行驶过程中的各种状态信息发送给上位机,上位机将所发来的信息进行实时处理之后,再对智能车进行控制,从而实现PC对智能车的远程控制。
1 系统的硬件设计
1.1 系统的硬件总体结构
如图1所示,整个系统硬件结构主要由飞思卡尔车模、电源模块、MC9S12XS128、C8051F340單片机、光电编码器、LCD1602液晶显示屏、nRF905和PC组成。采用嵌入式程序设计方法,在PC机上将控制指令通过串口发送给C8051F340,由C8051F340的SPI口将控制指令写到无线芯片的发射寄存器内,通过nRF905无线模块将数据发射出去。系统的控制模块如图2所示,在接收端nRF905将接受的数据通过SPI口写入MC9S12XS128处理器,MC9S12XS128通过内部A/D采集光电编码器产生的脉冲信号,与接受到的控制指令进行比较处理,产生两个独立的占空比可调的PWM波形,用于驱动舵机和电机模块,实现对智能车速度与方向的控制,利用液晶模块可显示智能车当前的速度与所行驶的路程。除此之外,还可以通过按键来发送控制指令,实现智能车的远程控制。(见图1、图2)
1.2 MC9S12XS128微控制器简介
MC9S12XS128微控制器采用了增强型16位S12处理器,内部有8KB的RAM, 2KB 的EEPROM, 128KB的FLASH,外部晶振16M,通过内部PLL可得40M总线时钟。有8路独立的PWM,16路12位A/D,有控制局域网模块的CAN总线,支持SPI、SCI、I2C串口通讯模式,其性能能够满足本设计的需求,该器件具有良好的稳定性,外围电路简单,功能强大。同时它支持Freescale特有的背景调试模式(BDM),可以进行在线系统调试,使开发效率大大提高。
1.3 无线收发模块
nRF905是挪威Nordic VLSI公司推出的单片射频收发器,可工作在 433/868/915Mhz国际通用ISM频段,频道之间的转换时间为650us,GMSK/GFSK调制和解调;由于采用了DDS+PLL频率合成技术,频率稳定性好,灵敏度高,达到-100dBm;最大发射功率达+10dBm,数据传输速率可达100kbit/s。天线可采用PBC 环形天线或单端鞭状天线,在开阔地带传输距离最远可达1km以上。
nRF905有两种工作模式和两种节能模式,如表1 所示,分别为掉电模式、待机模式、Shock- Burst RX接收模式和Shock- Burst TX发送模式,这几种模式由外界CPU 通过控制nRF905 的3个引脚PWR_UP、 TRX_CE 和TX_EN的高低电平来决定。
2 系统的软件设计
无线控制智能小车主要由无线数据收发器nRF905、MCU、小车和液晶显示部分组成。无线数据收发器nRF905与MCU之间通过SPI进行通信,MC9S12XS128通过PID算法控制智能小车的速度与方向。因此,软件设计的重点是nRF905数据的收发和智能车的速度、方向控制,且都用C语言编写。
2.1 nRF905程序设计
2.1.1 nRF905数据的发送过程
当微控制器要发送数据时,将接收机的地址和发送数据通过SPI 接口传输给nRF905模块;微控制器设置TRX_CE和TX_EN管脚同时置为高电平,启动发送端的nRF905模块为发送模式。
发送端的nRF905模块发送过程包括射频寄存器开启,数据打包,数据包发送;当数据包发送结束时,数据发送完成管脚(DR管脚)会变成高电平;如果AUTO_RETRAN被设置为高,nRF905模块将连续地发送数据包,直到TRX_CE 被设置为低;TRX_CE被设置为低时,nRF905模块数据包发送过程结束并回到待机模式。
2.1.2 nRF905数据的接收过程
系统接受数据的工作流程如图4所示。首先,微控制器控制TRX_CE为高电平、TX_EN为低电平,nRF905模块进入接收模式。当nRF905模块检测到与接收频率相同的载波时,设置载波检测管脚(CD管脚)为高电平;当nRF905 模块接收到有效的地址时,设置地址匹配管脚(AM 管脚)为高电平;当一个正确的数据包接收完毕后,nRF905模块自动去掉数据包的字头、地址和CRC 校验码,然后将数据接受完成管脚置为高电平;微控制器将TRX_CE 设置为低电平;微控制器通过SPI 接口以一定的速率提取数据包中的有效接收数据;最后,当所有的有效数据接收完毕,微控制器控制nRF905模块数据接收完成管脚(DR管脚)和地址匹配管脚(AM管脚)为低电平;nRF905进入待机模式。
无论是发送端还是接受端,MCU都需要通过SPI配置nRF905,设定无线发送模块的发射频率、波段、发射功率、地址码、地址位数、数据位数和CRC。因为数据准备位DR关系到数据是否已经发送和接受完成,所以系统采用了边沿捕获中断来检测DR的电平变化,以保证nRF905发送和接受的实时性。nRF905具体的配置函数和边沿捕获中断函数如下:
/*---------------------nRF905配置函数--------------------*/
RFConfig RxTxConf =
{
10, //设置频道
0x6c, //CH_NO,配置频段在433MHZ
0x0c, //输出功率为10db,不重发,节电为正常模式
0x44, //地址宽度设置,为4字节
0x04,0x04, //接收发送有效数据长度为4字节
0xCC,0xCC,0xCC,0xCC, //接收地址
0x58, //CRC充许,8位CRC校验,外部时钟信号不使能,16M晶振
};
/*-------------------边沿捕获中断函数---------------------*/
void PJI_init(void)
{
DDRJ_DDRJ0=0;
PPSJ_PPSJ0=1; //中断边沿选择寄存器
PIEJ_PIEJ0=1; //开启中断
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 24 PORTJ_ISR(void)
{ unsigned char i;
RxPacket(); // 接受数据
PIFJ_PIFJ0=1; // 清标志位
}
2.2 控制程序设计
小车的控制是系统软件设计的核心之一,其控制主要体现在速度控制和角度控制方面。速度控制使用了经典的增量式PID算法,考虑到角度的模糊性,角度的控制,使用了角度偏差的线性控制。
2.2.1 速度控制
系统通过串口和无线模块nRF905给智能车发送速度控制指令,速度控制包括启动、加速、减速、停止。这里给出了一个简单的控制指令的形成策略,系统采用了1~128共128级调速,1表示PWM的占空比为0%,128表示PWM的占空比為100%。当PWM的占空比为0%时,小车停止;当PWM的占空比为100%时,小车全速行驶;当PWM的占空比增加时,小车加速;当PWM的占空比减少时,小车减速。为了避免智能车因速度过大而导致振荡或不能及时响应速度控制指令等现象,系统利用了增量式PID控制速度。增量式PID是指数字控制器输出控制量的增量△u(k),以下是增量式PID控制算法:
由(1)式可以看出,如果计算机控制系统采用恒定的采样周期T,一旦确定了A、B、C,再根据前后三次测量的偏差值,就可以求出控制量的增量△u(k)。如果T过大,系统会出现响应慢和智能车滞后的现象;如果T过小,系统会因MCU的A/D转换速度跟不上,出现采集信号失真的现象。考虑到智能车的响应速度和扰动信号的周期,我们设定采样周期T=20ms,并采用临界比例法和经验法确定了增量式PID的三个参数值A=1,B=8,C=0.15。
速度控制的关键是如何建立PID返回的增量值与PWM占空比之间的关系,使得小车能够及时、稳定、准确的响应nRF905发来的速度控制指令,即让车模以最快的反应速度达到所期望的速度。车轮每前进一段距离时,光电编码器会产生一定数目的脉冲,MCU利用PIT对脉冲进行计数,由公式(2)便可计算出当前的速度值。
其中车轮的直径是52mm,Cur_Num是MCU采集到的脉冲数,差速器齿轮齿数是75,光电编码器齿轮齿数是26,光电编码器每转脉冲数为100,速度测量采样周期是20ms,车速的单位是m/s。程序每进入一次速度控制函数,首先读出与编码器连接的脉冲累加器计数寄存器 PACN的值,计算出当前速度,再与期望的速度比较,并将两速的差值送入PID函数计算出控制量的增量△u(k),如果△u(k)的值为负,表明小车车速快于期望值,需要减速;反之如果△u(k)的值为正,说明小车需要加速。加减速的急缓程度根据△u(k)值的大小决定。减速就是电机正转的PWM值递减,如果速度差很大,便要启动电机反转以迅速达到减速的目的。加速的过程是对电机正转 PWM累加的过程,但是要对 PWM 限定范围,加速的急缓只是每次累加的量大小不同。具体实现步骤如图3所示。
2.2.2 方向控制
智能车的方向控制决定了车体运行过程中的姿态,同时在很大程度上决定了在实际运行中的速度。舵机控制可以说是整个程序的关键部分,舵机控制必须具备响应时间短,稳态误差小等优点。考虑到角度的模糊性,我们使用了角度偏差的线性控制,通过试验表明角度偏差的线性控制对被控对象的参数变化具有较强的鲁棒性。
系统利用信号脉宽进行舵机转向调节,其调节角度为+45€啊?45€埃婊穆龀蹇刂菩藕胖芷谖?0ms。舵机转向角度为0€笆保隹砦?.52ms,占空比为7.6%;舵机转向角度为-45€笆保隹砦?.070ms,占空比为5.35%;舵机转向角度为+45€笆保隹砦?.970ms,占空比为9.85%。为了更好的控制智能车的转向,系统采用了十六进制0x90~0xe9共90个等级作为角度调节。当上位机通过无线模块nRF905给智能车发送0x90指令时,智能车舵机顺时针旋转45€埃〕迪蛴易坏狈⑺?xBC指令时, 智能车舵机转向角度为0€埃〕抵毕咝惺唬坏狈⑺?xE9指令时, 智能车舵机逆时针旋转45€埃〕迪蜃笞坏狈⑺?x81时,智能车开始向后行驶,同时启动报警功能。
公式(3)给出了如何将无线模块nRF905接收到十六进制指令转换成舵机所需的脉宽,具体公式如下:
其中temp1为脉宽,初始值为1.52ms,nRF905RxBuf[0]是所接收到的十六进制数。
3实验结果分析
本系统可完成如下任务:(1)通过按键可以无线控制智能车的启动,加速,减速,转向,后退,停止;(2)通过PC也可以实现以上的控制,并能实现智能车任意角度的转向,具有报警功能;(3)显示智能车的当前速度和所行驶的路程。系统对智能车速度和方向进行了分级控制,用1~128指令控制智能车的速度,用144~233指令来控制智能车的方向,图4是在PC端给智能车发送的速度与方向指令。
智能车在行驶的过程中能够实时显示当前车的速度与所行驶的路程,因此我们可以很容易知道出小车的运动情况,这给系统的调试工作带来了极大的便利,图5是通过液晶显示智能车的当前速度和所行驶的路程。
5 结论
本文介绍的无线控制智能小车系统,通过单片射频收发器nRF905发送和接受指令,结合PID控制算法,实现远程无线控制智能小车。系统通过实际通信验证,运行稳定,通信可靠存,整个系统具有体积小、功耗低以及通信距离远等优点,具有广泛的应用前景。
参考文献:
[1] 邵贝贝.单片机嵌入式应用的在线开发方法[M].北京:清华大学出版社,2004.
[2] 孙同景,陈桂友.Freescale 9S12 十六位单片机原理及嵌入式开发技术[M].北京:机械工业出版社,2008.
[3] nRF905 Single Chip 433/868/915 MHz Radio Tranceiver,January 2004, Nordic VLSI.
[4] 谭浩强.C语言程序设计[M].北京:清华大学出版社,2005.
[5] 仇慎谦.PID调节规律和过程控制[M].南京:江苏科学技术出版社,1987.