摘" 要:为了提高学生对TI公司Tiva C系列微控制器PWM外设的理解和应用能力,以占空比调节控制为重点目标,在介绍PWM产生机制及相关库函数后,使用参数控制、按键控制、外部因素控制实现占空比调节,通过示波器、LED、电机等观察不同占空比条件下的波形输出及实际效应。通过实验设计与演示,使学生掌握了该系列微控制器PWM产生过程、调制方法及其实际场景应用,提高学生对嵌入式系统课程知识的学习兴趣,取得了良好的教学效果。
关键词:Tiva C系列微控制器;PWM外设;占空比调节;嵌入式
中图分类号:TP39;G434" 文献标识码:A" 文章编号:2096-4706(2024)09-0179-06
Experiment Design of Tiva C Series Microcontroller PWM Peripheral Teaching
ZHAO Lanying, ZHANG Jing, SU Boli
(School of Electronic Science and Control Engineering, Institute of Disaster Prevention, Langfang" 065201, China)
Abstract: In order to improve students understanding and application ability of TIs Tiva C series microcontroller PWM peripherals, with a focus on duty cycle adjustment control, after introducing the PWM generation mechanism and related library functions, parameter control, button control, and external factor control are used to achieve duty cycle adjustment. The waveform output and actual effects under different duty cycle conditions are observed through oscilloscopes, LEDs, motors, and other means. Through experimental design and demonstration, students have mastered the generation process, modulation methods, and practical scenarios application of this series of microcontrollers PWM, enhancing students interest in learning embedded system course knowledge and achieving good teaching effectiveness.
Keywords: Tiva C series microcontroller; PWM peripheral; duty cycle adjustment; embedded
0" 引" 言
随着计算机技术和信息技术的发展,嵌入式系统技术广泛应用到智能制造、移动通信、互联网、仪器仪表、汽车、船舶、消费类产品等领域,嵌入式研发将是未来较为热门的工作之一。嵌入式技术课程实用性强、知识领域广,既有硬件电路设计、PCB绘制,又有底层控制软件、上层处理软件编程,还涉及嵌入式操作系统的使用。现有相关教研教改文献集中于信息类专业建设、课程体系、人才培养,如何更好地进行课程教学较少论及,针对课程中知识点讲授的则更是寥寥无几,造成一方面好的教学方法、经验传播困难,范围限定于某一学校、某一学院;另一方面,新教师想讲好某门课程,需要耗费更多的时间、精力进行摸索,因此作为课程基础的知识点教学研究更应该得到广大教师的关注。
与诸多学校选择STM32系列处理器作为学习对象不同,我校使用TI公司Tiva C系列微控制器作为学习对象,其显著区别就是网上资源少,且绝大多数为英文资源,因此对学生的学习、动手能力有一定的要求,也需要教师进行有效的教学设计。本文以PWM外设教学为例,综合理论讲解、示例演示、学生实验,加大演示、实验实践比重,结合学校特色、学生实际能力,通过项目式案例教学完成教学目标。
PWM技术是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在测量、通信、工控[1-3]等方面,是嵌入式课程核心知识点之一。现有PWM教学的相关研究也为数不多,并基本采用STM32系列微控制器[4,5]或51系列单片机[6]进行讲解。Zhao Guopeng以SPWM逆变电路实验为对象研究了学生互检方法的效果[7]。黄海宏等从PWM整流电路基本特征入手,引导学生能量流动、功率调控和电压控制原理取得了良好的教学效果[8]。TI公司生产了多个系列微控制器,都集成了PWM功能,但除了教材和一些书籍[9],也很少有如何针对知识点讲授的相关文献。以PWM外设占空比调节为重点目标,在讲授时首先对比定时器外设模块CCP模式输出的PWM波形与PWM外设功能的差异,再对PWM外设的结构与波形产生机制、库函数进行介绍,然后进行占空比调节不同方式的实际编程、演示,使学生掌握占空比在PWM应用中的重要作用及调制方法,实现知识点教学目标。
1" TivaC系列微控制器PWM原理
1.1" 定时器外设PWM波形与PWM外设差异
两种外设在生成PWM波形时的对比如表1所示。TivaC系列微控制器的定时器外设具有多种工作模式,其中的PWM模式可用于生成简单的PWM波形。在此模式下,定时器外设单独使用,计数器为递减的16/32位计数器,生成的PWM信号周期固定。
TivaC系列微控制器的PWM外设输出波形与之相比,计数器为递减或递增/递减模式的16位计数器;生成的PWM信号周期可变,通过改变外设时钟来源、分频系数、库函数参数可生成多种周期、占空比的PWM波形;生成的多路PWM信号既可单独控制,亦可进行多种方式的同步、更新,更符合工业控制的需求,但信号的产生过程比较复杂。
1.2" PWM外设信号产生过程
PWM外设发生器模块主要有控制、中断和触发发生器、错误条件以及定时器、比较器、信号发生器、死区发生器组成[10],后面4个部分是产生PWM信号的主要结构,如图1所示。
1.2.1" PWM定时器
PWM定时器有递减和先递增后递减两种模式,包含装载值PWMLOAD和计数器值PWMCOUNT两个寄存器。定时器会产生三个信号:零信号zero和加载信号load都是一个宽度为时钟周期的高电平脉冲,当计数器值等于零和装载值时分别产生;方向信号dir在递减模式中一直是低电平,在递增/递减模式中,则是在高低电平之间切换。
1.2.2" PWM比较器
PWM比较器包含比较器A和比较器B,当计数器值等于比较器A/B寄存器值时,产生宽度为时钟周期的高电平脉冲,即cmpA和cmpB。
1.2.3 信号发生器
定时器、比较器产生的5个信号,即zero、load、dir、cmpA、cmpB传输到信号发生器,用于生成两个内部PWM信号,即pwmA和pwmB。以定时器递增/递减模式为例,PWM信号生成示例如图2所示。
定时器运行于递增/递减模式时,在一个周期内会分别产生两个cmpA脉冲,在两个cmpA脉冲之间,即计数器值大于比较器A值CMPA时,生成的pwmA信号为高电平;其余时间,即计数器值小于比较器A值CMPA时,生成的pwmA信号为低电平。对于pwmB信号同样如此。
1.2.4" 死区发生器
死区发生器为可选部分,通过它的启用、禁用对信号发生器产生的内部PWM信号进行处理,生成输出PWM信号。如果禁用死区发生器,则内部PWM信号作为输出信号pwmA、pwmB;如果启用死区发生器,则内部PWM信号pwmB被丢弃,对pwmA分别在上升沿加延迟、进行反转后在下降沿加延迟,从而生成两个输出信号pwmA、pwmB。
1.3" PWM关键库函数
如只想简单的输出一个PWM信号,首先需要根据设置PWM时钟、按照选择的信号输出使用对应的外设、端口使能及引脚配置函数完成引脚功能复用,然后使用PWM库函数完成输出设置,主要有:发生器配置函数、周期设置函数、脉冲宽度设置函数、输出使能函数、发生器使能函数。各函数功能及参数介绍可参考手册或教材,在此不再赘述。
周期设置函数最后一个参数ui32Period、脉冲宽度设置函数中最后一个参数ui32Width用来确定PWM信号的周期及占空比,所以对PWM周期、占空比的控制即是对这两个参数的控制;当参数范围无法实现要求时,还可通过更改设置PWM时钟来满足要求。
2" 周期及占空比控制
2.1" 周期控制
如前所述,与PWM信号周期有关的函数为PWM时钟设置、PWM周期设置函数,分别为SysCtlPWMClockSet(uint32_t ui32Config)、PWMGenPeriodSet(uint32_t ui32Base, uint32_t ui32Gen, uint32_t ui32Period)。
PWM时钟设置函数中ui32Config参数表示对系统时钟的分频系数,将系统时钟进行分频后作为PWM外设时钟,分频系数可从1、2、8、16、32、64,需注意的是此分频系数设置后对产生的所有PWM信号都产生作用。
PWM周期设置函数中ui32Period参数指定PWM发生器的输出周期,该PWM发生器输出的两个PWM信号pwmA、pwmB的周期相同,该周期由发生器模块零脉冲信号Zero间PWM时钟周期的个数决定。
如系统时钟为16 MHz,想设置PWM模块1的发生器0的周期为1 kHz,则可按以下步骤进行:
1)设置PWM时钟为4 MHz,即ui32Config为4,函数语句为:
SysCtlPWMClockSet(SYSCTL_PWMDIV_4);
2)设置PWM周期为1 kHz,由于现在PWM时钟为4 MHz,可计算得知每个PWM周期含有的PWM时钟周期数量为:(1/1 kHz)×4 MHz=4 000,即需要的周期数量ui32Period为4 000,函数语句为:
PWMGenPeriodSet (PWM1_BASE, PWM_GEN_0, 4000);
在计算ui32Period时,应知该参数范围为0~216-1,如在此范围内无法获得所需发生器周期,则应修改PWM时钟设置分频系数ui32Config,还可以修改系统时钟频率,以获得所需PWM周期。如使用80 MHz系统时钟,40 MHzPWM时钟,ui32Config与ui32Period分别为2、40 000,相应函数语句为:
SysCtlPWMClockSet(SYSCTL_PWMDIV_2);
PWMGenPeriodSet (PWM1_BASE, PWM_GEN_0, 40000);
2.2" 占空比控制
2.2.1 参数计算
如前所述,与PWM信号占空比相关的函数为脉冲宽度设置函数,即PWMPulseWidthSet(uint32_t ui32Base, uint32_t ui32PWMOut, uint32_t ui32Width),该函数中ui32Width指定某一输出PWM脉冲信号正极性部分的宽度,同ui32Period参数类似,该参数同样为正极性部分包含的PWM时钟周期的个数决定,且范围为0~216-1。
如所需PWM信号占空比不变,则计算获得ui32Width数值后无须进行改变。如前所述已设置PWM时钟为4 MHz,PWM模块1的发生器0周期为1 kHz,如想输出占空比为25%的PWM输出信号,则表示在发生器0周期的4 000个时钟周期中,正极性部分占25%,即需要的正极性部分周期数量为ui32Width=4 000×25%=1 000,函数语句为:
PWMPulseWidthSet(PWM1_BASE, PWM_OUT_1, 1000);
如想修改某一输出PWM脉冲信号的占空比,则修改ui32Width参数即可,对该参数的修改方式可通过变量控制、用按键控制参数、通过外部因素变化控制参数等实现。
2.2.2" 变量控制
参数控制即通过语句编程对ui32Width进行控制,使其生成符合要求的占空比数值或按照一定的规律进行变化。如在教学中经常使用LED亮度演示不同的PWM信号占空比,如将占空比从10%到90%循环变化,以10%比例递增,则可以通过使参数ui32Width的数值以10%的PWM时钟周期个数递增,并再达到90%时重新初始化为10%的数值即可。
如前所述已设置PWM时钟为4 MHz,PWM模块1的发生器0周期为1 kHz,循环输出占空比从10%到90%的PWM信号,相应控制语句为:
void pwm_play_next(void)
{
PWMPulseWidthSet(PWM1_BASE, PWM_OUT_1, 4000*ui32Width);
PWMOutputState(PWM1_BASE, PWM_OUT_1_BIT, true);
SysCtlDelay(ui32Width*200);
PWMOutputState(PWM1_BASE, PWM_OUT_7_BIT, 1);
ui32Width++;
if( (ui32Width%9)==0 )
ui32Width = 1;
}
程序执行后,可在LED灯观察到其亮度会循环变化,形成LED闪烁的效果,从而使学生理解占空比对PWM输出信号的影响,并可外接示波器捕捉波形,观察信号形状。
2.2.3" 按键控制
按键控制通过修改变量控制方式中ui32Width自增语句,将该语句替换为检测到外部按键按下后进行参数自增,从而实现占空比控制,如占空比变化规律不变,则其他语句无须修改。
如使用TivaLaunchpad开发板按键K2,其连接MCU的F4引脚,则可将变量控制中自增语句替换为按键中断控制语句:
void pwm_play_next(void)
{
PWMPulseWidthSet(PWM1_BASE, PWM_OUT_1, 4000*ui32Width);
PWMOutputState(PWM1_BASE, PWM_OUT_1_BIT, true);
SysCtlDelay(ui32Width*200);
PWMOutputState(PWM1_BASE, PWM_OUT_7_BIT, 1);
if( (ui32Width%9)==0 )
ui32Width = 1;
}
void gpiof_isr()
{
gpiofstatus = GPIOIntStatus(GPIO_PORTF_BASE,true);
GPIOIntClear(GPIO_PORTF_BASE,gpiofstatus);
if(GPIO_PIN_4)
{ui32Width++;}
}
程序执行后,通过按键控制,可使学生观察到占空比逐次递增10%时,LED灯亮度的不同,以区别与变量控制方式中的循环闪烁效果;并可回顾GPIO端口、中断的使用。当然,也可以使用多个按键进行控制,即按键K2控制占空比递增,再选择其他按键控制占空比递减,且逐次递增、递减的比例也可进行控制。
为展示输出PWM信号的波形,可将输出信号引脚连接示波器进行信号捕捉。外接示波器并设置信号捕获方式为单次触发后,可方便地捕捉到PWM信号波形,观察信号形状。在此使用正点原子便携式示波器DS100捕捉到占空比从20%变化到80%的输出PWM信号波形,如图3(a)至图3(g)所示。
2.2.4" 外部因素控制
外部因素控制即通过对传感器采集的环境数据进行判断,按照不同的数据范围,调节占空比ui32Width位于不同的数值,从而实现占空比控制,输出的PWM信号可用于控制其他执行机构,以调节环境使其符合正常要求。
如使用TivaLaunchpad开发板外接烟雾传感器、步进电机,并在步进电机连接风扇,即可模拟震后废墟需要排烟通风的场景。将传感器输出模拟量进行模数转换,依据转换后电压值进行浓度分组并设置对应的占空比数值,用以调节步进电机转速。
如将传感器输出浓度分5组,从低到高依次使用few、low、middle、high、ultra进行表征,对应的占空比设置为10%、30%、50%、70%、90%,相应控制语句为:
void pwm_play_next(void)
{
PWMPulseWidthSet(PWM1_BASE, PWM_OUT_1, 4000*ui32Width);
PWMOutputState(PWM1_BASE, PWM_OUT_1_BIT, true);
SysCtlDelay(ui32Width*200);
PWMOutputState(PWM1_BASE, PWM_OUT_7_BIT, 1);
}
void widthchoice(void)
{
switch(sensor_density)
{
case few:ui32Width=1; break;
case low:" " ui32Width=3; break;
case middle:ui32Width=5; break;
case high:" " ui32Width=7; break;
case ultra:" "ui32Width=9; break;
default:" " " "ui32Width=3;
}
}
还可以通过按键设置占空比在相邻的两个数值范围内进行调整,以满足更精确的占空比需求,如使用TivaLaunchpad开发板按键K3,其连接MCU的A3引脚,控制占空比在10%~30%之间分10挡递增,相应控制语句为:
void pwm_play_next(void)
{
PWMPulseWidthSet(PWM1_BASE, PWM_OUT_1, 4000*ui32Width+800*adjustratio);
PWMOutputState(PWM1_BASE, PWM_OUT_1_BIT, true);
SysCtlDelay(ui32Width*200);
PWMOutputState(PWM1_BASE, PWM_OUT_7_BIT, 1);
if( (adjustratio %9)==0 )
adjustratio = 1;
}
void gpioa_isr()
{
gpioastatus = GPIOIntStatus(GPIO_PORTA_BASE,true);
GPIOIntClear(GPIO_PORTA_BASE,gpioastatus);
if(GPIO_PIN_3)
{adjustratio++;}
}
程序执行后,可观察烟雾浓度对风扇转速的影响。如感觉风扇转速效果较差,可通过按键K3逐步加大输出PWM信号占空比,增加步进电机、风扇转速。传感器浓度分组数值、对应占空比数值设置以及按键调节的递增比例都可根据实际需要进行修改,以更好地观察实际效果。
3" 结" 论
PWM的主要特点是从信号产生到被控系统都是数字形式,因而无须进行模数转换,其抗干扰、抗噪声能力强,得到了广泛应用。鉴于现有文献以STM32系列MCU为主,本文以TI公司Tiva C MCU的PWM外设为例,描述了PWM信号的产生机理、主要使用的库函数,以PWM输出信号占空比控制为重点目标,在介绍库函数编程的基础上,实现了使用参数计算、按键控制、外部因素控制三种方式对占空比的调节,通过LED、示波器等观察输出信号占空比的影响。与纯粹理论讲授相比,使学生更容易理解教学目标,提高教学效果。
参考文献:
[1] ONCU S,UGUR K,TUNCER U. Laboratory Setup for Teaching Resonant Converters and Induction Heating [J/OL].Engineering Science and Technology, an International Journal, 2022.28,101012[2023-08-26].https://doi.org/10.1016/j.jestch.2021.05.016.
[2] 尹蔺欣.5G宽带通信的抖动增强全数字射频发射机和PWM型射频功放的研究与设计 [D].海口:海南大学,2022.
[3] LAMO P,CASTRO Á,BRAÑAS C. Emulator of a Boost Converter for Educational Purposes [J/OL].Electronics,2020,9(11):1883[2023-08-25].https://doi.org/10.3390/electronics9111883.
[4] 廉佐政,王海珍.基于STM32的PWM输出实验设计 [J].实验技术与管理,2017,34(8):137-140.
[5] 全瑞坤,黄嵩,韩力.创新型电机控制实验在“电机学”课程教学中的应用 [J]. 工业和信息化教育,2019(8):58-62+76.
[6] 刘光干,陈熙,刘庆,等.基于STC8单片机兼容传统51开发板设计及双语言编程的教学探究 [J].电子产品世界,2021,28(4):89-92.
[7] ZHAO G P. Effect Analysis of the Teaching Method of Mutual Result Correction Between Students in an Experiment of Power Electronics Course [J].IET Circuits,Devices amp; Systems,2022,16(3):201-209.
[8] 黄海宏,王海欣.从三个基本特征着手讲授PWM整流电路 [J].电气电子教学学报,2019,41(3):61-63+126.
[9] JIANG D,SHEN Z W,LI Q,et al. Advanced Pulse-Width-Modulation: With Freedom to Optimize Power Electronics Converters [M].Singapore:Singapore Springer,2021,363-380.
[10] 沈建华,郝立平.嵌入式系统教程——基于Tiva C系列ARM Cortex-M4微控制器 [M].北京:北京航空航天大学出版社,2015.
作者简介:赵兰迎(1983—),男,汉族,山东东阿人,副教授,硕士研究生导师,博士,研究方向:测控技术与仪器、应急技术与管理。