哈尔滨工程大学本科生毕业论文
A-CH in
B-CH in
图3.8 步进电机驱动芯片
A ā B B
图3.9 步进电机控制时序
23
哈尔滨工程大学本科生毕业论文
3.5 后轮驱动模块的设计
3.5.1 直流电机驱动芯片L298N
后轮采用直流电机来驱动,和步进电机相比较直流电机驱动力大,电源利用率高。因为直流电机的转速很高,所以必须加入齿轮箱进行减速,减速后驱动力变大,转速降低。小车的行驶速度大概在20cm/s左右。
为了控制直流电机的正反转来实现小车的前进和后退,采用了直流电机驱动芯片L298N,引脚连接如图3.10所示。前进时5脚输入方波占空比为100%(即持续高电平),7脚为低电平;后退时5脚为低电平,7脚输入方波占空比为100%。另外,改变方波的占空比可以实现对直流电机的调速,由于本设计中小车速度已调整到较低水平,所以无需再调速。
100n
100n
图3.10 直流电机驱动芯片L298N
24
哈尔滨工程大学本科生毕业论文
3.5.2 后轮驱动任务的软件设计
本设计中只需控制后轮的正、反转,无需调速,所以后轮驱动模块的设计要比前轮转向模块简单很多,并且不建立后轮驱动任务也能实现,因为只需要在改变小车的行进状态的时候改变单片机和L298N相连的I/O口电平状态即可。而本设计中将后轮驱动模块也设计成一个单独的任务是考虑到以后功能扩展的方便。以后可以通过PWM方式对后轮直流电机进行调速,那就必须把后轮驱动模块设计成一个单独任务了。
目前本模块对其他模块主要提供了以下几个接口函数。
setspeed(n),n>0时,小车前进;n<0时,小车后退;n=0时,小车停止。
getspeed(),前进时返回1;后退时返回-1;停止时返回0。 imstop(),该函数实现反电动势刹车功能。
3.6 里程检测模块的设计
3.6.1 探头的选型与安装
可以用这样的思路来设计里程检测模块,在车轴上安装一个圆盘,圆盘上均匀的开一些缺口,如图3.11所示:
图3.11 里程检测遮光圆盘的设计
车轮每转过一圈圆盘将把红外对管遮挡4次,小车匀速行驶时检测电路输出占空比为50%的方波。检测电路如图3.7所示。
25
哈尔滨工程大学本科生毕业论文
3.6.2 软件消抖与硬件消抖的比较
从检测电路输出的方波在其上升和下降沿处是不稳定的,有抖动,统计里程的原理是检测上升和下降沿的个数,抖动必将引起里程统计的误差,因此要考虑消抖。
消抖的方法有多种,用硬件电路可以实现消抖功能,例如加一级施密特触发器或加一级单稳态触发器都可以在一定程度上消除抖动。硬件消抖后的信号可以直接接到单片机的计数器引脚,利用单片机内部的计数器来统计里程,但这样的方法硬件代价比较大,而且需要使用单片机的计数器或中断才能实现。所以考虑用软件的方法来消除抖动。
软件消抖的思路是每隔T1对原信号采样一次,假设抖动的时间宽度为T2,高、低电平的宽度为T,则只要满足T2 图3.12 软件消抖示意图 3.6.3 里程检测任务的软件设计 里程检测模块被设计成一个独立的任务,由定时器0的中断处理函数每隔32毫秒调用一次,也就是说采样的时间间隔为32毫秒,这 26 哈尔滨工程大学本科生毕业论文 基本上能够满足T2 该模块对外提供了以下几个接口函数: void licheng(void):里程检测任务函数,由定时器0的中断处理函数调用,完成采样和上升沿、下降沿的个数统计; unsigned int getlicheng(void):获取里程值函数,单位为上升和下降沿的个数,后轮每转过1/8圈对应一个上升或下降沿; unsigned int getlichenglimi(void):该函数也是获取里程值,单位是厘米; void setlicheng(unsigned int lc):设置里程值函数。 由于记录里程值的变量是unsigned int型,所以表示的里程值范围为:0-65535(沿个数),大约是1366米,对于本设计而言,这个范围是足够了。 3.7 超声测距模块的设计 3.7.1 超声测距的理论依据 超声测距的依据是超声波在空气中以一定的速度ν传播,遇到障碍后声波反射回来,被超声波接收传感器检测到,根据发射和接收到回波之间的时间差t就可以计算出障碍的距离,计算公式是:S=ν·t/2。 超声波 发射传感器 直接耦合 障碍 回波 接收传感器 图3.12 超声测距原理图 3.7.2 超声发射电路 发射电路要求能给出40KHz的方波,可以由硬件电路振荡产生, 27