设计方案 方案一:单片机的四组并行口(P0、P1、P2、P3)在复位时是高电平,那么在设计按键接口时可以设计为低电平有效。当低电平时判断按键被按下去,执行相关的操作。 按键按下去会存在抖动现象。如果对按键进行计数,会发现虽然只按下去一次,所计的数却不一致。这样会导致错误的操作。因此需要对按键进行消抖,按键接口只是执行单纯的被检测功能,需要特殊的功能寄存器,所以使用P1口。 显示模块采用LCD1602液晶屏,使用单片机的P0口。P0比较特殊,需要外接上拉电阻才能正常进行输出。考虑到简化仿真图的设计,故使用P0口作为LCD1602液晶屏是数据端口。 由于需要对电机进行测速和状态测,P3存在一些特殊寄存器可以使用,故保留P3口。其它接口均接在除P3口以外的接口。 直流电机的转速与正向电流持续时间成正比,使用PWM方式产生脉冲,电机转速进行调节。具体如何产生则使用定时器T0产生中断。 测速则使用T1定时器、外中断INT1组合测量。通过外中断INT1的负跳变来开启T1计时器,通过测量两次负脉冲的时间间隔即可得到转速(电机转动一圈发出一定时长的高电平)。 状态的测量则在再次使用外中断0、1来完成。状态测量采用这样的测量方式只需要测量一次即可,占用时间很短,并且准确。 方案二:对方案一的部分进行修改。按键部分为了响应准确,采用外接高电平的方法。 电机测速模块:仍然不变。 状态测量改成通过内部编程完成测量,不需要外中断0、1的参与。 方案三:仍然对方案一进行修改。按键部分为确保准确性,按键外部接上高电平。 PWM波形产生模块使用数据选择器对电机的正反转进行控制,降低编程难度。 2.2 方案选择方案一过于追求准确性,编程复杂,过多的开启中断实现功能与其它方案是一样的,但是大量标志位的开启需要特别注意,同时要小心时序问题。对编程能力、协调有比较高的要求。 方案二准确的提高了按键的准确性部分,通过仔细考虑,与开外中断测量比较,编程变简单。全部实现比较容易,但为保证准确性、需要通过编程进行调整。 方案三经过仔细考虑,使用数据选择器虽然降低了变成难度,在选择芯片、了解芯片可能需要多花时间。 最终认为方案二比较可行。 2.3 系统框图整个系统以单片机为核心,处理信息。 - 键盘:有7个键盘,每个键盘有不同的功能。键盘的输入信号流入单片机需要进行消抖,避免产生预期外的结果。
- STC89C51:负责整个系统的信息处理。包括键盘的输入信号处理、根据键盘的信号发出电机驱动信号、对电机的速度和转向进行测量、测量完成将信息送给显示。
- 电机驱动芯片:电机所需要的驱动电流相对于STC89C51直接输出的电流要打的多,对电机的控制不理想。反过来同样会影响到单片机的正常工作。所以需要通过驱动芯片来驱动直流电机。
- 电机:电机为MOTOR-ENCODER,有五条线。其中的两条用来输入电流驱动电机,剩余的三条为电机的编码输出。中间的线输出特征为电机转动一圈输出一个正脉冲。边上两个根线输出的脉冲可调,脉冲的相位相差90度,反应了电机的正反转。
- 显示:显示所用器件为LCD1602显示器,显示电机转速,正反转状态。
3.1 总体硬件设计总体硬件分为:晶体振荡器电路、复位电路、按键输入模块、显示电路、电机驱动电路、电机模块。如下图 3.1?1所示 图 3.1?1 3.2 晶体振荡器电路晶振X1采用11.0592MHZ,电容C1、C2采用典型值22pF。如图 3.2?1。该电路的功能是为单片机提供11.0529MHZ的时钟。 图 3.2?1 3.3 复位电路电路图 3.3?1如所示。复位电路电源为+5V、电容(极性电容)C3采用典型值10uF、电阻R7为820欧姆、按键。该电路为单片机复位端口提供一定时间的高电平,当单片机发生异常时可以通过按键使单片机复位。然后正常运行。其中EA/引脚在此电路中不需要使用,只是接上去了而已。 图 3.3?1 3.4 按键输入电路电路图如图 3.4?1所示。按键共有6个,分别有不同的功能。按键的功能在图上已经标出。图中的六个电阻阻值为1K欧姆,为限流电阻、还有降压的作用。电压没有标出统一为+5V。只有按下按键1才能启动其他按键。 图 3.4?1 3.5 显示电路电路图如图 3.5?1所示。液晶显示模块数据口与单片机的P0口连接,其它端口通过标号与P2.0、P2.1连接。P0口与液晶显示模块交换信息、P2.0、P2.1口对液晶进行读写、使能控制。 图 3.5?1 3.6 电机驱动电路电路图如图 3.6?1所示。驱动芯片型号为L298其驱动能力很强。VCC为芯片的电源+5V、VS为电机驱动电压,最高为45V。IN1、IN2接TTL电平、与单片机标号为ON、OFF的端口(电机控制流的输出端口)连接,ON、OFF端口如图 3.4?1所示。ENA、ENB为芯片的使能端,高电平时芯片工作。ENA控制端口IN1、IN2、OUT1、OUT2。低电平时端口无法工作,无法控制电机。OUT1、OUT2接直流电机输入端。图中接地的端口在图中用不到。 图 3.6?1 3.7 电机模块电路图如图 3.7?1所示。电机的输入端口为1、2。1为高电平时,电机正转2为高电平时,电机反转。1、2同为高或者低电平则不转,ENA低电平也不转。电机的A、B与单片机的A、B连接,用于电机状态的测量。IN1与单片机的IN1相连,用于测速。具体连接与标号在图中已标注。 图 3.7?1 4.1 图形界面设计4.1.1 按键界面设计如图 4.1?1所示
按键扫描模块中有6个按键,每个按键会调动相应的模块。并对数据处理。 4.1.2 LCD1602模块界面界面设计如图 4.1?2所示: 显示模块会显示电机的相关信息(正转、反转、速度、可以加上电机是否加速的、减速的测试、以及显示),显示前将依据按键输入的信号进行运算,处理后送入液晶中。 5.1 程序流程图主程序流程图如图 5.1?1所示。
6.1 硬件调试在确定方案后,便开始搭建硬件。从难易程度来看,该课题是比较简单的所以硬件部分搭建容易,搭建完成即可。开始方案是选择方案一,需要使用多个中断,需要修改的仅仅是电路的连接。后面发现方案一过于复杂,改用方案二,对需要修改的连接电路增加标号即可。 6.2 程序调试由于是自己写程序,经验不足、速度慢,容易出现问题。为了保证每一个环节到位,采用边写程序、边调试的方法。 最先开始的模块是显示模块。显示模块使用器件为LCD1602,在单片机的中学过做过关于这个器件的实验,对器件了解有一些,但不是很熟悉。对原来的程序没有进行封装,最开始出现数据送入位置错误,造成预期之外的结果。而后通过仔细查看课本上的资料,通过位置对照,修改后,液晶显示模块初步没有问题。 电机控制模块:对电机控制需要使用中断、在中断里面产生方波信号,并且方波的占空比可调,电机控制流输出通道选择也在这个模块。在这个模块完成前需要完成一部分键盘扫描函数的设计。当以上程序完成并运行后,通道选择和占空比都出现了问题。最开始是无论按什么键电机都不转,于是乎调整程序,首先发现单片机四组端口复位后输出为高电平,即表示电机停转,需要对电机输出端口初始化,都为低电平。然后进行控制。脉冲波形的占空比的调节,设立多个全局变量,设置上下限,这样波形占空比调节没有问题。电机输出信号通道选择,由于写程序经验不足,逻辑上出现了错误,导致想要外接数据选择器来调节信号输出,进而控制电机正反转。最后经过实验发现这个方法实现起来比较困难,思路没有。还是从中断里面进行调节好一些。最终实现了电机的调节。 电机转向测量模块:此模块完成后在多次的调试过程中发现使用while语句莫名奇妙对电极控制模块产生了影响。为了保证电机控制模块没有问题,对转向模块重新进行了设计,理论分析。但是由于时间问题,没能完成。 测速模块的调节:测速模块需要定时器1和外中断1完成。测速模块完成后需要与显示模块共同完成。由于此前在选择方案的时候,过分依赖中断和定时器,进行了较长时间的论证,电机控制模块的调试由于是个人编程思想和能力问题导致花费了大量的时间。测速模块虽然完成,但是没有时间调试。
全部资料51hei下载地址:
|