基于MSP430系列微处理器课程设计的研究与探索
2019-06-03许晓荣
许晓荣, 骆 懿, 黄 怡
(杭州电子科技大学通信工程学院,杭州310018)
0 引言
《微处理器与接口技术》(或《单片机与接口技术》)和《微处理器与接口技术课程设计》(或《单片机与接口技术课程设计》)是大部分工科院校电子信息与电气工程类专业的重要基础课和配套的实践课程。课程目的是让学生了解微处理器/微控制器计算机应用系统的基本组成,以及常见外围接口电路的设计方法[1-2]。近年来,国内许多高校电子信息与电气工程类专业开设的《微处理器与接口技术》课程采用了超低功耗16位RISC结构MSP430系列单片机[1-3]。
作者所在学院开设的《微处理器与接口技术课程设计》硬件平台采用MSP430F5529 LaunchPad(最小系统)核心板[3-4]。并自制了与MSP430F5529LP匹配的接口扩展板,包括:MSP430F5529LP主接口扩展板、ESP8266 WiFi模块扩展板和包含多个传感器模块的不同类型接口扩展板。结合CCSv6软件开发环境和C语言编程,构建MSP430F5529单片机低功耗应用的口袋实验板开发平台。
1 MSP430F5529微处理器实验平台
MSP430F5529 LaunchPad核心板由超低功耗16位单片机MSP430F5529、USB接口、EZ-FET板载仿真器、 外 接 引 脚 排 线、 按 键 组 成[3,5-6]。 在MSP430F5529LP核心板基础上,自制了MSP430F5529LP主接口扩展板。该扩展板与核心板配合使用,通过核心板外接引脚排线插槽与扩展板连接。主接口扩展板上包括FG12864A液晶显示屏、4个按键、3个电容式触摸键、ADC、电位器、MicroSD Card插槽、蜂鸣器等。自制了WiFi模块(ESP8266)扩展板和 MSP430F5529LP BoostPack 底板[7],可以实现MSP430F5529单片机的LCD中英文与图片显示程序设计、ADC程序设计、按键与电容触摸键程序设计、SD卡读写程序设计、WiFi无线遥控收发器程序设计[7]等多个基础性实验例程。结合CCSv6软件开发环境和C语言编程,构建基于MSP430F5529单片机低功耗应用的实验板开发平台[8-10]。MSP430F5529LP核心板、接口扩展板与BoostPack底板如图1所示。
CCSv6(Code Composer Studio)具有环境配置、源文件编辑、程序调试、跟踪和分析等功能的集成开发环境。它针对MSP430F5xx/6xx系列单片机进行软件开发。通过创建工程、编写C程序、配置工程文件、编译和调试工程、通过EZ-FET板载仿真器在开发板上运行程序,实现 MSP430 单片机软件开发[1,3,5]。CCSv6调试程序界面如图2所示。
借鉴国内针对MSP430F5529 LaunchPad微处理器核心板开发的综合电子设计实验平台[11-12]和MSP430G2553 Launchpad微处理器核心板开发的接口扩展板设计经验[1,13]。对MSP430系列微处理器与接口技术课程设计实践课进行了课堂教学模式改革,进一步完善和优化MSP430F5529LP主接口扩展板和BoostPack底板的设计、研制包含ESP8266 WiFi模块和多个传感器模块的不同类型接口扩展板[6,14]。借鉴MSP430系列微处理器在通用测控系统[14]、微弱信号检测[15]等多个领域的低功耗应用,将其应用于课程设计研究与实践。
图1 MSP430F5529LP核心板、接口扩展板与BoostPack底板
图2 CCSv6调试程序界面
2 LCD汉字/图片的循环滚动显示案例
目前,户外广告多采用点阵式LCD显示循环滚动的汉字/图片。学生采用定时器结合LCD,在本实验板开发平台上实现了LCD汉字/图片的循环滚动显示,循环滚动时间可由定时器进行设置。
MSP430F5529LP接口扩展板上的FG12864A液晶屏为64×128点阵式LCD。LCD与MSP430F5529采用SPI模式实现数据传输,数据传输为单向,数据只允许写入[3,5-6]。它通过16脚软性PCB排线与扩展板接口线连接。16脚数据排线包括:8位数据线、LCD电源线、LCD片选信号、命令数据切换信号、数据传输时钟信号、LCD复位、从设备输入主设备输出信号、地线等。这些信号线主要与MSP430F5529单片机的GPIO口(P3/P6)和电源线、地线相连接。通过单片机控制GPIO口输出电平,设置点阵像素电平的高低,通过字模工具PCtoLCD2002生成点阵式字符、汉字、图像对应于FG12864A液晶屏显示的像素,在CCSv6软件的LCD显示程序中修改字模显示头文件和显示字符、汉字、图像子函数,通过编译、调试、运行主程序,实现在LCD上显示设置的字符、汉字、图像点阵[5]。
若在 LCD显示字符和汉字,设置字模工具PCtoLCD2002“模式”为“字符模式”,“字模选项”中“取模方式”为“列行式”,“取模走向”为“顺向(高位在前)”,“输出数制”为“十六进制数”。LCD显示一个字符点阵大小为8×6。LCD每行(8个点阵)可以显示21个字符,对于字符可以显示8行,故LCD可显示的总字符数为168个。LCD显示一个汉字点阵大小为16×16。由于一个汉字占用2行(16个点阵)16列,故LCD每2行可以显示8个汉字,对于汉字可以显示4行,故LCD可显示的总汉字数为32个。设置完成后,在PC端输入字符或汉字,点击“生成字模”,生成可以在LCD上显示的十六进制数据,并保存为十六进制字符矩阵后写入LCD显示程序头文件。图3为汉字的十六进制点阵表示。
图3 汉字的十六进制点阵表示
若在LCD显示图片,设置字模工具PCtoLCD2002“模式”为“图形模式”,选取位图(bmp)文件(要求像素大小<64×128),设置“输出数制”为“十六进制数”。设置完成后,点击“生成字模”,生成可以在LCD上显示的位图文件数据,并保存为十六进制字符矩阵后写入LCD显示程序头文件。图4所示为字模工具显示图像时设置图形模式。
将字模工具生成的十六进制字符矩阵写入LCD显示头文件。以显示汉字为例,在LCD汉字显示头文件中,一个汉字用32个十六进制数进行表示,N个汉字用N×32的二维字符数组表示。而后,在LCD显示子程序中,增加LCD汉字显示头文件,在子函数声明中增加显示字符子函数、显示汉字子函数和LCD显示汉字字符串子函数。在主程序的主函数中增加LCD_write_chinese_string(0,0,16,8);表示在 LCD 的起始第0行第0列上开始显示汉字,汉字点阵宽度为16,每2行显示8个汉字。该函数形参变量调用自LCD显示子程序的子函数 LCD_write_chinese_string,采用LCDprintfChinese子函数在每行依次写每个汉字,显示的汉字内容来源于LCD汉字显示头文件中定义的十六进制二维字符数组。在LCDprintfChinese子函数中调用显示汉字子函数。该子函数通过读取二维字符数组中每行32个十六进制数据,首先显示单个汉字的上半部分(即读取二维数组中各行向量的前16个十六进制数显示上半部分8×16点阵),然后程序中行变量加1,继续显示单个汉字的下半部分(即读取二维数组中各行向量的后16个十六进制数显示下半部分8×16点阵),完成单个汉字的读取与LCD显示。在CCSv6中运行主程序,调用LCD显示子程序中的LCD_write_chinese_string子函数,在 LCD上依次显示汉字。
图4 字模工具显示图像时设置图形模式
同理,将字模工具生成的位图数据十六进制字符数组写入LCD显示头文件,在主函数中增加LCD_write_figure(0,31,66,1);表示在LCD 的起始第0 行第31列上开始显示HDU LOGO位图,图像点阵宽度为66,在LCD图像显示头文件中定义的demo_figure为一维字符数组。该函数形参变量调用自LCD显示子程序的子函数 LCD_write_figure,采用LCDprintffigure子函数依次读取位图数据十六进制字符数组数据,显示的图像矩阵来源于LCD图像显示头文件中定义的位图数据十六进制字符数组。在CCSv6中运行主程序,调用LCD显示子程序中的LCD_write_figure子函数,完成HDU LOGO位图数据的读取与显示。
在主程序中设置定时器,时钟采用ACLK(32.768 kHz),定时器采用增计数模式,定时器初值设为3 277(定时 0.1 s 的 循 环 滚 动 时 间)[3,9]。将 LCDprintf Chinese子函数写入定时器中断子程序中,定时器控制LCD显示列变量,读取LCD显示头文件中的汉字/位图的十六进制字符数组。完成汉字/图片的循环滚动显示。
图5和图6分别给出了LCD循环滚动显示汉字/图片的运行结果。
图5 LCD循环滚动显示汉字运行结果
图6 LCD循环滚动显示图片运行结果
3 低频信号频率计设计案例
在电子测量中,信号发生器、频率计与信号检测器是基本的测量仪器。利用MSP430定时器对信号发生器的输入频率进行计数,可以设计具有低功耗高精度的便携式低频信号频率计。
在本设计案例中,利用定时器A和分频功能,当达到定时时间或满足捕获/比较条件时,将可触发定时器A产生中断,使得每1s产生一个定时器中断请求[3,9]。系统时钟采用 ACLK(32.768 kHz),通过标志位ID_3对主频进行8分频,则分频后的系统频率为4 096 Hz。定时器采用增计数模式,定时器初值TA0CCR0 设为 4 096(系统分频后定时1 s)[3,9]。当大于TA0CCR0值的时候,定时器复位并从0开始重新计数,并置位中断标志位,进入中断服务子程序,测出频率值。
在本设计案例中,函数信号发生器产生正弦信号输入开发板P2.4口作为中断源,设置的定时器增计数模式刚好使得1 s内产生一个定时器中断,则在1 s内计数器测得的脉冲数目恰好是信号的频率值。因此,只要在定时器产生中断时输出脉冲数目值,同时将定时器计数清零即可连续测出信号发生器产生的正弦信号频率值。将开发板LCD上显示测出的频率值,与信号发生器产生的正弦信号频率值进行对比,可以验证频率计测量结果的正确性。图7给出了低频信号频率计设计主程序流程图。图8给出了低频信号频率计测试结果验证图。经多次测量,并与信号发生器显示的正弦信号频率进行对比,所设计的频率计测得的频率值与信号发生器产生的信号频率值之间的相对误差非常小,满足低功耗高精度信号频率计的设计要求。
4 无线遥控智能小车设计案例
基于MSP430系列微处理器设计无线遥控智能小车是MSP430系列微处理器在低功耗智能车设计中的典型应用之一。
图7 低频信号频率计设计主程序流程图
图8 低频信号频率计测试结果验证图
在本设计案例中,无线遥控智能小车发送端对操纵杆处传来的X轴与Y轴方向电压信号进行模数转换和量化,使用MSP430F5529微处理器的ADC12模块,选择序列采样通道为A1和A2,即信号从P6.1和P6.2输入,X轴的采样结果存入ADC12缓冲寄存器ADC12MEM0,Y轴的采样结果存入ADC12缓冲寄存器ADC12MEM1,对得到的采样结果分别进行量化,X轴与Y轴均量化成7个范围[3]。X轴的7个量化档位分别表示:左转角度3档/2档/1档、直行、右转角度1档/2档/3档;Y轴的7个量化档位分别表示:前进3档/2档/1档、停止、后退1档/2档/3档。同时在发送端的 LCD显示当前小车方向与挡位。将MSP430F5529微处理器的通用串行通信接口USCI配置成UART模式,对量化结果进行8 bit(1 byte)编码后保存到发送缓冲寄存器UCA0TXBUF中[3],再经由HC-11无线模块串口透传模式发送至接收端[16]。
无线遥控智能小车接收端采用HC-11无线串口模块接收并译码来自发送端的8 bit控制信号[16]。首先从接收缓冲寄存器UCA0RXBUF中对编码信号进行译码,根据译码结果对MSP430F5529微处理器连接双路H桥直流电机驱动模块DRV8833的P1.2/P1.3接口以及连接舵机模块的P1.4接口输出PWM占空比分别进行配置[17],即MSP430F5529根据译码的控制信号在P1.2/P1.3接口产生两路不同占空比(占空比在25% ~75%范围内)的PWM波,通过DRV8833驱动智能小车的电机,以控制电机的转向与不同档位转速[3,17]。同时,MSP430F5529 根据译码的控制信号在P1.4接口产生占空比在3% ~9%之间的PWM波,以控制舵机的转向与不同档位转向角[3]。在程序中建立函数 Forward(inti)、Back(inti)、TurnLeft(inti)、TurnRight(inti),分别表示前进函数、后退函数、左转函数、右转函数。函数机理是通过MSP430F5529微处理器的定时器A(Timer_A)输出指定的PWM波,配置参考时钟为ACLK(32768Hz),设置输出PWM波周期,同时通过配置TA0CCRx来设定PWM的占空比,配置TA0CCTLx设定比较输出模式[3]。在主函数中,读取接收缓冲寄存器UCA0RXBUF,通过位运算的结果来对上述函数进行调用,利用发送端操纵杆实现智能小车在7个挡位内的变速前进/后退和7个挡位内不同转向角进行左/右转向控制。
图9和图10分别给出了基于MSP430F5529LP核心板与主接口扩展板设计的无线遥控智能小车发送端与接收端。
图9 无线遥控智能小车发送端
图10 无线遥控智能小车接收端
5 结语
论文以MSP430F5529微处理器核心板与自制接口扩展板为硬件,采用CCSv6软件开发环境,构建了基于MSP430系列微处理器的低功耗课程设计实验开发平台,介绍了LCD汉字/图片的循环滚动显示、低频信号频率计设计、无线遥控智能小车设计3个典型的课程设计案例。通过该实验平台,3年来共计完成了30余项课程设计项目。通过该实验平台,学生可以将创新思维应用于实践作品设计与开发,有效培养了学生软硬件综合开发能力和团队合作精神,实现了基于学习产出(OBE)的微处理器与接口技术课程设计工程教育实践教学改革。