沈阳航空工业学院毕业设计(论文)
开 始设置时钟频率等初始化初始化端口选择串口和设置波特率设置占空比初值为0通过键盘设置转动还是停止N设置为正转?YGPG13=1GPG14=0设置为反转?YGPG13=0GPG14=1N设置转速初值Y测量值=设定值?N通过PID算法设置PWM占空比
图4.3 主程序流程图
- 32 -
沈阳航空工业学院毕业设计(论文)
4.6各模块程序设计
4.6.1系统初始化
本设计的系统初始化流程图如图4.4所示。
开 始设置GPB1为PWM输出端设置GPG5和GPG6为正反转控制端制定INT0子程序并测量转速结 束
图4.4 系统初始化
4.6.2中断子程序设计
中断是计算机的一种基本工作方式,几乎所有的 CPU 都支持中断,中断功能可以解决CUO内部运行速度远远快于外部总线速度而产生的等待延时问题。S3C2440A支持多32个中断源,中断请求可由内部功能模块和外部引脚信号产生。ARM9核可以识别两种类型的中断:正常中断请求(Normal Interruptuest,IRQ)和快速中断请求(Fast Interrupt Request,FIQ),都是用于外部设备向CPU请求中断服务,一般情况下都是采用IRQ中断,因此,S3C2440A所有中断都可以归类为 IRQ 或 FIQ。S3C2440A 的中断控制器对每一个中断源都一个中断悬挂位(Interrupt Pending Bit)。
S3C2440A 中断控制器的介绍: SRCPND—源中断指示寄存器
SRCPND寄存器32位中的每一位对应着一个中断源,每一位被设置为1,则相应的中断源产生中断请求并且等待中断被服务。因此,这个寄存器表明了哪个中断源在等待中断请求被处理。注意,SRCPND寄存器的每一位是由中断源自动设置的,而不管INTMSK寄存器中的屏蔽位是否置1。另外,SRCPND寄存器不影响中断控制
- 33 -
沈阳航空工业学院毕业设计(论文)
器的优先级逻辑。
在指定中断源的中断服务程序中,SRCPND寄存器相对应的位必须被清除,这样才可以正确相应来自同意中断源的中断请求。如果从ISR返回而没有清除相对应的位,也就是SRCPND寄存器中的对应位还是1,那么就会一直相应这个中断请求。
SRCPND中相应的中断位清除的时间依赖于用户的需求,如果想要从同一中断源接受另一次有效的中断请求,在第一次就应该清除相应的位,并且使能中断。编写程序时可以通过向SRCPND寄存器的相应位写“1”,这样就可以清除该位。
下表位SRCPND寄存器的地址和位定义说明。 INTMOD——中断模式寄存器
中断模式寄存器(INTMOD)的32位中的每一位对应一个中断源,当INTMOD的每一位都设置位1,则ARM内核将以FIQ模式相应中断,都这将以IRQ模式相应中断。
INTMOD寄存器的定义如下表 INTPND——中断请求寄存器
中断请求寄存器32位中的每一位对应着相应的中断请求,经过优先级逻辑后,INTPND寄存器只能有一位被设置为1,并且向ARM产生中断请求。在IRQ中断服子程序,能够读取这个寄存器的值来决定32个中断源的那一个中断被服务。
同SRCPND寄存器,在中断服务程序里,这个寄存器的相应位需要被清除。可以向INTPND寄存器写一个数据1,来清除寄存器的指定位。
INTMSK——中断屏蔽寄存器
在INTMSK寄存器中,32位依次对应着每个中断源,如果指定位被设为1,ARM将不响应中断源的中断请求。如果屏蔽位为0,则中断请求可以被响应。
INTOFFSET——中断偏移寄存器
中断偏移寄存器INTOFFSET中的值显示了INTPND寄存器中哪一个IRQ的中断请求,这个位在清除SRCPND和INTPND后将自动清除。
SUBSRCPND——次级中断指示寄存器 INTSUBMASK——次级中断屏蔽器 EXTINTn——外部中断控制寄存器n
外部中断控制寄存器可以控制外部中断信号有效方式,外部中断信号有效方式
- 34 -
沈阳航空工业学院毕业设计(论文)
可以设置为电平触发和边沿触发,具体内容见下表
EINTPND——外部中断判断寄存器
EINTPND用来判断外部的20个中断源(EINT[23:4]),用户可以通过向EINTPEND寄存器的相应位写“1”,这样就可以清除改位。
EINTMASK——外部中断屏蔽寄存器 外部中断子程序流程图如图4.5所示
开 始定时1s有ENT0中断?Yk=k+1Nn=k/16返 回
图4.5 外部中断
4.6.3PWM调速程序设计
在直流电机调速系统中,数字PID是一种比较成熟的算法。数字PID算法的大致原理是,将设定速度与实际速度之间的偏差记为e,利用e的比例、积分和微分通过线性组合构成的控制量U去控制对象。数字PID算法的表达式如下:
UK?KP[ek?TTKK?j?0ej?TdT(ek?ek?1)]?U0(4.1)
其中ek为第k个采样时刻的速度偏差值,可演化为增量式数字PID算法表达式:
UK?Cp(ek?ek?1)?Ciek?Cd(ek?2ek?1?ek?2)?Uk?1
(4.2)
- 35 -

