基于PIC单片机的永磁无刷直流电动机控制系统的开发
性,可以采用基于嵌入式实时操作系统(RTOS)的软件开发模式。RTOS分为两类:非可剥夺型内核和可剥夺型内核,一般商用的都是可剥夺型内核,所以本文只讨论此类RTOS,其内核结构如图3所示。
RTOS将整个应用细分为多个任务,每个任务完成特定的功能,并被赋予一定的优先级,拥有自己的任务控制块和栈空间。一般地,每个任务在程序结构上都是一个无限循环,它有多个状态——休眠态、就绪态、运行态、挂起态和中断态等。系统内核总是让就绪态的高优先级任务先运行,中断服务程序可抢占CPU,中断服务程序完成时,系统内核让此时就绪态中优先级最高的任务运行(不一定是被中断的任务)。可见,基于RTOS的软件开发模式使系统的任务响应时间得到了最优化。更重要的是,这种开发模式将以往面向功能的应用开发转化为面相任务的应用开发,简化了系统设计的逻辑结构;同时,由于有了RTOS,屏蔽了应用软件对底层硬件的可见性,将以往软件系统的两层结构转化为三层结构(如图4所示),极大地方便了系统的软件扩展与硬件升级。
对于PIC18F系列单片机,目前常用的嵌入式实时操作系统有:μC/OS-II、Salvo、CMX、PIC18OS等。它们都是可剥夺型的实时内核,详细的比较如表1所示。
表1 适用于PIC18F系列单片机的几种嵌入式实时操作系统
结合本文的具体应用,综合考虑系统硬件资源及上述几种实时操作系统的特点,最终选用基于操作系统的软件开发模式,并选择μC/OS-II作为系统软件平台。
4.基于μC/OS-II的应用软件开发
μC/OS-II是一个可移植、可固化、可裁剪及可剥夺型的多任务实时内核,应用开发时首先必须完成其在特定硬件上的移植。μC/OS-II在编写的过程中就充分考虑到了可移植性,它的绝大部分代码都由ANSI C写成,与处理器相关的代码集中在OS_CPU.H、OS_CPU_A.ASM、OS_CPU_C.C这三个文件中,因此只要针对具体的硬件改写这些文件,就可以完成移植工作。
移植成功之后,就可以开始应用程序的编写工作。RTOS将面向功能的应用开发转化为了面相任务的应用开发,因此软件开发的过程就是将应用系统按照功能细分为多个任务,然后实现每个任务,并为任务确定合适的优先级;对于实时性要求高的操作,需要编写相关的中断服务程序。
永磁无刷直流电动机正常运行的基本条件是:在最佳换相时刻按最佳换相逻辑换相。这个过程对实时性要求很高,所以由中断服务程序完成。反电势过零时,程序进入反电势过零中断服务程序,该中断服务程序根据当前的电机速度设定软件移相定时器的溢出值;当软件移相定时器溢出中断时,程序进入移相定时器中断服务程序,显然,此时即最佳换相时刻。因此,在移相定时器中断服务程序中按最佳换相逻辑完成换相,就能保证电机的正常运行。此外,对于过流、过压、欠压等紧急故障的处理也必须由相应的中断服务程序完成。系统还要完成的功能有:定时采样速度给定,并将采样结果经过调节器转化为PWM波的占空比;响应键盘输入;显示电机的速度、PWM波占空比等系统状态信息;与上位PC机串口通信;系统非紧急故障的处理等等。这些功能对实时性的要求不是很高,故由任务级完成。应用系统的任务如表2所示。
表2 应用系统任务列表
系统运行时,首先进行系统初始化操作,并创建任务。所有新创建的任务都被置为就绪态,操作系统内核首先调用就绪态中优先级最高的任务运行。系统运行过程中,始终保证运行任务的优先级高于就绪态中的所有任务。当运行着的任务因等待某一事件或延时而被挂起,或者有更高优先级的任务进入了就绪态,则内核中止当前运行着的任务,把CPU的使用权交给就绪态中优先级最高的任务。当中断发生时,系统运行中断服务程序,中断返回时,系统内核将进行任务调度,将优先级最高的就绪态任务转为运行态。例如,系统运行过程中发生了AD采样完成中断,程序进入AD采样完成中断服务程序;中断服务程序向邮箱ADResult发送AD采样结果,由于任务TaskAD早先因等待邮箱ADResult而被挂起,所以此时任务TaskAD的状态被转为就绪态;中断返回时,内核进行任务调度,由于TaskAD是就绪态中优先级最高的任务(系统正常运行时TaskErr任务始终为挂起态),因此不管原先被中断的任务是什么,系统都将运行任务TaskAD,这就保证了任务TaskAD具有足够快的任务响应速度。TaskAD执行一个循环后,又因等待邮箱ADResult而转为挂起态,内核再次进行任务调度,调用就绪态中的最高优先级任务运行。
5. 结论
本文结合无位置传感器永磁无刷直流电动机控制系统的设计,针对系统具体要求,确定了以PIC18F452单片机为主控
- 基于PIC单片机的智能型漏电断路器设计(11-25)
- 基于PIC单片机的无线实时监控防盗系统的设计与实现(11-18)
- PIC单片机键盘矩阵扫描C语言程序(12-02)
- PIC单片机控制第一个发光管闪动程序(12-02)
- PIC单片机驱动LCD12864液晶显示闪动字体程序(12-02)
- PIC单片机控制8位流水灯C语言程序(12-02)