XXXXXX学院本科生毕业论文(设计)
到系统多功能集成和容易修改的要求。一个较为简单的硬件电路,系统功能的主要实现 是依靠软件的设计来完成的。本系统的软件采用模块化设计,将系统分为若干个模块,分别实现各项功能,这样在系统软件的调试过程中,各个模块的独立调试有助于问题的发现和解决,在一定程度上节约了程序的调试时间。
4.2系统应用程序设计
微芯公司为PIC18F458系列的集成与调试提供的工具包括:软仿真器,集成开发调试软件MPLAB,PIC系列单片机可采用汇编语言或C语言编写源程序代码。MPLAB是一个完整的PIC单片机集成开发环境,也是目前最优秀、最流行的PIC单片机开发软件,大部分的PIC系列的单片机都可以采用该软件工具进行开发。MPLAB包括下列功能:集成可视化编辑界面,可直接编写C、汇编等文件。集成代码生成工具,包括汇编器、连接器等等。基本调试工具,支持调试断点工具走。系统的软件设计是用PIC的汇编语言在MPLAB集成环境下运行、调试、完成的运行。
4.3直流电机转速控制器的软件设计
直流电机转速控制器的软件设计和系统功能的开发和完善是一个循序渐进过程,本文所作的软件开发是基于直流电机多速控制器的基本功能要求设计的该系统软件有主程序、功能键处理程序、电机运行显示程序、键盘设置参数程序测速程序、延时子程序等。 该系统的整个软件设计全部采用模块化程序设计思想,由系统初始化模块、案件识别模块、LCD模块、高优先级和低优先级中断服务程序四大模块组成。其中,系统初始化模块、按键识别和LCD显示模块在主程序完成,而中断服务完成TMR0定时溢出中断、TMR1外部计数溢出中断、TMR3的1?s计数溢出中断以及INT0外脉冲上边沿捕获中断等。整个软件的主程序和中断服务程序框图如图4.3至4.5。
26
XXXXXX学院本科生毕业论文(设计)
图4.3主程序框图
图4.4高优先级中断服务程序框图
27
XXXXXX学院本科生毕业论文(设计)
图4.4低优先级中断服务程序框图
4.3.1系统初始化模块
主程序的系统初始化模块包括对PIC单片机的CPU系统时钟初始化、PIC单片机的I/O方向初始化、TMR0定时/计数器的初始化、TMR3定时/计数器的初始化、CCP模块的初始化和系统相关变量的初始化过程。
4.3.1.1 CPU系统始终初始化
PIC18单片机内部集成了经过校正的8MHz主时钟源,系统上电默认主时钟为1MHz。通常,需要对OSCCON寄存器进行配置,使其工作在8MHz。若为了提高CPU的运算速度,则采用PIC18单片机的内部PLL的4倍频以使CPU主时钟达到32MHz,只需要对OSCTUNE寄存器进行设置。本系统采用32MHz的时钟源,因此初始化的结果如下: OSCCON=0x70;//IRCF2..0=111,选择内部8MHz的主振荡器
OSCTUNE=0x40;//PLLEN=1,使能PLL的4倍频,从而CPU内核时钟为F为32MHz
4.3.1.2 PIC单片机I/O口方向初始化
28
XXXXXX学院本科生毕业论文(设计)
在总图中,RD端口的RD0..7和RE端口的RE0..2是与LCD模块连接,主要是从PIC单片机输出数据或指令到LCD模块,因此可以将其全部设置为输出方向;另外,由于RE0..2上电复位默认为模拟输入口,不是数字I/O口,因此需要对ADCON1控制寄存器配置RE0..2为数字I/O口。由于RB端口接有3个按键K1..3和INT0外部中断信号输入,因此需要将RB端口配置成带有上拉功能的输入端口,可以启用RB内部弱上拉。P1A和P1B是PWM信号的输出,应将R1A和R1B配置成输出引脚。具体的初始化结果如下: ADCON1=0x0F;//RA和RE端口全为数字IO口 TRISD=0x00;//RD端口置输出方向 TRISE=0x00;//RE端口置输出方向 TRISCbits.TRISC6=0;RD6为输出引脚 TRISCbits.TRISC7=0;RD7为输出引脚 TRISDbits.TRISD4=0; P1A为输出引脚 TRISDbits.TRISD5=0; P1B为输出引脚
4.3.1.3 TMR0定时/计数器初始化
本系统中采用TMR0产生1s的定时,因此要将TMR0初始化工作在定时功能上,设置T0CON模式寄存器的与分频比和选择内部时钟源计数来完成定时,对TMR1L和TMR1H设置定时1s的初值。由于TMR0可以采用16位的方式计数,在对TMR1L和TMRH载入初值时,在16位的工作模式下,要先载入TMR1H内容,在再载入TMR1L内容。具体的初始化结果如下:
T0CONbits.TMR0ON=0;//TMR0停止工作
T0CONbits.T08BIT=0;//选择16位的定时/计数器 T0CONbits.T0CS=0;//选择内部CLKO时钟源作为定时 T0CONbits.PSA=0;//选择预分频器 T0CONbits.T0PS2=1;//预分频比为1:256 T0CONbits.T0PS1=1; T0CONbits.T0PS0=1;
TMR0H=(65536-31250)/256;//先写高字节 TMR0L=(65536-31250)%6;//再写低字节 T0CONbits.TMR0ON=1;//开始定时工作
29
XXXXXX学院本科生毕业论文(设计)
4.3.1.4 TMR1定时/计数器初始化
由光栅盘产生的脉冲信号送到RC0/T13CK引脚,由TMR1对其进行脉冲计数,因此TMR1必须初始化在外部计数模式下,对T1CON寄存器进行设置,TMR1L和TMR1H初始化为0。具体的设置如下:
T1CONbits.RD16=1;//允许一次性读写16位
T1CONbits.TMR1CS=1;//选择外部时钟源,TMR1用作外部计数 TMR1H=0;//TMR1数据寄存器清0 TMR1L=0;
T1CONbits.TMR1 ON=1;//允许TMR1开始工作
4.3.1.5 TMR3定时/计化数器初始
在用M/T法测量电机的速度时,需要有一个标准时钟产生标准的计数过程,此处用TMR3工作在16位的定时模式下,以1?s的速度进行标准脉冲计数。初始化的结果如下: T3CONbits.T3CKPS1=1; T3CONbits.T3CKPS0=1;
T3CONbits.RD16=1;//允许一次性读写16位
T3CONbits.TMR3CS=0;//选择内部时钟源,TMR3用作内部计数 TMR3H=0;//TMR3数据寄存器清0 TMR3L=0;
T3CONbits.TMR3ON=1;//允许TMR3开始工作
4.3.1.5 ECCP模块初始化
在原理图中,P1A和P1B分别接在L298的IN3和IN4引脚上来控制电机正反转并实现对电机的调速。此时,必须将ECCP模块初始化在PWM模式下,并且采用周期相同。PIC18F458的有四个PWM输出口,在PWM模式下,由TMR2来产生PWM信号周期,实际上要对TMR2进行初始化,并且设置PWM的周期和占空比。具体的初始化过程如下:
CCP1CON=0x0F;//CCP1设置为PWM模式 CCP2CON=0x0F;//CCP2设置为PWM模式 T2CON=0x03;//TMR2的预分频为1:16 T2CONbits.TMR2ON=1;//TMR2开始工作
30