当前位置:首页 > EDA > 电子设计自动化
[导读]摘要:本文介绍了MV05芯片的特性和PWM模块各个寄存器的用途,概述了VC++的基本知识和在VC++6.0中使用MSComm控件开发串口通信程序的方法。针对PWM模块的特点给出了PC机与MV05的通信协议、数据包格式、以及PWM用户自定义

摘要:本文介绍了MV05芯片的特性和PWM模块各个寄存器的用途,概述了VC++的基本知识和在VC++6.0中使用MSComm控件开发串口通信程序的方法。针对PWM模块的特点给出了PC机与MV05的通信协议、数据包格式、以及PWM用户自定义模式下的编程代码和软件界面图。

1 引言

在微电子行业,芯片封装好后无不例外要进行系统级的验证,以检查芯片功能是否正确。 MV05 芯片是本课题组自主设计的一款芯片,本文介绍了一种对该芯片进行测试的方法,上 位机通过芯片内置的一个单独UART 通讯模块向下位机发送指令,再判断芯片执行指令是否 正确,从而确定芯片功能是否符合设计要求。

上位机使用VC++编写控制软件,VC++由于功能强大和应用灵活, 得到Microsoft 系统的 最好支持, 具有图形界面友好、系统资源丰富、操作配置方便、运行速度较快等特点。而串 口通信具有实现简单, 使用灵活方便, 数据传输可靠等优点, 因而用VC++编制串口实时控 制软件十分方便[1]。下位机使用汇编语言编程,汇编语言使用灵活,执行效率高,在芯片测 试方面非常实用。MV05具有8051的所有功能,在其基础上增加了PWM功能,本文只对PWM功能 测试进行介绍。 2 芯片简介 MV05是上海大学微电子研究与开发中心自主研发的一款芯片,完全拥有自主知识产权, 该芯片用于对汽车发动机冷却风扇的控制。此芯片含一个8051系列内核的CPU,它的指令集 与标准8051内核完全兼容。经过重新设计的内核,指令周期变为4个系统时钟周期。相比标 准8051平均效率提高2.5倍。作为标准8051CPU,含有一个8位的CPU内核,8位指令操作代码, 8位操作数,8位数据总线以及16位地址总线。内置两路PWM输出,一个单独的UART通讯模块 , 工作电压3.3V,采用chartered0.35um 2p4m CMOS工艺。

PWM 模块具有自定义输出和动态跟踪外部信号两种功能,通过设置PWMMODE 来选择这两 种功能,而且两路PWM 具有独立和互补的工作模式。当工作在独立模式时,两路PWM 可独立 输出PWM 波。芯片的PWM 功能复用到p1 口上,其中p1.2,p1.3 用于捕获输入,P1.4,P1.5 用于PWM 双通道脉宽调制输出信号。PWM 模块定义的寄存器如下:

PWMMODE: PWM 方式寄存器用于对对PWM 的工作方式进行设置,包括用户自定义模式和捕获外部输入信号模式。

PWMCON: PWM 控制寄存器,用来控制PWM 功能的开启和关闭。

Tcap1CON: 捕获1 控制寄存器,用于设置捕获采样的外部信号周期数

Tcap2CON 捕获2 控制寄存器,用于设置捕获采样的外部信号周期数

UTL0 PWM0输出的周期寄存器低8 位

UTH0 PWM0输出的周期寄存器高8 位

UWL0 PWM0输出的脉宽寄存器低8 位

UWH0 PWM0输出的脉宽寄存器高8 位

UTL1 PWM1输出的周期寄存器低8 位

UTH1 PWM1输出的周期寄存器高8 位

UWL1 PWM1输出的脉宽寄存器低8 位

UWH1 PWM1输出的脉宽寄存器高8 位

UTL0,UTH0 ,UWL0 ,UWH0 ,UTL1,UTH1,UWL1,UWH1 用于用户自定义模式下PWM 波占空比的设置[2]。

3 上下位机通信协议

上下位机进行通信就要约定通信协议。上位机每次向下位机发送数据时首先发送“48 59 4c”3 个数据, 下位机判断接收到的前3 个数据是不是“48 59 4c”,如果是则继续接收后 面的数据,否则丢弃数据。“48,59,4c”后面紧跟的是8bit 数据,下位机接收到该8bit 数 据后进行按位解析,按照约定相应的位进入相应的特殊功能寄存器,下位机配置好特殊功能 寄存器后便会执行相应操作,从而验证芯片功能是否正确。通过该协议可以降低下位机的编 程复杂度,接收一次数据就可以将所需配置的寄存器配置好,从而也提高了通信的效率。PWM 用户自定义模式下的数据包的格式如表1 所示。

PWM 捕获模式下与PWM 用户自定义模式的数据包除了bit4~bit2 三位表示的意义不同 外,其余各位表示的意义相同,捕获模式下 bit4~bit2 用来设置捕获外部信号的周期数: 000:单个周期;001:两个周期;010:4 个周期依次类推周期数成倍增长。

4 上位机软件设计

本文上位机软件使用VC++6.0 开发。使用VC++最重要的就是能够了解控件的属性,熟 练对控件编程。VC++6.0 中的每个控件都有一个ID 号进行标识,每个ID 可以映射成一个变 量或响应函数。VC++6.0 中的类是方法和变量的总和,通过例化该类使用其中的方法和变量, 如本软件中的串口设置对话框:

CSettingDlg setDlg; // 例化

m_nPort = setDlg.m_nPort; //变量传递 将CsettingDlg 中的

m_nTime = setDlg.m_nTime; //变量映射到主控类的变量

m_strSettings = setDlg.m_strSettings;

4.1 串口通信模块设计

在Microsoft Windows 下开发串行通信程序的方法有:(1)利用WindowsAPI通信函 数(2)利用Windows的读写端口函数或开发驱动程序直接对串口进行操作(3)利用第三方 提供的通信类(4)使用串口通信组件。其中第四种方法较简单,只需要对串口进行简单设置[3]。本上位机串口通信程序使用MSComm控件进行开发。

MSComm控件是Microsoft公司提供 的简化Windows下串行接口收发数据的简便方法。MSComm处理数据有两种方法, 查询法和事 件驱动法[4],本文使用事件驱动法。 串口设置对话框独立于主对话框,通过串口设置按钮弹出,用户可以在串口设置对话框 中进行串口选择,设置波特率、停止位、校验位等参数[4]。软件在主控类中定义了一个全局 变量m_strSendString,上位机要发送的数据赋给该变量,然后通过发送函数发送出去。

4.2 PWM 模块

PWM 模块包括PWM 用户自定义模块和PWM 捕获模块,PWM 捕获模块与PWM 用户自定义模 块在控件使用和编程思想上是一样的,只不过数据包各位代表的意义不同,因此这里只介绍 PWM 用户自定义模块,PWM 捕获模块不再赘述。

PWM 用户自定义模块可以设置芯片PWM 模块的工作周期和PWM 波不同占空比,另外还增 加了ADC 联动功能。增加ADC 联动功能是为了测试下一款芯片功能设计的,此次测试并未用 到。PWM 模块的工作周期选择,PWM 波占空比选择和ADC 联动功能选择用复选框表示,用户 根据自己测试需要,选择不同的选项,最后按“确定”按钮将所选项目封装成数据包,按“启 动PWM”按钮将测试指令发送到下位机,进行测试。

根据通信协议将用户选择测试的项目封装成一个8 位数据包,该数据包存放在一个整型 数组里面,将该8 位数据看作是一个字符的二进制表示,根据每位数据所占的权值取加权和 得到一个10 进制数,最后将该10 进制数转化为一个16 进制数,该16 进制数就是最终要封 装的数据包。为了防止用户误选测试项目,软件中作了一些安全处理,当用户选择同类中的 一个测试项目后其它项目会变为不可选。软件界面如图1 所示。

PWM 用户自定义模式下数据包封装函数代码如下:

void CCommWizardDlg::OnButtonUsrMode()

{ UpdateData(TRUE); //数据更新

CString strtemp;

int s1[9]; //存放数据包数据的数组

unsigned char c1;

// 时钟选择

if(this->m_Check1) {s1[6]=0;s1[7]=0;}// 单时钟

if(this->m_Check2) {s1[6]=0;s1[7]=1;}// 双时钟

if(this->m_Check3) {s1[6]=1;s1[7]=0;}// 四时钟

if(this->m_Check4) {s1[6]=1;s1[7]=1;}// 12 时钟

//占空比设置

if(this->m_Check9) {s1[3]=0;s1[4]=0;s1[5]=0;}// 1:1

if(this->m_Check10) {s1[3]=0;s1[4]=0;s1[5]=1;}// 1:2

if(this->m_Check11) {s1[3]=0;s1[4]=1;s1[5]=0;}//1:3

if(this->m_Check12) {s1[3]=0;s1[4]=1;s1[5]=1;}//1:4

if(this->m_Check13) {s1[3]=1;s1[4]=0;s1[5]=0;}//1:5

if(this->m_Check14) {s1[3]=1;s1[4]=0;s1[5]=1;}// 1:6

if(this->m_Check15) {s1[3]=1;s1[4]=1;s1[5]=0;}// 1:7

if(this->m_Check16) {s1[3]=1;s1[4]=1;s1[5]=1;}// 1:8

//PWM -ADC 控制

if(this->m_Check5) {s1[1]=0;s1[2]=0;}// 0 主0 控

if(this->m_Check6) {s1[1]=0;s1[2]=1;}// 0 主1 控

if(this->m_Check7) {s1[1]=1;s1[2]=0;}// 1 主0 控

if(this->m_Check8) {s1[1]=1;s1[2]=1;}// 1 主1 控

s1[0]=0; //用户自定义模式选择

c1=s1[0]*128+s1[1]*64+s1[2]*32+s1[3]*16+s1[4]*8+s1[5]*4+s1[6]*2+s1[7]*1 ;

strtemp.Format("%02X ",c1); //10 进制转化为16 进制

m_strSendString=(CString)"48 59 4C " + strtemp ;

}

5 下位机软件

下位机软件包括串口通信模块和PWM 功能配置模块。串口部分使用中断方式接收数据, 当接收到上位机的命令执行中断服务程序转到PWM 功能配置模块,PWM 功能模块对接收到的 数据进行按位解析,根据通信协议将不同的数据位送到不同的寄存器。该方法对其它测试系 统具有借鉴意义。

6 结束语

本文介绍了上海大学微电子研究与开发中心研发的一款汽车发动机冷却风扇控制芯片, 给出一种使用VC++6.0编写上位机软件对其进行测试的方法。本文的创新点是构造数据封装 函数,将用户要测试的项目一次发送给下位机,下位机按位解析数据包,将相应数据位送入 相应寄存器。通过调试证明该方法是完全可行的,提高了测试效率,测试结果达到了预期设 计指标,芯片功能完全正确。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭