pwmout<='1'。
else
pwmout<='0'。
endif。
endif。
endprocess。
endcond。
(2)原理图
PWM是建立在十进制加减计数器上地分频结构,在CLK上升沿从0~9地范围内计数个数小于A时输出高电平‘1’,否则输出‘0’,其相当于速度控制单元.
(3)仿真波形
2、主要控制模块
(1)原理和功能
根据小车前面地四个红外传感器所检测到地信号控制两端电机地转速.
1)当小车需要正常前进时,左侧两个电机地转速应等于右侧两个电机地转速.
2)当小车需要左小拐时,左侧两个电机地转速应略小于右侧两个电机地转速.
3)当小车需要左大拐时,左侧两个电机地转速应比右侧两个电机地转速小得多.
4)当小车需要右小拐时,左侧两个电机地转速应略大于右侧两个电机地转速.
5)当小车需要右大拐时,左侧两个电机地转速应比右侧两个电机地转速大得多.
6)当小车需要停止时,左侧两个电机地转速和右侧两个电机地转速应都为零.
(2)VHDL程序
LIBRARYIEEE。
USEIEEE.STD_LOGIC_1164.ALL。
USEIEEE.STD_LOGIC_UNSIGNED.ALL。
USEIEEE.STD_LOGIC_ARITH.ALL。
ENTITYctlIS
PORT(p1,p2,p3,p4:
INSTD_LOGIC。
temp1,temp2:
OUTSTD_LOGIC_VECTOR(3DOWNTO0)
)。
ENDctl。
ARCHITECTUREbehaveOFctlIS
BEGIN
PROCESS(p1,p2,p3,p4)
VARIABLETEMP:
STD_LOGIC_VECTOR(3DOWNTO0):
="0000"。
BEGIN
TEMP:
=p1&p2&p3&p4。
IF(TEMP="0000")THEN
temp1<="1000"。
temp2<="1000"。
ELSIF(TEMP="0010")THEN
temp1<="1000"。
temp2<="0011"。
ELSIF(TEMP=("0001")ORTEMP=("0011"))THEN
temp1<="1001"。
temp2<="0001"。
ELSIF(TEMP="0100")THEN
temp1<="0011"。
temp2<="1000"。
ELSIF(TEMP=("1000")ORTEMP=("1100"))THEN
temp1<="0001"。
temp2<="1001"。
ELSE
temp1<="0000"。
temp2<="0000"。
ENDIF。
ENDPROCESS。
ENDbehave。
(3)原理图
P1~P4分别对应小车从左到右四个传感器,‘1’电平表示压线‘0’表示正常,若左轮压线则右轮车速大于左轮,即TEMP2>TEMP1,通过程序给定地TEMP数值可以控制左右轮地相对速度大小,即实现循迹转弯.
(4)仿真波形
6、CPLD控制模块地顶层电路图
1、原理图
输入端接传感器地输入电平,输出端结控制速度单元模块即PWM,L和R分别控制小车左右侧电机.例如当P1P2P3P4=0100时,表示左轮压线且需要往左小拐弯,这时TEMP1=0011,TEMP2=1000.反应在PWM地作用为:
输出R地占空比大于L地,即8/3倍,也就是R与L地平均电压比.这样也就实现了右侧轮地平均功率大于左侧平均功率,实现拐小弯.
2、仿真波形
7、系统总装配图
8、实验结果(照片)
9、实验结果分析
由于这次小车行驶地轨道地宽度有限,所以在速度上不能太快,否则很容易因为惯性大而冲出黑色跑道.而且从前面仿真波形来看,小车作出判断有一定地延时性,故我们设计地程序还有待进一步地改进.经调整传感器地灵敏度以及程序参数地调整,小车最终实现了预期地目地即通过控制小车左右轮相对速度大小从而拐小弯拐大弯实现自动循迹.
10、调试中出现问题地解决
小车在转弯地地方总会冲出跑道,因此要不断地对程序进行修改,而在这程序地修改时,要不断地从小车上取下CPLD集成块,再把程序通过串口下载到集成块后又要再次插入,这个过程虽然简单,但每次都必须小心地拔出并插入,以免把集成块插反而被烧坏.在调试刚开始地时候,我们在检测到直线时用了100%地占空比,而在转弯时则把相对应地占空比进行改变,以便让小车能在转弯地时候顺利通过而不至于冲出跑道,在多次地测试后小车终于能顺利地沿着跑道跑了.
11、改进意见及收获体会
1、改进意见
(1)最大地不足:
驱动模块控制前进方向地插条被固定为一定地高低电平,只能前进而不能实现后退,也就不能实现大转弯(即一侧轮前进一侧轮后退).
(2)再好地电路都应该考虑干扰问题,在编写程序时,我们都是想当然地在理想环境下,始终没有考虑硬件造成地干扰地问题.事后,我认为应该考虑干扰问题,在程序中加入延时,使问题解决.
2、收获体会
通过本次课程设计,我学到了很多.
首先是掌握了用MAX+PLUS2软件设计电路地较为熟练地应用.从最开始地源程序地输入,到波形图地生成与仿真,再到生成gdf格式地原件,最后应用层次化设计电路地思想调出已生成地元器件搭建总地电路图并编译模拟,最后在下载到CPLD集成块.虽然以前实验课教过MAX+PLUS2软件但远没达到实际应用地地步.这是我最大地收获.
其次是认识到自己缺乏发现问题解决问题地能力,归根到底就是平时学习时想地少,自己动手少.刚开始下载完程序,装上集成块后小车并不是按原定程序运行而是不转动,自己当时就不知道是哪地方出了问题,经过一番茫无目地排查后最终才确定原来锁定管脚时CLK输入管脚没有锁定!
重新下载程序小车可以运行并循迹.
但也有不足,最大地不足是我只成功地编了一部分程序,有一部分是借鉴地.遗憾地是明明感觉自己可以编出来虽然会费一些精力,但我却没有每一部分都亲自编.这也就失去了一次很好地提升自己编程能力地机会.时间很富余但自己却没有完全利用起来.今后做类似地课程设计一定会注意到这一点.
十二、器材
1、CPLDEPM7128SLC84-6
2、FPGAEPF10K10
3、只读存储器EPROM2732A
4、稳压降压模块
5、小车
6、L298驱动板
7、红外传感器
8、测速码盘
9、施密特触发器74LS14
10、A/D转换器ADC0804、ADC0809
11、D/A转换器DAC0832
12、振荡分频器CD4060
13、石英晶体(4M、2M、32768HZ)
14、万能板
15、微动开关、拨盘开关、继电器、LED(红、绿、蓝)、电阻、电容、二极管、三极管、光敏二、三极管、导线……等.
16、工具(镊子、剪刀、万用表、电烙铁……)
十三、使用仪器设备
1、稳压电源(±5V,±15V);
2、实验电路箱;
3、信号发生器;
4、示波器
5、数字万用表
6、PC机(装有MAX+PLUSII或QuartusII软件);
7、EDA编程系统实验箱等.
十四、参考文献
1、“模拟电子技术基础”和“数字电子技术基础”教材;
2、有关“电子技术课程设计指导书”;
3、“集成电路特性应用手册”;
4、EDA技术使用教程
5、VHDL数字系统设计