- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于VC串行通信无刷直流电机监控系统
基于VC串行通信无刷直流电机监控系统
摘要:本文重点介绍了基于PC机和MSP430单片机串行通信的具体实现过程。硬件部分解决了通信电平不一致的问题,软件部分给出了PC机和单片机的通信程序,解决了通信过程中数据传输的格式问题。实验结果表明,该方案操作性强,能成功运用于电机的监控系统。
关键词:无刷直流电机 VC++ MSP430 串行通信
1、引言
[1]无刷直流电机调速性能好,利用单片机MSP430专门的PWM功能、丰富的I/O口、快速运算等优点,实现对无刷直流电机的逻辑控制,由于作为下位机的人机交互性不强,难以对电机运行时的关键信息有效处理,本文通过编写VC++上位机程序,采用PC机和单片机串行通信的主从式结构,实现了对电机的监控。
2、电机原理及系统硬件组成
2.1 无刷直流电机运行原理
无刷直流电机的电力电子开关代替有刷电机的换向片,减少了机械磨损及因换向产生的一些危险,系统由电动机本体、位置检测器、逆变器和控制器组成[2]。
电机本体同轴上的位置传感器,根据转子的不同位置,发出逻辑信号,根据实验所得的逻辑表,控制输出回路发出的信号,经MOSFET驱动放大,控制电机电枢电流的导通,以实现“换向”。
2.2 下位机控制系统硬件构成
下位机以MSP430系列的F2274单片机为控制核心,通过检测电机转子信号,单片机I/O口发出相应逻辑信号,与控制转速的PWM信号相“与”,经信号隔离,到电机专用驱动芯片IR2130中,继而导通桥式电路,实现MOSFET的导通。
同时, MSP430单片机的捕获比较模块,捕获三相传感器信号输入的时间,本文试验采用的无刷直流电机为一个机械周期(20个电周期),通过计算得到电机的转速公式为[3]:
;
表示检测到第一次位置信号时的时钟数,表示检测到第二次位置信号时的时钟数,为定时器的时钟主频,*3则表示转过一个电周期所用的时间。通过串行通信,可将转速、电压、电流这些参数传至上位机。
2.3 串行通信的硬件实现
本文采用异步通信模式[4],设定好波特率及数据位和停止位的个数;将PC机的RXD脚与下位机的TXD相连,并共地;利用MAX232芯片实现电压转换,即通过串口线连到PC机上,加上5个1的电容把RS232电平转化为标准TTL电平,再用两个电阻分压,以达到MSP430单片机的电压标准。
3、串行通信软件设计
3.1 上位机串行通信设计
[5]本文上位机通信模块采用MFC的编程方式,界面如图1所示。加入MSComm控件,自动生成CMSComm的类,访问其内部函数,可对PC机串行通信进行控制。
在上位机进行通信之前,在MSComm中,设置通信参数,程序在界面上采用可视化的串口设置方式,提高了软件的通用性和移植性。
setting=m_botelv+,;
if (m_testbit == None)
parity = n;
else if (m_testbit == Odd)
parity = o;
else if (m_testbit == Even)
parity = e;
else if (m_testbit == Mark)
parity = m;
else if (m_testbit == Space)
parity = s;
setting += parity + ,;
setting += m_sbitbit + ,;
setting += m_stopbit;
if (m_comkou == COM1)
m_com.SetCommPort(1);
else if (m_comkou == COM2)
m_com.SetCommPort(2);
m_com.SetSettings(setting);
m_com.SetInputMode(1); //1:表示以二进制方式检取数据
m_com.SetRThreshold(1); //为1表示有一个字符引发一个事件
m_com.SetSThreshold(1); //参数1表示每当串口接收缓冲区中有
//多于或等于1个字符时将引发一个接收数据的OnComm事件
m_com.SetInputLen(0); //设置当前接收区数据长度为0
在查询到CommEvent的值等于2时,表明接收缓存里有了数据。数据是VARIANT型的,首先转化为ColeSafeArray形式,然后再将数组元素分离转化为BYTE型数组,最后再将BYTE里的字符转化为数字。当上位机按下按钮发送数据时,也应通过函数COleVariant()进行强制类型转换,以VARINT的形式传送出去。
当下位机将
文档评论(0)