华北电力大学科技学院ARM课内实验三Word文档下载推荐.docx

上传人:b****5 文档编号:21620932 上传时间:2023-01-31 格式:DOCX 页数:10 大小:197.76KB
下载 相关 举报
华北电力大学科技学院ARM课内实验三Word文档下载推荐.docx_第1页
第1页 / 共10页
华北电力大学科技学院ARM课内实验三Word文档下载推荐.docx_第2页
第2页 / 共10页
华北电力大学科技学院ARM课内实验三Word文档下载推荐.docx_第3页
第3页 / 共10页
华北电力大学科技学院ARM课内实验三Word文档下载推荐.docx_第4页
第4页 / 共10页
华北电力大学科技学院ARM课内实验三Word文档下载推荐.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

华北电力大学科技学院ARM课内实验三Word文档下载推荐.docx

《华北电力大学科技学院ARM课内实验三Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《华北电力大学科技学院ARM课内实验三Word文档下载推荐.docx(10页珍藏版)》请在冰豆网上搜索。

华北电力大学科技学院ARM课内实验三Word文档下载推荐.docx

2016年5月10日

实验三:

脉冲宽度调制器PWM

(1)捕获功能

一:

实验现象

1.本次实验是使用LPC178/177x系列Cortex-M3中的PWM输出功能的捕获模块来输出3路双边沿PWM。

其中第一路是周期为100us,占空比为87.5%的方波,第二路是周期为100us,占空比为50%的方波,第三路是周期为100us,占空比为25%的方波。

2.实验现象图片展示:

测试时用示波器捕获P3.25(PWM-2,通道2输出)、3.27(PWM-1输,通道4输出)、3.29(PWM-1,通道6输出)引脚上的波形如下图所示:

二:

实验代码分析

#include"

../LPC177x_8x/LPC177x_8x.h"

../LPC177x_8x/type.h"

#defineLED(1ul<

<

31)

#defineLED_INIT()LPC_GPIO3->

DIR|=LED,LED_OFF()//LED初始化

#defineLED_OFF()LPC_GPIO3->

SET|=LED//LED灭

#defineLED_ON()LPC_GPIO3->

CLR|=LED//LED亮

volatileuint32_tGuiCapFlag=0;

//定时器捕获中断标志

voidmyDelay(uint32_tulTime)

{

uint32_ti;

while(ulTime--){

for(i=0;

i<

19192;

i++);

}

}

voidpwmDb1Init(void)//初始化双边沿PWM输出

uint32_tiTmp;

LPC_IOCON->

P3_25&

=~0x07;

//11111000相当于清零最后三位

P3_25|=2;

//0010-010P158,P3.25作PWM1[2]输出

P3_27&

P3_27|=2;

//与上同,P3.27作PWM1[4]输出

P3_29&

P3_29|=2;

//与上同,P3.29作PWM1[6]输出

iTmp=PeripheralClock/10000;

//FPCLK_FREQ分频,PWM计数频率

LPC_PWM1->

PR=0x00;

//不分频

MCR=0x02;

//PWMMR0与PWMTC匹配时复位PWMTC

PCR=(1<

2)|//PWM2双边沿控制

(1<

4)|//PWM4双边沿控制

6)|//PWM6双边沿控制

10)|//使能PWM2输出

12)|//使能PWM4输出

14);

//使能PWM6输出

MR0=iTmp;

//T=1/10000=0.1ms=100us,PWM速率控制/计数初值,设置双边沿脉冲的脉宽和位置

MR1=0;

//设置初始值为低电平,然后立即变上升沿,PWM2的置位位置

MR2=(iTmp/8)*7;

//占空比=7/8*100us的时间后下降沿,PWM2的复位位置

MR3=(iTmp/8)*2;

//PWM4的置位位置

MR4=(iTmp/8)*6;

//MR3与MR4两路占空比=4/8*100us的时间后下降沿,PWM4的复位位置

MR5=(iTmp/8)*3;

//PWM6的置位位置

MR6=(iTmp/8)*5;

//MR3与MR4两路占空比=2/8*100us的时间后下降沿,PWM6的复位位置

LER=0x7F;

//01111111,锁存所有PWM匹配值

TCR=0x02;

//复位PWMTC

TCR=0x09;

//使能PWM

intmain(void)

SystemInit();

//系统初始化,切勿删除

pwmDb1Init();

//初始化I/O口,设置P3.25

//P3.27、P3.29为双边沿输出

while

(1);

三:

通过修改某些语句从而使得波形的周期和占空比发生变化

通过改变voidpwmDb1Init(void)子函数中的MR1/MR2(或者MR3/MR4、MR5/MR6)的设置,可以使得波形的周期和占空比发生变化,这里不再举例。

(2)PWM中断

本次实验是使用LPC178/177x系列Cortex-M3中的PWM输出功能的定时中断功能,通过PWM的定时器定时0.5s产生一个中断,使得LED灯每0.5s闪烁一次。

DIR|=LED,LED_OFF()//LED初始化

voidpwm1TimerInit(void)//PWM初始化子函数

//00000010,复位PWM1定时器

TC=0;

//计数器设置为0

PR=0;

//时钟不分频

MCR=0x03;

//00000011,设置PWMMR0匹配后复位PWMTC,并产生中断标志

MR0=PeripheralClock/2;

//=1/2=0.5s,0.5秒定时

voidPWM1_IRQHandler(void)//PWM中断服务函数

IR=0x01;

//清PWM中断标志

LED_ON();

myDelay(100);

LED_OFF();

LED_INIT();

pwm1TimerInit();

//初始化PWM定时器

NVIC_EnableIRQ(PWM1_IRQn);

//设置PWM中断优先级并使能

NVIC_SetPriority(PWM1_IRQn,5);

TCR=0x01;

//启动定时器

通过修改某些语句从而使得LED的闪烁发生变化

通过改变voidpwm1TimerInit(void)子函数中的

LPC_PWM1->

语句,可以改变定时时间。

实验四:

电机控制PWM(MCPWM)

1.本次实验是使用LPC178/177x系列Cortex-M3中的MCPWM输出,通过观察P1.19、1.22、1.25、1.26、1.28、1.29上的管脚来观察PWM波形。

2.实验现象图片展示

由于示波器双通道的针孔在实验板上很难固定住,从而使得观察更加不容易,所以下面就只展示接P1.28和P1.29管脚上的波形。

如下图所示:

1.主函数代码:

../MCPWM/mcpwm.h"

//初始化目标板,切勿删除

mcPwmInit();

//MC_PWM初始化

while

(1){

2.MCPWM代码:

mcpwm.h"

mcpwmcfg.h"

voidMCPWM_IRQHandler(void)//电机PWM中断处理子函数

uint32_tregVal;

regVal=LPC_MCPWM->

INTF;

//读MCPWM中断状态寄存器

if(regVal&

(1<

15))//ABORT中断

{

LPC_MCPWM->

INTF_CLR=regVal;

//清除ABORT中断标志

MCPWMInt_flag=1;

voidmcPwmInit(void)//电机PWM初始化

P1_19&

//选择P1.19作通道0A输出

P1_19|=4;

//0100-100P156选择MC_OA输出

P1_22&

//选择P1.22作通道0B输出

P1_22|=4;

P1_25&

//选择P1.25作通道1A输出

P1_25|=4;

P1_26&

//选择P1.26作通道1B输出

P1_26|=4;

P1_28&

//选择P1.28作通道2A输出

P1_28|=4;

P1_29&

//选择P1.29作通道2B输出

P1_29|=4;

P1_21&

//选择P1.21作MCPWMABORT输入

P1_21|=4;

LPC_SC->

PCONP|=1<

17;

//打开MCPWM电源控制

CON_CLR=0xFFFFFFFF;

//即MCCON所有的位都给0,清零电机PWM控制寄存器

TC0=0;

//PWM定时器清零

TC1=0;

TC2=0;

//设置各通道周期和占空比

LIM0=Channel0_Freq;

MAT0=Channel0_Wide;

LIM1=Channel1_Freq;

MAT1=Channel1_Wide;

LIM2=Channel2_Freq;

MAT2=Channel2_Wide;

INTEN_SET=1<

15;

//使能ABORT中断

NVIC_EnableIRQ(MCPWM_IRQn);

//PWM中断优先级并使能

NVIC_SetPriority(MCPWM_IRQn,4);

//启动PWM0、PWM1、PWM2定时器

CON_SET|=(1<

0)|(1<

8)|(1<

16);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 哲学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1