STC15W408AS单片机3路PWM输出波形实测

STC15W408AS单片机3路PWM输出波形实测

分析工具

某宝25就的工具,速度最高是24M的,完全够用了。

在这里插入图片描述

  • Logic 2.3.41(软件官网即可下载到,不过只支持英文的)
    在这里插入图片描述

注意事项

在对3路波形进行同时采样测量时,最好都使用独立的测试引线,不要使用排线,如果使用排线的话,相互之间会产生干扰,测量不准。最好是线与线之间进行隔离开来。要不就是独立一路一路测量。

  • STC15W408AS在主频11.0592MHZ下逻辑分析仪实时采集的数据
    在这里插入图片描述
  • P35引脚采集的波形数据
    在这里插入图片描述
  • P36引脚采集的波形数据
    在这里插入图片描述
  • P37引脚采集的波形数据
    在这里插入图片描述

细节放到

在这里插入图片描述
在这里插入图片描述

  • STC15W408AS在主频24MHZ下逻辑分析仪实时采集的数据
    在这里插入图片描述
  • P37引脚采集的波形数据参数显示
    在这里插入图片描述
  • 细节放大
    在这里插入图片描述
  • 局部细节
    在这里插入图片描述
  • 局部细节下,具体数据参数
    在这里插入图片描述
  • P36引脚采集的波形数据参数显示
    在这里插入图片描述
  • P35引脚采集的波形数据参数显示
    在这里插入图片描述

测试程序(库函数版本)


#include	"config.h"
#include	"PCA.h"
#include	"delay.h"

/*************	功能说明	**************

输出3路9~16位变化的PWM信号。类似"呼吸灯"的驱动.

PWM频率 = MAIN_Fosc / PWM_DUTY, 假设 MAIN_Fosc = 24MHZ, PWM_DUTY = 6000, 则输出PWM频率为4000HZ.

******************************************/

/*************	本地常量声明	**************/


/*************	本地变量声明	**************/

u16	pwm0,pwm1,pwm2;


/*************	本地函数声明	**************/



/*************  外部函数和变量声明 *****************/


void	PCA_config(void)
{
	PCA_InitTypeDef		PCA_InitStructure;

	PCA_InitStructure.PCA_Clock    = PCA_Clock_1T;		//PCA_Clock_1T, PCA_Clock_2T, PCA_Clock_4T, PCA_Clock_6T, PCA_Clock_8T, PCA_Clock_12T, PCA_Clock_Timer0_OF, PCA_Clock_ECI
	PCA_InitStructure.PCA_IoUse    = PCA_P34_P35_P36_P37;	//PCA_P12_P11_P10_P37, PCA_P34_P35_P36_P37, PCA_P24_P25_P26_P27
	PCA_InitStructure.PCA_Interrupt_Mode = DISABLE;		//ENABLE, DISABLE
	PCA_InitStructure.PCA_Polity   = PolityHigh;			//优先级设置	PolityHigh,PolityLow
	PCA_InitStructure.PCA_RUN      = DISABLE;			//ENABLE, DISABLE
	PCA_Init(PCA_Counter,&PCA_InitStructure);

	PCA_InitStructure.PCA_Mode     = PCA_Mode_HighPulseOutput;		//PCA_Mode_PWM, PCA_Mode_Capture, PCA_Mode_SoftTimer, PCA_Mode_HighPulseOutput
	PCA_InitStructure.PCA_PWM_Wide = 0;					//PCA_PWM_8bit, PCA_PWM_7bit, PCA_PWM_6bit
	PCA_InitStructure.PCA_Interrupt_Mode = ENABLE;		//PCA_Rise_Active, PCA_Fall_Active, ENABLE, DISABLE
	PCA_InitStructure.PCA_Value    = 65535;			//对于软件定时, 为匹配比较值
	PCA_Init(PCA0,&PCA_InitStructure);

	PCA_InitStructure.PCA_Mode     = PCA_Mode_HighPulseOutput;		//PCA_Mode_PWM, PCA_Mode_Capture, PCA_Mode_SoftTimer, PCA_Mode_HighPulseOutput
	PCA_InitStructure.PCA_PWM_Wide = 0;					//PCA_PWM_8bit, PCA_PWM_7bit, PCA_PWM_6bit
	PCA_InitStructure.PCA_Interrupt_Mode = ENABLE;		//PCA_Rise_Active, PCA_Fall_Active, ENABLE, DISABLE
	PCA_InitStructure.PCA_Value    = 65535;				//对于软件定时, 为匹配比较值
	PCA_Init(PCA1,&PCA_InitStructure);

	PCA_InitStructure.PCA_Mode     = PCA_Mode_HighPulseOutput;		//PCA_Mode_PWM, PCA_Mode_Capture, PCA_Mode_SoftTimer, PCA_Mode_HighPulseOutput
	PCA_InitStructure.PCA_PWM_Wide = 0;					//PCA_PWM_8bit, PCA_PWM_7bit, PCA_PWM_6bit
	PCA_InitStructure.PCA_Interrupt_Mode = ENABLE;		//PCA_Rise_Active, PCA_Fall_Active, ENABLE, DISABLE
	PCA_InitStructure.PCA_Value    = 65535;				//对于软件定时, 为匹配比较值
	PCA_Init(PCA2,&PCA_InitStructure);
}


/******************** task A **************************/
void main(void)
{
	P2M1 &= ~(0xe0);	//P2.7 P2.6 P2.5 设置为推挽输出
	P2M0 |=  (0xe0);
	
	PCA_config();
	pwm0 = (PWM_DUTY / 4 * 1);	//给PWM一个初值
	pwm1 = (PWM_DUTY / 4 * 2);
	pwm2 = (PWM_DUTY / 4 * 3);

	PWMn_Update(PCA0,pwm0);
	PWMn_Update(PCA1,pwm1);
	PWMn_Update(PCA2,pwm2);

	EA = 1;
	
	while (1)
	{
		delay_ms(2);

		//if(++pwm0 >= PWM_HIGH_MAX)	
			pwm0 = PWM_HIGH_MAX;
		PWMn_Update(PCA0,pwm0);

		//if(++pwm1 >= PWM_HIGH_MAX)	
			pwm1 = PWM_HIGH_MIN;
		PWMn_Update(PCA1,pwm1);

		//if(++pwm2 >= PWM_HIGH_MAX)	
			pwm2 = PWM_HIGH_MIN;
		PWMn_Update(PCA2,pwm2);
	}
}


测试程序资源

链接:https://pan.baidu.com/s/1VNtaWd59ja0mPIW-hEg4eg 
提取码:yqux

版权声明:本文为CSDN博主「perseverance52」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42880082/article/details/122009508

STC15W408AS单片机3路PWM输出波形实测

分析工具

某宝25就的工具,速度最高是24M的,完全够用了。

在这里插入图片描述

  • Logic 2.3.41(软件官网即可下载到,不过只支持英文的)
    在这里插入图片描述

注意事项

在对3路波形进行同时采样测量时,最好都使用独立的测试引线,不要使用排线,如果使用排线的话,相互之间会产生干扰,测量不准。最好是线与线之间进行隔离开来。要不就是独立一路一路测量。

  • STC15W408AS在主频11.0592MHZ下逻辑分析仪实时采集的数据
    在这里插入图片描述
  • P35引脚采集的波形数据
    在这里插入图片描述
  • P36引脚采集的波形数据
    在这里插入图片描述
  • P37引脚采集的波形数据
    在这里插入图片描述

细节放到

在这里插入图片描述
在这里插入图片描述

  • STC15W408AS在主频24MHZ下逻辑分析仪实时采集的数据
    在这里插入图片描述
  • P37引脚采集的波形数据参数显示
    在这里插入图片描述
  • 细节放大
    在这里插入图片描述
  • 局部细节
    在这里插入图片描述
  • 局部细节下,具体数据参数
    在这里插入图片描述
  • P36引脚采集的波形数据参数显示
    在这里插入图片描述
  • P35引脚采集的波形数据参数显示
    在这里插入图片描述

测试程序(库函数版本)


#include	"config.h"
#include	"PCA.h"
#include	"delay.h"

/*************	功能说明	**************

输出3路9~16位变化的PWM信号。类似"呼吸灯"的驱动.

PWM频率 = MAIN_Fosc / PWM_DUTY, 假设 MAIN_Fosc = 24MHZ, PWM_DUTY = 6000, 则输出PWM频率为4000HZ.

******************************************/

/*************	本地常量声明	**************/


/*************	本地变量声明	**************/

u16	pwm0,pwm1,pwm2;


/*************	本地函数声明	**************/



/*************  外部函数和变量声明 *****************/


void	PCA_config(void)
{
	PCA_InitTypeDef		PCA_InitStructure;

	PCA_InitStructure.PCA_Clock    = PCA_Clock_1T;		//PCA_Clock_1T, PCA_Clock_2T, PCA_Clock_4T, PCA_Clock_6T, PCA_Clock_8T, PCA_Clock_12T, PCA_Clock_Timer0_OF, PCA_Clock_ECI
	PCA_InitStructure.PCA_IoUse    = PCA_P34_P35_P36_P37;	//PCA_P12_P11_P10_P37, PCA_P34_P35_P36_P37, PCA_P24_P25_P26_P27
	PCA_InitStructure.PCA_Interrupt_Mode = DISABLE;		//ENABLE, DISABLE
	PCA_InitStructure.PCA_Polity   = PolityHigh;			//优先级设置	PolityHigh,PolityLow
	PCA_InitStructure.PCA_RUN      = DISABLE;			//ENABLE, DISABLE
	PCA_Init(PCA_Counter,&PCA_InitStructure);

	PCA_InitStructure.PCA_Mode     = PCA_Mode_HighPulseOutput;		//PCA_Mode_PWM, PCA_Mode_Capture, PCA_Mode_SoftTimer, PCA_Mode_HighPulseOutput
	PCA_InitStructure.PCA_PWM_Wide = 0;					//PCA_PWM_8bit, PCA_PWM_7bit, PCA_PWM_6bit
	PCA_InitStructure.PCA_Interrupt_Mode = ENABLE;		//PCA_Rise_Active, PCA_Fall_Active, ENABLE, DISABLE
	PCA_InitStructure.PCA_Value    = 65535;			//对于软件定时, 为匹配比较值
	PCA_Init(PCA0,&PCA_InitStructure);

	PCA_InitStructure.PCA_Mode     = PCA_Mode_HighPulseOutput;		//PCA_Mode_PWM, PCA_Mode_Capture, PCA_Mode_SoftTimer, PCA_Mode_HighPulseOutput
	PCA_InitStructure.PCA_PWM_Wide = 0;					//PCA_PWM_8bit, PCA_PWM_7bit, PCA_PWM_6bit
	PCA_InitStructure.PCA_Interrupt_Mode = ENABLE;		//PCA_Rise_Active, PCA_Fall_Active, ENABLE, DISABLE
	PCA_InitStructure.PCA_Value    = 65535;				//对于软件定时, 为匹配比较值
	PCA_Init(PCA1,&PCA_InitStructure);

	PCA_InitStructure.PCA_Mode     = PCA_Mode_HighPulseOutput;		//PCA_Mode_PWM, PCA_Mode_Capture, PCA_Mode_SoftTimer, PCA_Mode_HighPulseOutput
	PCA_InitStructure.PCA_PWM_Wide = 0;					//PCA_PWM_8bit, PCA_PWM_7bit, PCA_PWM_6bit
	PCA_InitStructure.PCA_Interrupt_Mode = ENABLE;		//PCA_Rise_Active, PCA_Fall_Active, ENABLE, DISABLE
	PCA_InitStructure.PCA_Value    = 65535;				//对于软件定时, 为匹配比较值
	PCA_Init(PCA2,&PCA_InitStructure);
}


/******************** task A **************************/
void main(void)
{
	P2M1 &= ~(0xe0);	//P2.7 P2.6 P2.5 设置为推挽输出
	P2M0 |=  (0xe0);
	
	PCA_config();
	pwm0 = (PWM_DUTY / 4 * 1);	//给PWM一个初值
	pwm1 = (PWM_DUTY / 4 * 2);
	pwm2 = (PWM_DUTY / 4 * 3);

	PWMn_Update(PCA0,pwm0);
	PWMn_Update(PCA1,pwm1);
	PWMn_Update(PCA2,pwm2);

	EA = 1;
	
	while (1)
	{
		delay_ms(2);

		//if(++pwm0 >= PWM_HIGH_MAX)	
			pwm0 = PWM_HIGH_MAX;
		PWMn_Update(PCA0,pwm0);

		//if(++pwm1 >= PWM_HIGH_MAX)	
			pwm1 = PWM_HIGH_MIN;
		PWMn_Update(PCA1,pwm1);

		//if(++pwm2 >= PWM_HIGH_MAX)	
			pwm2 = PWM_HIGH_MIN;
		PWMn_Update(PCA2,pwm2);
	}
}


测试程序资源

链接:https://pan.baidu.com/s/1VNtaWd59ja0mPIW-hEg4eg 
提取码:yqux

版权声明:本文为CSDN博主「perseverance52」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42880082/article/details/122009508

perseverance52

我还没有学会写个人说明!

暂无评论

相关推荐

STC15W408AS单片机3路PWM输出波形实测

STC15W408AS单片机3路PWM输出波形实测分析工具 某宝25就的工具,速度最高是24M的,完全够用了。 Logic 2.3.41(软件官网即可下载到,不过只支持英文的&#xff09

STC15W408AS单片机IIC驱动0.96寸OLED显示

STC15W408AS单片机IIC驱动0.96寸OLED显示不同页的滚动效果() 全页的滚动效果 STC15W408AS最新系统板 注意图片上的0欧姆电阻贴错了位置,应该是与GND相连的,

基于8051单片机实现电子时钟+数字秒表设计

概述 电子时钟是一种利用数字电路来显示秒、分、时的计时装置,与传统的机械钟相比,它具有走时准确、显 示直观、无机械传动装置等优点,因而得到广泛应用。随着人们生活环境的不断改善和美化,在许

智能车浅谈——抗干扰技术软件篇

软件抗干扰技术 前面介绍了一些硬件抗干扰技术,不难发现,要做好一个完美的硬件系统是需要花大心思的,而且很多硬件抗扰方案都需要借助一些元器件来实现,这在一定程度上增加了费用,