资源描述
福建省大学生电子设计竞赛
指导老师:林惠君
吴建宁
连桂仁
姓名
学院
专业
年级
联络方法
陈建平
数学和计算机科学学院
电子信息科学和技术
10
黄健
数学和计算机科学学院
电子信息科学和技术
10
黄志鹏
数学和计算机科学学院
电子信息科学和技术
10
自平衡小车系统
摘要
我们采取模块化设计方法,设计了一款基于STC12C5A60S2单片机自平衡小车系统,实现了题目中基础要求和发挥部分全部内容。
本系统基于STC12C5A60S2单片机为关键处理器,用软件实现直流电机PWM调速,为了实现控制小车直立行走,我们对小车平衡控制和速度控制进行了建模分析,设计出一套合理控制方案。本系统设计了相关硬件电路和相关应用程序,硬件电路关键包含STC12C5A60S2单片机最小系统、循迹探测模块、速度检测模块、倾角检测模块、转向角速度检测模块、电机驱动模块等单元电路模块;系统程序关键包含循迹探测程序、直立运行程序、PWM调速程序等。
关键词:STC12C5A60S2单片机 循迹 PWM调速 平衡
1. 系统方案比较和选择
依据设计要求,能够有多个方法来实现系统功效。我们采取模块化思想,从各个单元电路选择入手进行整体方案论证、比较和选择。
1.1 控制器方案比较和选择
方案一:采取FPGA或CPLD作为系统控制器,能够实现复杂逻辑功效,规模大,速度快,密度高,体积小,稳定性高,轻易实现仿真、调试和功效扩展。但成本高,引脚多,PCB布线复杂。
方案二:采取增强型51系列STC12C5A60S2单片机,运算速度快,软件编程灵活,自由度大,技术成熟,体积小,成本低,轻易实现仿真、调试和功效扩展。
方案三:采取嵌入式处理器(ARM),运算功效强大,速度较快,编程灵活,自由度大,外围器件少,成本适中,轻易实现仿真、调试和功效扩展。但PCB设计及焊接技术要求高。
综合考虑系统设计需要,我们选择了方案二。
1.2 循迹探测方案比较和选择
方案一:采取热探测器,电路简单,但易受外界干扰,不灵敏。
方案二:采取简易光电传感器结合外围电路探测,但实际效果并不理想,对行驶过程中稳定性要求很高,且误测几率较大,易受光线环境和路面介质影响。在使用过程极易出现问题,而且轻易因为该部件造成整个系统不稳定。
方案三:采取两个五路循迹BFD-1000模块,分别应用于小车水平运行循迹和直立运行循迹。BFD-1000专门设计用作黑(白)线检测传感器,尤其适合复杂黑白线、交叉黑白线检测,它有六路高灵敏度红外传感器(5 路巡线、1 路蔽障),能够对黑白线正确识别。应用此模块方便简单,抗干扰能力强。
综合考虑系统设计需要,我们选择了方案三。
1.3 电机驱动方案比较和选择
方案一: 采取继电器,电路简单可靠,但不轻易实现精细控制。
方案二:采取分立元件组成电机驱动电路方法,结构简单,价格低廉,在实际应用中应用广泛,不过这种电路工作性能不够稳定。
方案三:采取专用芯片L298N作为电机驱动芯片,L298N是一个含有高电压大电流全桥驱动芯片,它对应频率高,一片L298N能够分别控制两个直流电机,而且还带有控制使能端。用该芯片作为电机驱动,操作方便,稳定性好,性能优良。
综合考虑系统设计需要,我们选择了方案三。
2. 理论分析和计算
为了实现控制小车直立行走,我们假设小车直立、运行动力均来自两个驱动轮,且由两个直流电机来驱动后轮转动。所以,小车整体作为一个控制对象,它输入量是两个直流电机转动速度。我们认为,小车直立行走控制任务能够分解为平衡控制和速度控制两个基础控制模块,以下分别对这两个控制模块进行建模分析和计算。
2.1 小车平衡控制建模分析和计算
小车直立平衡控制是经过负反馈来实现,系统能够类比为一个倒立单摆模型,因为小车只有两个驱动轮着地,所以车体会在轮子滚动方向上发生倾斜。保持车体平衡方法就是控制轮子转动,抵消其在这个维度上倾斜趋势。
下面,我们对小车进行数学建模,建立速度百分比微分负反馈控制,依据基础控制理论讨论小车经过闭环控制保持稳定条件。
我们把小车简化为高度为,质量为简单倒立摆,它放置在能够左右移动车轮上。假设外力干扰引发小车产生角加速度,沿着垂直于小车地盘方向进行受力分析,以下图2-1所表示。
图2-1 小车运动模型受力分析图
由上图2-1我们推导出小车倾角和车轮运动加速度和外力干扰加速度之
间运动方程:
(2.1 - 1)
在角度很小时,,,运动方程简化为:
(2.1 - 2)
小车静止时,
(2.1 - 3)
对应小车静止时,系统输入输出传输函数为:
(2.1 - 4)
此时系统含有两个极点,一个极点在平面右半开面,小车不稳定。
经过对系统拉氏分析,我们能够知道当小车静止时,此时系统一个极点在平面右半平面,小车不稳定。所以我们引入百分比、微分反馈控制(在角度控制中,和角度成百分比控制量称为百分比控制,和角速度成百分比控制量称为微分控制,其中角速度是角度微分)以后系统框图以下图2-2所表示,其中。
图2-2 加入百分比微分反馈控制后系统框图
系统传输函数为:
(2.1 - 5)
此时,系统两个极点在:
(2.1 - 6)
若使系统稳定,则需两个极点全部在平面左半平面,此时要满足,由此,我们得出结论,当初,直立小车能够达成稳定。
所以,我们总结出小车直立稳定条件是:
1. 能够正确测得小车倾角大小和角速度大小;
2. 能够控制车轮加速度。
2.2 小车速度控制建模分析和计算
对于小车直立运行速度控制相对于一般小车速度控制则比较复杂,因为在速度控制过程中需要一直保持小车平衡,所以小车速度控制不能够直接经过改变电机转速来实现。经过深入思索,我们认为具体需要处理以下三个问题:
1. 怎样测量小车速度?
2. 怎样经过小车直立控制算法实现小车倾斜角度改变?
3. 怎样依据速度误差控制小车倾斜角度?
第一个问题可由安装在电机输出轴上光码盘来测量,利用主控单片机计数器来测量在固定时间间隔内速度脉冲信号个数来反应出电机转速,从而得到小车运行速度。
第二个问题可由倾角控制中给定值来处理,假如给定了小车平衡控制设定值,在直立控制调解下,车体将会自动维持在一个角度。由分析得悉,车体倾角最终是跟踪重力加速度Z轴角度,则将小车倾角给定值和重力加速度Z轴角度相减,就能够最终决定车体倾斜角度。
分析第三个问题时,因为在直立平衡控制下小车速度和车体倾角之间传输函数是一个非最小相位系统,反馈控制下轻易造成系统不稳定,在此,作出以下假设:
1. 小车角度在直立控制下简化成一个一阶过渡过程。
2. 车体倾角是由车轮运动所产生,所以车轮速度是倾斜角度变量积分再乘以车体长度。
3. 忽略车体倾斜引发车轮加速度,因为这个假设仅对控制刚开始短暂过渡阶段而言,此时车体倾斜还比较小,引发速度改变不大。
4. 系统只进行速度百分比负反馈。
进行了假设以后,就能够经过程序方法实现了,具体方法是编写程序时改变控制周期、减小控制参数、进行信号平滑滤波等。为了提升速度控制稳定性,还必需在反馈控制里加上微分控制,但因为信号中存在着噪音,增加微分控制后会加大噪声对速度控制信号影响,为处理这一点,能够加进积分控制,将微分控制和积分控制步骤合并,形成一个百分比控制步骤。这么能够保持系统控制传输函数不变,同时避免了复杂微分计算。速度控制原理框图以下图2-3所表示。
图2-3 速度控制原理框图
3. 系统硬件设计
3.1 系统总体设计
本系统硬件电路设计,首先要分析整个系统输入信号和输出信号,其次是选择适宜微处理器,由微处理器提供资源,逐步设计各个电路子模块,最终形成整个控制电路。
经分析,我们知道整个控制系统输入输出应该包含:
1. AD 转换接口(5路)
① 陀螺仪:两路,分别检测车体倾斜角速度和转动角速度;
② 加速度计:一路,检测Z轴方向上输出电压;
③ 调试辅助:两路,用于调试电路参数接口。
2. PWM接口(2路或4路)
控制左右两个电极双方向运行,若采取单极性PWM驱动,则需要四路PWM接口;
若采取双极性PWM驱动,则能够使用两路。
3. 定时器接口(2路)
需要两个定时器脉冲输入端口来测量左右两个电机转动速度。
4. 通讯接口(备用)
① SCI(UART):一路,用于程序下载和调试接口;
② I2C:(备用)能够直接读取加速度值。
5. IO接口(备用)
输入输出接口用于小车倾斜角度、运行速度显示,功效设置等。
明确了整个系统输入输出接口后,我们最终选择了STC12C5A60S2单片机作为本系统微处理器,STC12C5A60S2单片机能够满足上述分析全部控制要求。本系统硬
件总体框图以下图3-1所表示。
图3-1 本系统硬件总体框图
3.2 单元电路设计
本系统以STC12C5A60S2单片机为关键处理器,在其最小系统外围设计了循迹探测模块、速度检测模块、倾角检测模块、转向角速度检测模块、电机驱动模块等单元电路。
3.21 单片机最小系统设计
微处理器选择STC12C5A60S2单片机,它功耗低,运算速度快,含有丰富外设模
块,很适合控制小车运行,其关键性能指标以下:
(1)高速:1个时钟/机器周期,增强型8051 内核,速度比一般8051 快8~12 倍
(2)工作频率:0~35MHz,相当于一般8051:0~420MHz
(3)8通道,10位高速ADC,速度可达25 万次/秒,2路PWM还可当2 路D/A 使用
(4) 通道捕捉/比较单元(PWM/PCA/CCP),也可用来再实现2 个定时器或2个外部中
断(支持上升沿/ 下降沿中止)
(5)4个16位定时器,兼容一般8051定时器T0/T1,2路PCA 实现2 个定时器
(6) 芯片内EEPROM 功效,擦写次数10万次以上
(7)高速SPI串行通信端口
以下图3-2所表示为STC12C5A60S2单片机最小系统电路图,其中包含MCU、晶振电路
和复位电路。
图3-2 STC12C5A60S2单片机最小系统电路图
3.22 电机驱动模块设计
本电机驱动模块设计采取专用集成芯片L298N作为电机驱动芯片。L298N是一个含有高电压大电流全桥驱动芯片,它对应频率高,一片L298N能够分别控制两个直流电机,而且还带有控制使能端。用该芯片作为电机驱动,操作方便,稳定性好,性能优良。
本电机驱动模块电路图以下图3-3所表示。
图3-3 电机驱动模块电路图
3.23 循迹探测模块设计
本循迹探测模块设计采取两个五路循迹BFD-1000模块,分别应用于小车水平运行循迹和直立运行循迹。BFD-1000专门设计用作黑(白)线检测传感器,尤其适合复杂黑白线、交叉黑白线检测,它有六路高灵敏度红外传感器(5 路巡线、1 路蔽障),能够对黑白线正确识别。
3.24 速度检测模块设计
本速度检测模块设计采取速度传感器,即固定在电机输出轴上光码盘和相互配合光电管器件,以下图3-4所表示为本模块电路图。光电管器件直接输出数字脉冲信号,即能够直接将这些脉冲信号连接到单片机计数器端口就可测得小车运行速度。每个光电管输出两个脉冲信号,它们波形相同,只是相位相差90度。假如电机正转,第二个脉冲落后90度;假如电机反转,第二个脉冲超前90度。由此,我们能够经过这个关系判定电机是否正反转。在实际电路中,我们只需检测了一路脉冲信号,经过它频率测量得到电机转速。电机转向则是经过施加在电机上电压正负进行判定。
图3-4 速度检测模块电路图
3.25 倾角检测模块设计
本倾角检测模块设计采取是加速度传感器MMA7361和村田企业ENC-03系列陀螺仪进行测量,测得是倾角速度和重力加速度,分别进行积分和微分就能够得到角度和角速度。因为此加速度传感器输出信号很大,不需要进行放大,所以本模块只需要对陀螺仪信号进行放大滤波。本倾角检测模块电路图以下图3-5所表示。
图3-5 倾角检测模块电路图
上图3-5中,经分析能够看出,将陀螺仪输出信号放大了10倍左右,并将零点偏置电压调整到工作电源二分之一(1.65V)左右。放大倍数需要依据选择传感器输出灵敏度设计,能够选择5至10倍范围全部能够满足车模控制需要。
上图3-5电路只是将传感器信号进行了放大处理,角度和角加速度计算全部要依靠单片机软件来完成。
3.26 转向角速度检测模块设计
参与控制小车转向陀螺仪电路和上图3-5中倾角检测电路中陀螺仪电路是一样。只是在安装转向陀螺时候,将该陀螺垂直安装,由此能够测量小车转向角速度。故本转向角速度检测模块设计电路图也如上图3-5所表示。
3.27 电源模块设计
本电源模块设计采取4节1.5V干电池供电,而且电源经过7805稳压块稳压,470uF和104电容进行滤波。本电源模块电路图以下图3-6所表示。
图3-6 电源模块电路图
4. 系统软件设计
本系统为了实现小车水平运行和直立运行全部能够按轨道行驶,设计了和硬件电路相适应软件程序。该系统软件程序关键包含循迹探测程序、直立运行程序、PWM调速程序等。
4.1 循迹探测程序步骤图
开 始
是否有 信号?
中间传感器
是否有 信号?
右侧传感器
直线行走
是
否
直线行走
小车左转弯
小车右转弯
是
是
是否有 信号?
左侧传感器
否
否
图4-1 循迹探测程序步骤图
4.2 直立运行程序步骤图
图4-2 直立运行程序步骤图
4.3 PWM调速程序步骤图
图4-3 PWM调速程序步骤图
5. 系统测试方案和测试结果
5.1 测试仪器
秒表、电池、轨道
5.2 测试方案
分两次将小车水平分别放置于F、A之间和C、D之间,打开电源,开始计时,观察小车行驶路线,统计A、B点间加速区行驶时间,B、C点间减速区行驶时间及行驶一周时间;
分两次将小车直立分别放置于F、A之间和C、D之间,打开电源,开始计时,观察小车行驶路线,统计A、B点间加速区行驶时间,B、C点间减速区行驶时间及行驶一周时间。
5.3 测试结果
小车水平行驶测试结果
位置
能否成功运行一周
加速区行驶时间
减速区行驶时间
加速区和减速区行驶时间之比
行驶一周时间
F、A之间
能
2s
4s
1:2
32秒
C、D之间
能
2s
5s
2:5
34秒
小车直立行驶测试结果
位置
能否成功运行一周
加速区行驶时间
减速区行驶时间
加速区和减速区行驶时间之比
行驶一周时间
F、A之间
不能
C、D之间
不能
5.4 测试结果分析
小车在三轮着地情况下进行循迹测试时,能稳定地在要求时间内行驶完整个赛道,而且在加速区和减速区小车速度有显著改变,所用时间之比大约为1:2。
6. 参考文件
【1】《51单片机C语言常见模块和综合系统设计实例精讲》,于永等著,北京:电子工业出版社,.10
【2】《全国大学生电子设计竞赛——单片机应用技能精解》,蓝和慧等著,北京:电子工业出版社,.4
【3】《全国大学生电子设计竞赛——系统设计》,黄智伟编著,北京:北京航空航天大学出版社,.12
【4】《全国大学生电子设计竞赛--制作实训》,黄智伟编著,北京:北京航空航天大学出版社,.1
【5】《模拟电子技术基础》,童诗白,华成英著,北京:高等教育出版社,.
【6】《数字电子技术基础》,阎石著,北京:高等教育出版社,.
7. 附录
附录1:关键原器件清单
名称
型号
MCU
STC12C5A60S2
陀螺仪
ENC-03MB
加速度计
MMA7361
电机驱动芯片
L298N
循迹模块
BFD-1000
芯片
AS1117-3.3
电阻
102
电容
104
光码盘
电机
附录2:部分程序代码
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
//#include<reg52.h>
//#define uint unsigned int
//#define uchar unsigned char
uchar i=0,j=0,k,temp;
sbit P10=P1^4;//循迹传感器最左有测得信号 低电平有效
sbit P11=P1^3;//循迹传感器次左有测得信号
sbit P12=P1^2;//循迹传感器中有测得信号
sbit P13=P1^1;//循迹传感器次右有测得信号
sbit P14=P1^0;//循迹传感器最右有测得信号
sbit P23=P2^0;//单片机输出到L298N控制电机左后退
sbit P24=P2^1;//单片机输出到L298N控制电机左前进
sbit P25=P2^2;//单片机输出到L298N控制电机右后退
sbit P26=P2^3;//单片机输出到L298N控制电机右前进
void Delay (uint i)
{
while (i--);
}
void init()
{ TMOD=0x01;
TH0=(65536-40000)/256;//1ms
TL0=(65536-40000)%256;
EA=1;
ET0=1;
TR0=1;
}
void zuo()//左走
{ P25=1;
P26=0;
P23=1;
P24=1;
}
void you()//右走
{ P23=1;
P24=0;
P25=1;
P26=1;
}
void zhi()//直走
{ P23=1;
P24=0;
P25=1;
P26=0;
}
void ting()//停止
{ P23=1;
P24=1;
P25=1;
P26=1;
}
void main()
{ init();
while(1)
{};
}
void time0() interrupt 1
{ TH0=(65536-40000)/256;//1ms
TL0=(65536-40000)%256;
temp=(P1|0xe0);//停僻高三位
if (P12==0)
{
k==4;j=0;i=0;zhi();
}
else
switch(temp)
{ case 0xf7:i=1;j=0;you();break;
case 0xef:i=2;j=0;you();break;
case 0xe7:k==3;i=0;j=0;zhi();break;
// case 0xe3:i=4;j=0;you();break;
case 0xf3:i=5;j=0;you();break;
case 0xfe:j=1;i=0;zuo();break;
case 0xfc:j=2;i=0;zuo();break;
// case 0xf8:j=3;i=0;zuo();break;
case 0xf9:j=4;i=0;zuo();break;
// case 0xfd:j=5;i=0;zuo();break;
case 0xfb:k=1;j=0;i=0;zhi();break;
case 0xf1:k=2;j=0;i=0;zhi();break;
case 0xe3:k=5;j=0;i=0;zhi();break;
case 0xe8:k=6;j=0;i=0;zhi();break;
case 0xfd:k=7;j=0;i=0;zhi();break;
case 0xe0:ting();break;
case 0xff:if(i==1||i==2||i==3||i==4||i==5){i=0;you();}
if(j==1||j==2||j==3||j==4||j==5){j=0;zuo();}
if(k==1||k==2||k==3||k==4||k==5||k==6||k==7){k=0;zhi();}break;
default : break;
}
}
展开阅读全文