华北电力大学科技学院ARM课内实验三.docx
- 文档编号:8484694
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:10
- 大小:197.76KB
华北电力大学科技学院ARM课内实验三.docx
《华北电力大学科技学院ARM课内实验三.docx》由会员分享,可在线阅读,更多相关《华北电力大学科技学院ARM课内实验三.docx(10页珍藏版)》请在冰豆网上搜索。
华北电力大学科技学院ARM课内实验三
科技学院
课程设计报告
(2015--2016年度第二学期)
名称:
ARM试验PWM
题目:
院系:
科技学院
班级:
13k2
学号:
31
学生姓名:
指导教师:
张老师
设计周数:
成绩:
日期:
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"
#include"../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相当于清零最后三位
LPC_IOCON->P3_25|=2;//0010-010P158,P3.25作PWM1[2]输出
LPC_IOCON->P3_27&=~0x07;
LPC_IOCON->P3_27|=2;//与上同,P3.27作PWM1[4]输出
LPC_IOCON->P3_29&=~0x07;
LPC_IOCON->P3_29|=2;//与上同,P3.29作PWM1[6]输出
iTmp=PeripheralClock/10000;//FPCLK_FREQ分频,PWM计数频率
LPC_PWM1->PR=0x00;//不分频
LPC_PWM1->MCR=0x02;//PWMMR0与PWMTC匹配时复位PWMTC
LPC_PWM1->PCR=(1<<2)|//PWM2双边沿控制
(1<<4)|//PWM4双边沿控制
(1<<6)|//PWM6双边沿控制
(1<<10)|//使能PWM2输出
(1<<12)|//使能PWM4输出
(1<<14);//使能PWM6输出
LPC_PWM1->MR0=iTmp;//T=1/10000=0.1ms=100us,PWM速率控制/计数初值,设置双边沿脉冲的脉宽和位置
LPC_PWM1->MR1=0;//设置初始值为低电平,然后立即变上升沿,PWM2的置位位置
LPC_PWM1->MR2=(iTmp/8)*7;//占空比=7/8*100us的时间后下降沿,PWM2的复位位置
LPC_PWM1->MR3=(iTmp/8)*2;//PWM4的置位位置
LPC_PWM1->MR4=(iTmp/8)*6;//MR3与MR4两路占空比=4/8*100us的时间后下降沿,PWM4的复位位置
LPC_PWM1->MR5=(iTmp/8)*3;//PWM6的置位位置
LPC_PWM1->MR6=(iTmp/8)*5;//MR3与MR4两路占空比=2/8*100us的时间后下降沿,PWM6的复位位置
LPC_PWM1->LER=0x7F;//01111111,锁存所有PWM匹配值
LPC_PWM1->TCR=0x02;//复位PWMTC
LPC_PWM1->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闪烁一次。
二:
实验代码分析
#include"../LPC177x_8x/LPC177x_8x.h"
#include"../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亮
voidmyDelay(uint32_tulTime)
{
uint32_ti;
while(ulTime--){
for(i=0;i<19192;i++);
}
}
voidpwm1TimerInit(void)//PWM初始化子函数
{
LPC_PWM1->TCR=0x02;//00000010,复位PWM1定时器
LPC_PWM1->TC=0;//计数器设置为0
LPC_PWM1->PR=0;//时钟不分频
LPC_PWM1->MCR=0x03;//00000011,设置PWMMR0匹配后复位PWMTC,并产生中断标志
LPC_PWM1->MR0=PeripheralClock/2;//=1/2=0.5s,0.5秒定时
}
voidPWM1_IRQHandler(void)//PWM中断服务函数
{
LPC_PWM1->IR=0x01;//清PWM中断标志
LED_ON();
myDelay(100);
LED_OFF();
}
intmain(void)
{
SystemInit();//系统初始化,切勿删除
LED_INIT();
pwm1TimerInit();//初始化PWM定时器
NVIC_EnableIRQ(PWM1_IRQn);//设置PWM中断优先级并使能
NVIC_SetPriority(PWM1_IRQn,5);
LPC_PWM1->TCR=0x01;//启动定时器
while
(1);
}
三:
通过修改某些语句从而使得LED的闪烁发生变化
通过改变voidpwm1TimerInit(void)子函数中的
LPC_PWM1->MR0=PeripheralClock/2;语句,可以改变定时时间。
实验四:
电机控制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.主函数代码:
#include"../LPC177x_8x/LPC177x_8x.h"
#include"../LPC177x_8x/type.h"
#include"../MCPWM/mcpwm.h"
voidmyDelay(uint32_tulTime)
{
uint32_ti;
while(ulTime--){
for(i=0;i<19192;i++);
}
}
intmain(void)
{
SystemInit();//初始化目标板,切勿删除
mcPwmInit();//MC_PWM初始化
while
(1){
}
}
2.MCPWM代码:
#include"../LPC177x_8x/LPC177x_8x.h"
#include"../LPC177x_8x/type.h"
#include"mcpwm.h"
#include"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初始化
{
LPC_IOCON->P1_19&=~0x07;//选择P1.19作通道0A输出
LPC_IOCON->P1_19|=4;//0100-100P156选择MC_OA输出
LPC_IOCON->P1_22&=~0x07;//选择P1.22作通道0B输出
LPC_IOCON->P1_22|=4;
LPC_IOCON->P1_25&=~0x07;//选择P1.25作通道1A输出
LPC_IOCON->P1_25|=4;
LPC_IOCON->P1_26&=~0x07;//选择P1.26作通道1B输出
LPC_IOCON->P1_26|=4;
LPC_IOCON->P1_28&=~0x07;//选择P1.28作通道2A输出
LPC_IOCON->P1_28|=4;
LPC_IOCON->P1_29&=~0x07;//选择P1.29作通道2B输出
LPC_IOCON->P1_29|=4;
LPC_IOCON->P1_21&=~0x07;//选择P1.21作MCPWMABORT输入
LPC_IOCON->P1_21|=4;
LPC_SC->PCONP|=1<<17;//打开MCPWM电源控制
LPC_MCPWM->CON_CLR=0xFFFFFFFF;//即MCCON所有的位都给0,清零电机PWM控制寄存器
LPC_MCPWM->TC0=0;//PWM定时器清零
LPC_MCPWM->TC1=0;
LPC_MCPWM->TC2=0;
//设置各通道周期和占空比
LPC_MCPWM->LIM0=Channel0_Freq;
LPC_MCPWM->MAT0=Channel0_Wide;
LPC_MCPWM->LIM1=Channel1_Freq;
LPC_MCPWM->MAT1=Channel1_Wide;
LPC_MCPWM->LIM2=Channel2_Freq;
LPC_MCPWM->MAT2=Channel2_Wide;
LPC_MCPWM->INTEN_SET=1<<15;//使能ABORT中断
NVIC_EnableIRQ(MCPWM_IRQn);//PWM中断优先级并使能
NVIC_SetPriority(MCPWM_IRQn,4);
//启动PWM0、PWM1、PWM2定时器
LPC_MCPWM->CON_SET|=(1<<0)|(1<<8)|(1<<16);
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 华北 电力大学 科技学院 ARM 实验
![提示](https://static.bdocx.com/images/bang_tan.gif)