历史上的今天
返回首页

历史上的今天

今天是:2025年01月23日(星期四)

正在发生

2018年01月23日 | 基于PIC18F系列单片机的嵌入式系统设计

2018-01-23 来源:互联网

前 言


嵌入式系统是指以应用为中心,以计算机技术为基础,软、硬件可裁剪,适应应用系统对功能、体积、成本、可靠性、功耗严格要求的专用计算机系统。嵌入式系统是面向应用的,系统的硬件选型和软件开发模式都必须根据具体的应用确定。


永磁无刷直流电动机是电机控制研究领域的热点之一,这与其自身固有的技术优势密切相关:以电子换相取代了有刷直流电动机的机械换相。从根本上革除了普通有刷直流电动机由于电刷换相带来的火花、噪音、高故障率等一系列问题,同时又使系统的性能能够与普通有刷直流电动机相媲美,因此得到了广泛的应用。永磁无刷直流电动机的电子换相离不开电机的转子位置信号,传统的方法是采用霍尔器件或其他位置传感器检测位置信号,这使得系统的维护和制造都不方便,并且由于传感器的工作特性不稳定,给系统的安全运行带来了一些隐患。因此,无位置传感器方案引起了人们的极大兴趣。


本文结合无位置传感器永磁无刷直流电动机控制系统的开发,以 MICroChip 公司的 PIC18F452 单片机 为主控器件,并采用嵌入式实时操作系统μ C/OS-II 作为软件开发平台,详细讨论了嵌入式系统的开发模式与流程。


2. 系统硬件平台设计


嵌入式系统设计的第一步是结合具体的应用,综合考虑系统对成本、性能、可扩展性、开发周期等各个方面的要求,确定系统的主控器件,并以之为核心搭建系统硬件平台。

 


无位置传感器永磁无刷直流电动机控制系统的关键问题是位置检测。目前已经有了很多位置检测方案,其中,反电势法由于简单实用而得以广泛采用。反电势法的原理是:基于电机的三相端电压,通过硬件检测电路或软件算法得到三相反电势过零信号,然后用软件移相得到换相时刻,并在换相时刻按换相逻辑完成换相,触发逆变桥以合适的导通时序工作,从而保证了电机的正常运行。


反电势法的永磁无刷直流电动机无位置传感器控制对系统硬件提出了更高的要求:


① 三个外部中断输入引脚,便于捕捉三相反电势过零信号;


② 至少一个 PWM模块,实现电机的斩波调速;


③ 丰富的定时器资源,完成软件移相、测速等功能;


④ 多通道的 AD转换模块,能够采样速度给定及主电路的电流、电压信号;


⑤ 硬件乘法器,保证速度、电流调节器的快速性;


⑥ 足够的程序和数据存储器,便于系统扩展;


⑦ 高速的系统工作频率,保证系统的强实时性;


⑧ 丰富的通信模块,便于系统与其他嵌入式系统的互连。


对于无位置传感器永磁无刷直流电动机控制系统的设计,有很多专用芯片可供选用,但为了进一步提高系统性能,增强设计的灵活性,多采用 DSP 或专用 单片机 等智能器件。但是,这样在提高系统性能的同时却增加了系统开发成本。为了设计一个高性能、低成本的开发平台,针对应用对系统硬件的要求,考虑到 PIC18F452 单片机的高性价比,选用其作为主控器件。


PIC18F452 是 Microchip 公司推出的一款增强型 8 位 单片机 ,采用精简指令集( RISC )的设计,有两级流水线,最高运行频率可达到 10MIPS ,能够满足系统对实时性的要求;指令总线 16 位宽,数据总线 8 位宽;单片机内部有 32K 字节的 FLASH 程序存储器, 1.5K 字节的数据存储器和 256 字节的 EEPROM ,便于系统的扩展;自带 8 × 8 硬件乘法器;中断资源丰富,提供 18 个中断源,两个中断优先级,并且中断优先级可配置。 PIC18F452 单片机配备了丰富的外围模块,极大地简化了单片机外围电路的设计。同时, Microchip 公司为 PIC18F 系列单片机提供了功能强大的指令集,共 77 条指令,绝大部分指令为单字( 2 个字节)存储,单周期执行,应用代码的存储压缩率高,指令执行效率高。


以 PIC18F452 为主控器件构成的系统硬件框图如图 1所示。


值得说明的是:


① 系统中的换相逻辑由可编程逻辑器件完成,主要是为了提高系统的可靠性,从功能上讲,完全可由 单片机 实现;


② 电机的速度检测,可根据位置信号利用软件计算得来,故省略了速度传感器;


③ 模拟输入为电机的速度给定信号。


3. 嵌入式系统软件开发模式


对于简单的应用系统,系统的软件开发模式通常如图 2 所示,称为前后台系统(也叫无限循环系统)。

 


前后台系统中,应用程序就是一个无限循环。循环中调用函数完成相应的操作,这些操作称为后台任务;中断服务程序处理异步事件,这部分称为前台行为。因为中断服务程序提供的信息一直要等到后台程序运行到该处理这个信息时才得到处理,所以最坏情况下的任务响应时间等于整个循环的执行时间。因为后台循环的执行周期不是常数,所以基于前后台模式的应用软件开发,虽然设计过程简单,但系统的实时性得不到保障。


 


为了提高系统的实时性,可以采用基于嵌入式实时操作系统( RTOS )的软件开发模式。 RTOS 分为两类:非可剥夺型内核和可剥夺型内核,一般商用的都是可剥夺型内核,所以本文只讨论此类 RTOS ,其内核结构如图 3 所示。


RTOS 将整个应用细分为多个任务,每个任务完成特定的功能,并被赋予一定的优先级,拥有自己的任务控制块和栈空间。一般地,每个任务在程序结构上都是一个无限循环,它有多个状态——休眠态、就绪态、运行态、挂起态和中断态等。系统内核总是让就绪态的高优先级任务先运行,中断服务程序可抢占 CPU ,中断服务程序完成时,系统内核让此时就绪态中优先级最高的任务运行(不一定是被中断的任务)。可见,基于 RTOS 的软件开发模式使系统的任务响应时间得到了最优化。更重要的是,这种开发模式将以往面向功能的应用开发转化为面相任务的应用开发,简化了系统设计的逻辑结构;同时,由于有了 RTOS ,屏蔽了应用软件对底层硬件的可见性,将以往软件系统的两层结构转化为三层结构(如图 4 所示),极大地方便了系统的软件扩展与硬件升级。


对于 PIC18F 系列 单片机 ,目前常用的嵌入式实时操作系统有:μ C/OS-II 、 Salvo 、 CMX 、 PIC18OS 等。它们都是可剥夺型的实时内核,详细的比较如表 1 所示。


结合本文的具体应用,综合考虑系统硬件资源及上述几种实时操作系统的特点,最终选用基于操作系统的软件开发模式,并选择μ 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 这三个文件中,因此只要针对具体的硬件改写这些文件,就可以完成移植工作。


表 1 适用于 PIC18F 系列 单片机 的几种嵌入式实时操作系统


名称μ C/OS-IISalvoCMXPIC18OS


版权源码公开的免费实时内核商用实时内核商用实时内核源码公开的免费实时内核

可靠性可靠性高。通过了美国 FAA 认证。可靠性高。可靠性高。未测试。


内核大小可裁剪。内核 ROM 占用量最少 2K , RAM 需求由具体应用而定。内核小,可裁剪。 RAM 需求很小,一般每个任务需 4 ~ 12bytes ,每个事件需 3 ~ 4bytes 。较大。非常小。内核 ROM 占用量小于 1K , RAM 最少需求约 120bytes 。


系统服务丰富。最多支持 64 个任务。支持信号量、事件标志组、消息邮箱、消息队列、时间管理、内存管理等。较丰富。非常丰富。支持信号量、事件管理、消息邮箱、消息队列、内存管理、设备管理、 TCP/IP 协议栈等。少。最多支持 8 个任务,目前仅支持事件标志,最多支持 8 个事件。


适用


硬件


平台非常广泛,已经被移植到了 40 多种 CPU 上(包括 PIC18F 系列 单片机 )。较为广泛,适用于 8051 系列 单片机 、 Microchip 的 8 位单片机、 TI 的 2000 系列 DSP 等。非常广泛,适用于多种型号的 8 位、 16 位、 32 位、 64 位处理器,支持大部分 DSP 。目前仅支持 Microchip 公司的 PIC18F 系列 单片机 。


调试工具较少一般非常丰富少


备注实际开发过程中可针对具体硬件优化内核,从而进一步减少内核代码,提高系统实时性。有三个版本, Salvo Lite 为免费测试版, Salvo SE 为标准版, Salvo PRO 为增强版。有两个版本, CMX-RTX 为完全版, CMX-TINY+ 为简化版本。基于 OSEK/VDX 标准,但目前仅实现了其 Operating System 部分。

推荐阅读

史海拾趣

问答坊 | AI 解惑

直接接在普通开关两端的延时开关电路

本帖最后由 jameswangsynnex 于 2015-3-3 19:59 编辑 如题。直接接在普通开关两端的延时开关电路,不用改变目前的布线方式直接接与开关两端, 可用原开关两端引出两个线作为一个控制信号,也可以加上声控,光控功能, 下图这个电路当可控硅导通 ...…

查看全部问答>

汇编语言入门教程

汇编语言入门教程…

查看全部问答>

弱问 wince怎么用directdraw,想把yuv的格式显示出来

如题,就是有些不懂帮忙科普下,上网貌似搜不到什么…

查看全部问答>

串口驱动的问题(iso7816)

最近我在做9260的iso7816驱动,方便起见,我在atmel_serial.c基础上修改。现在发现驱动发送没有问题,但是接收read时,总是无法读到数据。驱动层中发现硬件上数据是接收到了的,atmel_rx_from_dma服务中dma缓冲区中的数据是对的。tty_insert_flip_s ...…

查看全部问答>

{转载}51单片机 Keil C 延时程序的简单研究

51单片机 Keil C 延时程序的简单研究 by: InfiniteSpace Studio/isjfk, 1.21.2004 任何人都可以在注明原作者和出处的前提下随意转载这篇文章,但不得用于商业目的。   应用单片机的时候,经常会遇到需要短时间延时的情况。需要的延时时间很短 ...…

查看全部问答>

有没人在弄IMX51+WINCE60? 我的系统怎么跑不起来啊,也不知道是软件问题还是硬件问题

有没人在弄IMX51+WINCE60? 我的系统怎么跑不起来啊,也不知道是软件问题还是硬件问题…

查看全部问答>

传说I+2+C=I2C

I2C的工程应用 本工程基于LM3S8962的I2C总线来模拟EEPROM(CAT24C02)传输协议的操作过程,系统简单实用,可以移植到所有的LM3Sxxx系列的MCU上。 在PROGRAM中,采用INT的方式进行数据传输过程的处理和实现,工程的功能实现都是在中断函数中进行的。 ...…

查看全部问答>

如何复制ROM到RAM执行

KEIL中,如何把一个数据段,或者一个函数,在启动后复制到RAM中运行呢? 发散加载后,如何段的地址。 如果函数复制到RAM后,又如何执行它? 谢谢…

查看全部问答>

MSP430单片机的双机串口通讯

求有关MSP430单片机的双机串口通讯的资料,最好能有程序,急~谢谢啦…

查看全部问答>

编译ARM的linux内核的问题

在编译内核时报错了,请问高手这是什么错误啊?…

查看全部问答>