Haawking DSC2803X 经验贴---自动变化pwm
一、说明:
作者:覃陆奥
板卡版本:HX320F28034PT
IDE版本:Haawking IDE V0.5.3
编译器版本:HK100V1
作用:28034最小系统上的GPIO0和GPIO1,输出一对从1%到99%的pwm波。 第一步:配置ePWM波的工作模式 /****************************************************************** 文件名:epwm.C 参 数:无 返回值:无 作 用:配置GPIO0、GPIO1、配置成epwm模式,并设置输出epwm寄存器配置 ******************************************************************/ epwm.c
epwm.h 头文件
- void EPWM1_Init(Uint16 tbprd);
- void EPwm1A_SetCompare(Uint16 val);
- void EPwm1B_SetCompare(Uint16 val);
- void EPWM6_Init(Uint16 tbprd);
- void EPwm6A_SetCompare(Uint16 val);
- void EPwm6B_SetCompare(Uint16 val);
- #endif /* EPWM_H_ */
复制代码
第二步:配置GPIO-6为ePWM外设模式 /****************************************************************** 文件名:leds.C 参 数:无 返回值:无 作 用:配置GPIO0-6配置的epwm输出口的寄存器配置。 ******************************************************************/ leds.c
- void LED_Init(void)
- {
- EALLOW;
- SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1;// 开启GPIO时钟
- //LED1端口配置
- GpioCtrlRegs.GPAMUX1.bit.GPIO0=0;//设置为通用GPIO功能
- GpioCtrlRegs.GPADIR.bit.GPIO0=1;//设置GPIO方向为输出
- GpioCtrlRegs.GPAPUD.bit.GPIO0=0;//使能GPIO上拉电阻
- //LED2端口配置
- GpioCtrlRegs.GPAMUX1.bit.GPIO1=0;
- GpioCtrlRegs.GPADIR.bit.GPIO1=1;
- GpioCtrlRegs.GPAPUD.bit.GPIO1=0;
- //LED3端口配置
- GpioCtrlRegs.GPAMUX1.bit.GPIO2=0;
- GpioCtrlRegs.GPADIR.bit.GPIO2=1;
- GpioCtrlRegs.GPAPUD.bit.GPIO3=0;
- //LED4端口配置
- GpioCtrlRegs.GPAMUX1.bit.GPIO3=0;
- GpioCtrlRegs.GPADIR.bit.GPIO3=1;
- GpioCtrlRegs.GPAPUD.bit.GPIO3=0;
- //LED5端口配置
- GpioCtrlRegs.GPAMUX1.bit.GPIO4=0;
- GpioCtrlRegs.GPADIR.bit.GPIO4=1;
- GpioCtrlRegs.GPAPUD.bit.GPIO4=0;
- //LED6端口配置
- GpioCtrlRegs.GPAMUX1.bit.GPIO5=0;
- GpioCtrlRegs.GPADIR.bit.GPIO5=1;
- GpioCtrlRegs.GPAPUD.bit.GPIO5=0;
- //LED7端口配置
- GpioCtrlRegs.GPAMUX1.bit.GPIO6=0;
- GpioCtrlRegs.GPADIR.bit.GPIO6=1;
- GpioCtrlRegs.GPAPUD.bit.GPIO6=0;
- GpioDataRegs.GPASET.bit.GPIO0=1;
- GpioDataRegs.GPASET.bit.GPIO1=1;
- GpioDataRegs.GPASET.bit.GPIO2=1;
- GpioDataRegs.GPASET.bit.GPIO3=1;
- GpioDataRegs.GPASET.bit.GPIO4=1;
- GpioDataRegs.GPASET.bit.GPIO5=1;
- GpioDataRegs.GPASET.bit.GPIO6=1;
- EDIS;
- }
复制代码
leds.h 头文件
- #define LED1_OFF (GpioDataRegs.GPASET.bit.GPIO0=1)
- #define LED1_ON (GpioDataRegs.GPACLEAR.bit.GPIO0=1)
- #define LED1_TOGGLE (GpioDataRegs.GPATOGGLE.bit.GPIO0=1)
- #define LED2_OFF (GpioDataRegs.GPASET.bit.GPIO1=1)
- #define LED2_ON (GpioDataRegs.GPACLEAR.bit.GPIO1=1)
- #define LED2_TOGGLE (GpioDataRegs.GPATOGGLE.bit.GPIO1=1)
- #define LED3_OFF (GpioDataRegs.GPASET.bit.GPIO2=1)
- #define LED3_ON (GpioDataRegs.GPACLEAR.bit.GPIO2=1)
- #define LED3_TOGGLE (GpioDataRegs.GPATOGGLE.bit.GPIO2=1)
- #define LED4_OFF (GpioDataRegs.GPASET.bit.GPIO3=1)
- #define LED4_ON (GpioDataRegs.GPACLEAR.bit.GPIO3=1)
- #define LED4_TOGGLE (GpioDataRegs.GPATOGGLE.bit.GPIO3=1)
- #define LED5_OFF (GpioDataRegs.GPASET.bit.GPIO4=1)
- #define LED5_ON (GpioDataRegs.GPACLEAR.bit.GPIO4=1)
- #define LED5_TOGGLE (GpioDataRegs.GPATOGGLE.bit.GPIO4=1)
- #define LED6_OFF (GpioDataRegs.GPASET.bit.GPIO15=1)
- #define LED6_ON (GpioDataRegs.GPACLEAR.bit.GPIO15=1)
- #define LED6_TOGGLE (GpioDataRegs.GPATOGGLE.bit.GPIO15=1)
- #define LED7_OFF (GpioDataRegs.GPASET.bit.GPIO6=1)
- #define LED7_ON (GpioDataRegs.GPACLEAR.bit.GPIO6=1)
- #define LED7_TOGGLE (GpioDataRegs.GPATOGGLE.bit.GPIO6=1)
- void LED_Init(void);
- #endif /* LED_H_ */
复制代码
第三步:配置定时中断 /****************************************************************** 文件名:time.C 参 数:无 返回值:无 作 用:初始化定时器,设定计数器初始化。 ******************************************************************/
time.h 头文件
- void TIM0_Init(float Freq, float Period);
- INTERRUPT void TIM0_IRQn(void);
- void TIM1_Init(float Freq, float Period);
- INTERRUPT void TIM1_IRQn(void);
- void TIM2_Init(float Freq, float Period);
- INTERRUPT void TIM2_IRQn(void);
- #endif /* TIME_H_ */
复制代码
第四步:配置主程序文件 。 /****************************************************************** 文件名:main.C 参 数:无 返回值:无 作 用:设置epwm波占空比变化速率,实现所有函数的调用。 ******************************************************************/
- void main()
- {
- int i=0;
- unsigned char fx=0;
- InitSysCtrl(); //将PLL配置成10倍频1分频,配置系统时钟为120M
- InitPieCtrl(); //初始化PIE 控制寄存器
- DINT;
- IER_DISABLE(0xffff);
- IFR_DISABLE(0xffff);
- InitPieVectTable();
- LED_Init();
- TIM0_Init(150,200000);//200ms
- EPWM1_Init(15000);
- while(1)
- {
- if(fx==0)
- {
- i++;
- if(i==15000)
- {
- fx=1;
- }
- }
- else
- {
- i--;
- if(i==0)
- {
- fx=0;
- }
- }
- EPwm1A_SetCompare(i); //i值最大可以取499,因为ARR最大值是499.
- EPwm1B_SetCompare(300-i); //i值最大可以取499,因为ARR最大值是499.
- DELAY_US(10*1000);
- }
- }
复制代码
实验现象:把示波器与GPIO0或GPIO1连接,测量PWM波的频率,波形如下所示:可以看到频率为3kHZ
源程序百度云盘链接 提取码:1111
|