电文的编码函数与编译里面子函数怎么编写

热门搜索:
下载费用:10 元 &
基于源代码分析的逆向建模 收稿日期: ;修返日期: 基金项目:教育部科学技术研究重点资助项目( 01024) ; 中石化科学技术研究开发资助项目( E03007)基 于 源 代 码 分 析 的 逆 向 建 模*彭四伟, 朱群雄( 北京化工大学 信息科学与技术学院, 北京 100029)摘 要:逆向建模通过对源代码进行分析, 提取出代码中的对象信息、 结构信息、 流程信息等, 生成对象间的关系描述、 结构描述、 系统流程描述等设计模型描述。逆向建模过程中对源代码的分析处理与编译过程的前端处理相似, 只是处理的复杂程度与产生的目标结果不同, 因此可以采用编译技术对源代码进行处理。通过逆向建模可以弥补软件设计中缺少或缺失的模型设计文档, 帮助代码阅读者更好地理解程序, 帮助软件的测试和优化。介绍了对C/C++ 源代码进行逆向建模的实现。关键词:源代码分析; 软件建模; 逆向建模中图法分类号:TP311 文献标识码:A 文章编号: ( 2-03Inverse Modeling Based on Source Code AnalysisPENG Si-wei, ZHU Qun-xiong( College of Information Science Software M Inverse Modeling1 引言( 1) 逆向建模应用建模方法对软件的设计需求、 总体构架、 内部结构等进行描述已经成为软件设计过程中一种行之有效、 并被广泛运用的设计技术[ 1 ~ 4]。软件的逆向建模过程与软件设计过程中的建模过程相反, 是对已经存在的软件源代码进行分析, 逆向生成软件模型描述的过程。人们习惯于把源代码视为软件设计中最主要的成果, 但随着软件工程理论的发展, 人们逐渐意识到软件的设计模型描述能够比源代码更准确、 更深刻和更清晰地反映软件的设计思想和设计框架[ 5]。然而, 软件设计模型的描述文档并非总能与软件的实际设计保持一致。在开发过程中, 由于代码编写与文档编写的不同步, 常常出现模型文档的缺少、 缺失、 与代码不一致等情况, 而通过购买或免费取得的源代码产品则往往没有提供相应的详细模型文档。逆向建模即是通过对源代码的自动分析, 提取出代码各个层次上各类对象的相关信息, 分析各对象间的相互关系并生成多种类型的模型描述文档[ 6]。在许多开发工具中已经加入了逆向建模的工具, 但所提供的功能还比较有限, 能够生成的模型文档也比较简陋。例如在Microsoft的 Visual Studio 开发工具中, 可以通过逆向工程功能生成 Visio 格式的类模型文档, 但文档中只包括了分别对各个类的描述信息, 没有更多关于类体系结构、 对象体系结构等的描述。如何通过逆向建模生成更为详细、 更深层次的模型文档, 还有待进一步的讨论和研究。( 2) 逆向建模的应用通过对源代码的自动分析和逆向建模可以获得代码中的各种信息, 如源文件、 模块、 对象、 变量的定义、 各对象间的引用关系、 类的定义、 类系的组织结构、 系统的工作流程、 模块的控制流程等。通过对分析得到的各类信息进行组织和描述, 可以生成不同 层次、 不 同类 型、 不同 角度 上 的设 计模 型描 述 文档[ 7,8], 从而可以弥补在设计阶段中缺少、 缺失或与源代码不一致的模型文档。对于具有一定规模的软件, 通过直接阅读源代码来理解软件的设计将是极为艰苦的工作。通过逆向建模则可以将代码中的各类信息收集和存储到模型数据库中, 并将软件的设计结构以更为直观的形式( 如关系图、 流程图等) 表达出来, 使阅读者可以更容易地理解软件的组织结构、 设计结构, 还可以快速进行各种信息检索, 从而更有效地阅读、 分析和理解代码[ 9]。对源代码进行深度建模可以获得更为深入的代码信息, 如·25·计算机应用研究2006 年流程控制逻辑、 输入输出逻辑、 模块间的数据相关性和控制相关性分析、 设计模式等。这些信息可以用于软件测试方案和测试数据的自动设计或用于对软件进行自动优化[ 10]。2 对C/C ++源代码的逆向建模2. 1 源代码分析源代码分析是逆向建模的第一个步骤, 这个过程与编译器的前端工作过程相同, 因此可以采用编译器的设计技术来实现逆向建模的源代码分析。利用词法和语法分析器的自动生成器( 采用了 GNU的 Flex 和 Bison) , 按照C/C++ 的语法规范, 可以方便地构造出C/C++ 源代码的解析器, 只是对分析结果的处理与编译过程不同。2. 1. 1 符号信息在对C/C++ 源代码进行分析的过程中, 首先得到的是各类符号信息, 包括源文件名、 函数名、 变量名、 对象名、 类名等,在模型数据库中只记录全局性的符号及其相关属性。不同类型的符号具有不同的模型属性。基本属性如表 1 所示。表 1 符 号的基 本属 性符 号 类 型基 本 属 性全 局 变 量名 称 、 数 据 类 型 、 定 义 位 置 、 注 释全 局 对 象名 称 、 类 、 定 义 位 置 、 注 释函 数名 称 、 原 型 、 类 型 ( 内 联 、 成 员 、 模 板 、 普 通 ) 、 定 义 位 置 、 注 释类名 称 、 类 型 ( 普 通 类 、 模 板 类 ) 、 定 义 位 置 、 成 员 表 、 注 释源 文 件名 称 、 注 释2. 1. 2 符号间的关系软件的模型描述中更为重要的是各类符号间相互关系的描述。基本关系如表 2 所示。表 2 符号间 的基本 关系关 系 类 型关 系 描 述符 号 A 定 义 于 源 文 件 B 中全 局 变 量 / 全 局 对 象 /函 数 A 的 定 义 出 现 在 源 文 件B 中源 文 件 A 包 含 源 文 件 B源 文 件 A 中 出 现 了 #include “ B” 语 句源 文 件 A 引 用 源 文 件 B源 文 件 A 中 的 符 号 与 源 文 件 B 中 的 符 号 存 在 引 用关 系 函 数 A 引 用 全 局 变 量 /全 局 对 象 B函 数 A 中 出 现 了 对 全 局 变 量 / 全 局 对 象 B 的 访 问函 数 A 引 用 函 数 B函 数 A 中 出 现 了 对 函 数 B 的 调 用函 数 A 包 含 类 B在 函 数 A 中 定 义 了 类 B 的 局 部 对 象函 数 A 引 用 类 B函 数 A 的 参 数 中 含 有 类 B 的 对 象 参 数类 A 派 生 类 B类 B 是 类 A 的 派 生 类类 A 包 含 类 B在 类 A 中 存 在 的 数 据 成 员 是 类 B 的 对 象类 A 引 用 类 B在 类 A 的 成 员 函 数 的 参 数 中 含 有 类 B 的 对 象 参 数类 A 引 用 函 数 B在 类 A 的 成 员 函 数 中 调 用 了 函 数 B类 A 引 用 全 局 变 量 /全 局 对 象 B在 类 A 的 成 员 函 数 中 访 问 了 全 局 变 量 / 全 局 对 象 B源文件之间的引用关系、 全局变量/全局对象与函数之间的引用关系构成了整个源代码的组织结构, 类与类之间的派生关系、 包含关系、 引用关系构成了整个源代码的类系结构, 函数与函数之间的引用关系构成了整个源代码的主流程结构。2. 1. 3 注释逆向建模将源代码中的注释视为重要的说明文字, 并记录到相关对象的注释属性中。对注释所属对象的识别是按照就近原则来进行的, 即与符号定义同行的注释以及出现在符号定义上方的注释被视为符号对象的相关注释; 不能确定相关对象的注释则被忽略。2. 1. 4 预编译指令逆向建模时将略过源代码中除#include 和#define 外的预编译指令, 对#include 和#define 的处理与预编译过程相似。当遇到#include 指令时, 先检索源文件表, 检查被嵌入的文件是否已被解析过。若未解析过, 则将被嵌入文件名记入源文件表中, 记录被嵌入文件与宿主文件之间的包含于关系并将解析过程递归地转向被嵌入文件; 若该文件已经被解析过了,则只有记录被嵌入文件与宿主文件之间的包含于关系。当遇到#define 指令时, 将被定义宏名及其宏值记录到宏表中; 当分词过程识别到一个宏名时, 即用其宏值替换该宏名重新进行解析。宏表只记录在内存中, 并不记录到模型数据库中。2. 1. 5 流程结构函数之间的引用关系构成了系统的宏观流程结构, 而函数内部的流程结构则可以通过对流程控制语句的分析来获得。以流程控制语句为分界点, 将函数划分为若干独立代码块, 每一个独立代码块是一个极大无流程转移的代码块。在模型数据库中分别对每一个独立代码块进行标志和记录, 每个独立代码块记录中包括标志号、 所属函数、 代码、 注释等属性。若两个独立代码块( 或独立代码块与其自身) 在执行流程上存在相继执行的可能, 则记两个独立代码块之间存在执行关系, 记录在模型数据库中, 并同时记录相关的条件表达式。独立代码块之间的执行关系即反映了函数内部的流程结构。2. 2 模型数据库模型数据库中主要包括两大类数据: ①对象数据, 记录全局变量、 全局对象、 函数、 类、 源文件、 独立代码块等对象的属性; ②关系数据, 记录各类对象之间的各种相互关系。模型数据库结构如图 1 所示。2. 3 模型描述文档从源代码中提取出各类信息后, 需要以适当的形式组织为模型描述文档。生成的模型描述文档主要有两类: 表格文档和图形文档。符号及其属性用表格的形式描述, 关系则用图形的方式来描述。关系图包括源代码组织结构图( 符号—源文件从属关系图、 源文件包含关系图、 源文件引用关系图) 、 函数耦合图( 全局变量 /全局对象—函数引用关系图、 函数—全局变量 /全局对·35·第 7 期彭四伟等: 基于源代码分析的逆向建模 类轧对象引用关系表FK1 FK2类ID对象ID注释类表 PKIDFK1名称 类型 源文件ID所属命名空间 成员表 注释源文件表 PKID 名称 注释函数表PK IDFK1名称 原型 源文件ID所属命名空间 注释独立代码块表PK IDFK1函数ID代码文本 注释执行关系表FK1 FK2前代码块ID后代码块ID流程控制条件 注释函数引用关系表FK1 FK2宿主ID 被引用ID 注释函数轧类关系表FK1 FK2函数ID类ID关系 注释类派生关系表FK1 FK2基类ID派生类ID派生类型 注释类包含引用关系表FK1 FK2主ID属ID关系 注释源文件关系表FK1 FK2主ID属ID关系 注释对象轧函数 引用关系表FK1 FK2函数ID对象ID注释变量轧函数引用关系表FK1 FK2函数ID对象ID注释全局对象表 PKIDFK1 FK2名称 类ID源文件ID所属命名空间 注释全局变量表PK IDFK1名称 数据类型 源文件ID所属命名空间 注释类轧变量引用关系表FK1 FK2类ID 变量ID注释图1模型数据库结构图象引用关系图) 、 类系结构图( 类派生/包含 /引用关系图) 、 系统流程图( 函数引用关系图) 、 函数流程图( 独立代码块执行关系图) 。在组织结构图中, 用折角的矩形表示源文件, 矩形表示符号, 带箭头的连接线表示关系; 在函数耦合图中, 用折角的矩形表示函数, 矩形表示全局变量和全局对象, 带箭头的连接线表示关系; 类系结构图直接采用 OMT 表示法进行描述; 在系统流程图和函数流程图中, 用矩形表示函数和独立代码块, 带箭头的连接线表示执行关系并在连接线上标注运行条件。模型文档采用 Microsoft Office 应用程序对象模型来生成,其中表格文档采用 Microsoft Word 对象模型生成, 关系图采用Microsoft Visio 对象模型生成。在自动生成的关系图中, 图元被均匀分布到页面上, 用户可以在生成文档上对布局进行重新调整以达到更理想的表达效果。2. 4 深度分析通过源代码分析所获得的基本模型信息能
文档加载中……请稍候!
下载文档到电脑,查找使用更方便
10 元 &&0人已下载
还剩页未读,继续阅读
&span style=&font-family: 微软雅黑, &Microsoft YaHei&;&>一、&/span>&/strong>&span style=&font-family: 微软雅黑, &Microsoft YaHei&;&>本站提供全自助服务,购买后点击下载按钮可以下载到你电脑或手机(系统不会发送文档到您的邮箱),请注意查看下载存放位置;&/span>&/p>&p>&strong>&span style=&font-family: 微软雅黑, &Microsoft YaHei&;&>二、&/span>&/strong>&span style=&font-family: 微软雅黑, &Microsoft YaHei&;&>本站具有防盗链功能,所以不要使用迅雷、旋风、网际快车等第三方辅助下载工具(不支持&span style=&font-family: 微软雅黑, &Microsoft YaHei&;&>QQ浏览器&/span>),否则下载下来的文件只是网页或乱码;&/span>&br/>&/p>&p>&strong>&span style=&font-family: 微软雅黑, &Microsoft YaHei&;&>三、&/span>&/strong>&span style=&font-family: 微软雅黑, &Microsoft YaHei&;&>由于网络原因、下载知识欠缺、本地电脑&span style=&font-family: 微软雅黑, &Microsoft YaHei&;&>或&/span>手机阻止下载等问题无法解决时,需要提供以下&/span>&span style=&font-family: 微软雅黑, &Microsoft YaHei&; color: rgb(255, 0, 0);&>任意一条信息&/span>&span style=&font-family: 微软雅黑, &Microsoft YaHei&;&>给我们,我们才能更及时地为你服务:&/span>&br/>&/p>&p>&span style=&font-family: 微软雅黑, &Microsoft YaHei&;&>3.1、如果是注册的会员,请告诉我们你的会员账号;&/span>&/p>&p>&span style=&font-family: 微软雅黑, &Microsoft YaHei&;&>3.2、如果是游客下载的,请告诉我们你下载时填写的手机或者邮箱;&/span>&/p>&p>&span style=&font-family: 微软雅黑, &Microsoft YaHei&;&>3.3、如果是微信或QQ快捷登陆的,请告诉我们你的微信或QQ昵称;&/span>&/p>&p>&span style=&font-family: 微软雅黑, &Microsoft YaHei&;&>3.4、如果这些你仍然无法确定,请告诉我们你的付款单号(我们可以通过单号反过来查询你的账号和下载记录)&/span>&a href=&https://www.jinchutou.com/i-93.html& target=&_blank& style=&text-decoration: color: rgb(255, 192, 0); font-family: 微软雅黑, &Microsoft YaHei&;&>&span style=&color: rgb(255, 192, 0); font-family: 微软雅黑, &Microsoft YaHei&;&>看看什么是单号?&/span>&/a>&span style=&font-family: 微软雅黑, &Microsoft YaHei&;&>;&/span>&/p>&p>&strong>&span style=&font-family: 微软雅黑, &Microsoft YaHei&;&>四、&/span>&/strong>&span style=&font-family: 微软雅黑, &Microsoft YaHei&;&>需要下载哪份文档,请发送文档网址,而不是截图,更不要直接把标题给我们;&/span>&br/>&/p>&p>&strong>&span style=&font-family: 微软雅黑, &Microsoft YaHei&;&>五、&/span>&/strong>&span style=&font-family: 微软雅黑, &Microsoft YaHei&;&>其它下载常见问题详见:&/span>&a href=&https://www.jinchutou.com/info-0-23-1.html& target=&_blank& style=&font-family: 微软雅黑, &Microsoft YaHei&;&>https://www.jinchutou.com/info-0-23-1.html&/a>&br/>&/p>&p>&br/>&/p>" /> &span id=&_baidu_bookmark_start_2& style=&display: line-height: 0&>?&/span>&span id=&_baidu_bookmark_start_4& style=&display: line-height: 0&>?&/span>&/p>&p>&span style=&font-family: 微软雅黑, Arial, &Times New Roman&; font-size: 14 background-color: rgb(255, 255, 255);&>& & 鉴于本网发布稿件来源广泛、数量较多, 系统审核过程只针对存在明显违法有害内容(如色情、暴力、反动、危害社会治安及公共安全等公安部门明文规定的违法内容)进行处理,难以逐一核准作者身份及核验所发布的内容是否存在侵权事宜, 如果著作权人发现本网已转载或摘编了其拥有著作权的作品或对稿酬有疑议, 请及时与本网联系删除。&/span>&/p>&p>&strong style=&color: rgb(102, 102, 102); font-family: 微软雅黑, Arial, &Times New Roman&; font-size: 14 white-space: background-color: rgb(255, 255, 255);&>& & 侵权处理办法参考版权提示一文:&/strong>&a href=&https://www.jinchutou.com/h-59.html& target=&_blank& textvalue=&https://www.jinchutou.com/h-59.html&>https://www.jinchutou.com/h-59.html&/a>&span style=&color: rgb(102, 102, 102); font-family: 微软雅黑, Arial, &Times New Roman&; font-size: 14 background-color: rgb(255, 255, 255);&>&&/span>&/p>&p>&span style=&color: rgb(102, 102, 102); font-family: 微软雅黑, Arial, &Times New Roman&; font-size: 14 background-color: rgb(255, 255, 255);&>1、如涉及内容过多,需要发送邮箱,请电子邮箱到,我们会及时处理;&/span>&/p>&p>&span style=&color: rgb(102, 102, 102); font-family: 微软雅黑, Arial, &Times New Roman&; font-size: 14 background-color: rgb(255, 255, 255);&>2、系统一旦删除后,文档肯定是不能下载了的,但展示页面缓存需要一段时间才能清空,请耐心等待2-6小时;&/span>&/p>&p>&span style=&color: rgb(102, 102, 102); font-family: 微软雅黑, Arial, &Times New Roman&; font-size: 14 background-color: rgb(255, 255, 255);&>3、请版权所有人(单位)提供最起码的证明(证明版权所有人),以便我们尽快查处上传人;&/span>&/p>&p>&span style=&color: rgb(102, 102, 102); font-family: 微软雅黑, Arial, &Times New Roman&; font-size: 14 background-color: rgb(255, 255, 255);&>4、请文明对话,友好处理;&/span>&/p>&p>&span style=&color: rgb(102, 102, 102); font-family: 微软雅黑, Arial, &Times New Roman&; font-size: 14 background-color: rgb(255, 255, 255);&>5、为了杜绝以前再有类似的侵权事情,可以为我们提供相应的关键字,便于管理人员添加到系统后能有效排除和抵制与您(贵单位)相关版权作品上传;&/span>&/p>&p>&span id=&_baidu_bookmark_end_5& style=&display: line-height: 0&>?&/span>&span id=&_baidu_bookmark_end_3& style=&display: line-height: 0&>?&/span>&/p>" /> &span style=&color: rgb(85, 85, 85); font-family: 微软雅黑; background-color: rgb(255, 255, 255);&>& & 为了维护合法,安定的网络环境,本着开放包容的心态共建共享金锄头文库平台,请各位上传人本着自律和责任心共享发布有价值的文档;本站客服对于上传人服务前,有以下几点可提前参阅:&/span>&/p>&p>&span style=&color: rgb(85, 85, 85); font-family: 微软雅黑; background-color: rgb(255, 255, 255);&>1、本站上传会员收益见:&a href=&https://www.jinchutou.com/h-36.html& target=&_blank&>https://www.jinchutou.com/h-36.html&/a> &/span>&/p>&p>2、本站不会为任何刚注册的上传会员特批解除上传限制,普通会员每天可以上传50份,值班经值会审核其上传内容,请自行观察自己上传的文档哪些在“临时转换中”(审核通过),哪些在审核拒绝中,连续坚持几天都没有任何文档被拒的情况下,根据文档质量和发布分类是否正常等考量合格后值班经理会特批升级会员等级,相应的权益也同时上升。&/p>&p>3、上传人本着友好、合作、共建、共享的原则,请耐心仔细的查看《&a href=&https://www.jinchutou.com/i-143.html& target=&_blank&>违禁作品内容处理规则》;&/a>&a href=&https://www.jinchutou.com/i-143.html& target=&_blank&>https://www.jinchutou.com/i-143.html&/a>&/p>&p>4、上传人可以观注本站公告,查看其它被公示永久封禁的原因&a href=&https://www.jinchutou.com/news-1.html& target=&_blank&>https://www.jinchutou.com/news-1.html&/a>&/p>&p>5、其它问题可以参阅上传常见问题指引:&a href=&https://www.jinchutou.com/info-0-25-1.html& target=&_blank&>https://www.jinchutou.com/info-0-25-1.html&/a>&/p>" />基于数字信号控制器的无刷直流电机控制器
无刷直流电机的良好特性与其控制器的性能密切相关。介绍基于Microchip公司的数字信号控制器(DSC)dsPIC30F2010设计的300V无刷直流电机的控制器,阐述了利用这种DSC控制无刷直流电机的原理,详细介绍了该控制器的硬件结构与软件流程。实验结果证明了该控制器的可行性。
无刷直流电机具有与普通直流电机相似的线性机械特性和转矩/电流特性,在较高的转速下仍具有较高的可靠性,其良好的工作特性与无刷直流电机控制器的性能密切相关。传统的无刷直流电机的控制器主要有两类,一类是专用控制集成电路,如Motorola公司的无刷直流电机控制器MC33035和电子测速器MC33039[1],专用集成电路结构简单、成本低廉,但是复杂的控制策略和算法难以通过硬件实现;
另一类控制器是以单片机或者DSP为控制核心的无刷直流电机控制器,单片机外设丰富、中断处理能力强,但是软件编程实现复杂的数学运算需占用大量的程序空间,DSP计算能力强,但其引脚数目多,控制较复杂。
Microchip公司的数字信号控制器DSC(Digital Signal Controller)综合了单片机与DSP的出色性能,是嵌入式器设计的理想单芯片选择。本文介绍了基于一款数字信号控制器dsPIC30F2010设计的永磁无刷直流电动机控制器,并通过负载实验验证了该控制器的可行性。
2 dsPIC30F2010器件概述[2]
dsPIC30F2010数字信号控制器以16位单片机作为其内核,具有强大的外设和快速中断处理能力,并融合了管理高速计算活动的DSP功能,28引脚的低引脚数封装形式使其成为电机控制领域的理想选择。它具有以下主要特性:
(1)改进的哈佛结构和最大30MIPS的指令执行速度使程序代码的执行效率更高,优化的C编译指令集,使控制程序的编写、调试和运行更加方便快捷;
(2)16位宽的数据总线提供8位单片机两倍的数据处理能力和速度,12K程序存储器提供了比传统单片机更大的程序空间,可擦写10万次的增强型闪存程序存储器使软件与硬件的结合更加方便;
(3)与传统单片机软件编程相比,DSC中两个40位宽的累加器和17×17位单周期硬件乘法器使复杂的控制策略和算法的实现更加快速;
(4)具有一个转换速率为500Ksps 的10位模数转换器(A/D)和三个16位定时/计数器,丰富的外设满足了电机控制的各种要求;
(5)具有一个专用的电机控制MCPWM模块,该模块有6个具备3占空比发生器的PWM I/O引脚,16位精度。可以通过软件编程实时更改PWM频率并且使其分别工作于互补或者独立的输出模式以及边沿和中心对齐模式,另外还可以实现手动输出控制。用于互补模式的死区时间控制可以避免驱动电路的直通故障。PWM特殊事件触发器实现了PWM与A/D转换的同步。
3 基于dsPIC30F2010的无刷直流电机控制器的原理[3]
图1为无刷直流电动机及其控制系统框图,其中无刷直流电动机本体、转子位置传感器和控制电路是最基本的组成部分。无刷直流电动机的结构与永磁同步电动机类似,永磁磁极位于转子上,定子中放置多相定子绕组。转子位置传感器的作用是获得转子位置信号,来控制功率开关器件按一定顺序接通或关断相绕组,以驱动电机转动。
转子位置传感器通常是由霍尔集成元件构成,霍尔元件的数目以及在电机定子中放置所间隔的电角度由无刷直流电机的相数决定。
图1 无刷直流电机控制系统框图
本文的控制对象为一台三相无刷直流电机,三个霍尔元件间隔60°电角度。图2为三相霍尔位置信号的波形,根据在不同时刻相绕组的通电情况,分为6个工作区间,每个区间为60°电角度,在每个工作区间内有特定的两相绕组通电,图中给出了每个工作区间内霍尔位置信号编码和功率开关导通状态。
图2 霍尔位置信号编码及导通开关
从图2中可以看出,三相霍尔位置信号可以构成一个三位二进制编码,每个二进制编码代表了转子所处位的置空间。在控制程序的开始建立驱动表,在得到位置编码之后查驱动表就可以驱动相应的功率开关。控制系统中,为了获得位置信号,位置传感器与dsPIC30F2010的中断输入CN(Change Notification)引脚相连,CN引脚上的电平发生变化会产生中断。在CN中断服务程序中,由位置信号编码查取应该导通的功率开关并使能相应的输出引脚,驱动电机转动。表1为60°无刷直流电机功率开关驱动表。
表1 60°无刷直流电机功率开关驱动表
位置编码Sa、Sb、Sc
导通功率开关
驱动表序号
与普通直流电动机相似,无刷直流电动机的转速与加在绕组两端的电压成正比,改变加在定子绕组两端的电压就可以实现无刷直流电动机的调速。在控制系统中,是通过改变加在功率开关器件上PWM驱动信号的占空比来调速的。dsPIC30F2010的电机控制MCPWM模块是专为电机控制应用而设计的,它可以提供六个由PWM信号驱动的PWM输出。
MCPWM有一个专用的16位的PTPER(Time Base Period Register)时基周期寄存器和PTMR定时器寄存器(Timer Register),PTMR定时器每隔一个指令周期TCY进行一次递增计数,并与PTPER寄存器的值进行比较,当两者匹配时,开始一个新的周期。因此,改变PTPER寄存器的值就可以改变PWM的频率。控制占空比的方法与此类似,只需改变三个PDC占空比寄存器中的值就可以实现。
4 无刷直流电机控制器设计方案
4.1 控制器的硬件设计
图3为基于dsPIC30F2010的无刷直流电机控制器的硬件结构图。霍尔位置信号与CN中断输入引脚相连,AN0引脚被软件配置为A/D转换模拟输入,将0~5V电压通过A/D转换作为速度给定。本文所控制的无刷直流电机额定功率500W,额定电压300V。电机的电源由工频电源经二极管整流桥模块获得,所采用的模块的参数为35A/1000V。
为了获得稳定的控制电压,控制电源采用高性能开关电源。本文采用HF10W-DL-C型双路输出开关电源,一路输出为恒定的5V,给单片机供电,另一路输出为15V,给无刷直流电机的霍尔元件以及MOSFET驱动集成芯片IR2110供电。
功率开关器件采用德国英飞凌(Infineon)公司生产的MOSFET 20N60S,额定电压600V,额定电流20A。IR2110是美国国际整流器公司(International Rectifier Company)生产的高性能MOSFET 驱动集成芯片,该芯片采用自举技术实现同一集成电路可同时输出两个驱动逆变桥中侧与低压侧的通道信号。
IR2110的SD引脚为保护信号输入端,当该引脚接高电平时,IR2110的输出信号全被封锁。控制系统中,功率驱动电路的负端通过一个小电阻接地。若通过功率开关的电流过大,使得检测电阻上的电压超过设定的安全工作电压时,比较器的输出与SD端相连为高电平,封锁全部PWM信号,起到对控制器和无刷直流电机的保护作用。
图3 高压无刷直流电机控制系统硬件结构图
4.2 控制器的软件设计
图4 闭环控制主程序流程图
为了克服负载增加所造成转速下降,本文采用无刷直流电机转速闭环控制,速度控制环提供了对速度的(Proportional and Integral ,PI)比例和积分控制。在驱动程序中,使用TMR3作为定时器来测量电机的转速。图4为闭环控制主程序流程图,程序的开始完成对MCPWM模块和A/D转换模块的初始化以及各功能引脚的配置,当按下电机起动键时,CN中断引脚读取霍尔位置编码,查驱动表,更改OVDCON寄存器中的值。
OVDCON寄存器为手动输出改写寄存器,它的值决定六路PWM引脚的工作状态。当DSC检测到电机的实际转速与给定速度存在偏差时,PI控制服务子程序计算比例和积分速度误差,来改变PDC占空比寄存器的值,使无刷直流电机的实际转速与给定速度保持一致。
控制程序的编写与调试是在Microchip公司的集成开发环境MPLAB IDE中完成的。MPLAB IDE拥有32位调试环境应具备的所有高级编辑/编译/调试功能,它不仅集成了软件开发功能,而且集成了许多硬件开发工具,如软件模拟器MPLAB SIM、在线调试/开发编程器MPLAB ICD2,通过ICD2将程序烧写进DSC非常简单方便。
5 实验与结论
为了验证本文所设计的无刷直流电机控制器的可行性,对实验样机及其控制器进行了负载实验。样机的额定功率500W,额定电压300V,额定转速1500r/min。图5~图7为当电机从空载到额定负载时,输出功率、转速与效率随着负载转矩的变化关系。
图5 不同负载转矩下的输出功率
图6 不同负载转矩下的转速
图7 不同负载转矩下的效率
从实验结果可以看出,本文所设计的基于数字信号控制器dsPIC30F2010的无刷直流电机控制器工作正常。该控制器比相同功能的DSP控制器结构简单,且控制程序采用高级语言C30语言编写,节省了程序代码占用的存储空间。与传统的专用集成电路相比,可以通过软件实现速度的闭环控制。数字信号控制器将在无刷直流电机控制系统领域广泛应用。
(摘编自《电气技术》,原文标题为“基于数字信号控制器的无刷直流电机控制器”,作者为张冉、王秀和、朱常青。)
责任编辑:
声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
今日搜狐热点

我要回帖

更多关于 编码函数 的文章

 

随机推荐