STM32F103配置一个PWM输出的程序是什么

STM32F103配置一个PWM输出的程序是什么,第1张

上桥臂PWM输出,下桥臂常闭。你要是做电机的话这个就会好理解了。

用库函数不是有个TIM_CCxN配置的函数。给TIM_CCx配置一个CCR的值。把互补通道这个关掉就好了。

脉冲宽度调制(PWM),是对脉冲宽度的控制。

STM32 的定时器除了 TIM6 和 7。其他的定时器都可以用来产生 PWM 输出。其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出。而通用定时器也能同时产生多达 4路的 PWM 输出,这样, STM32 最多可以同时产生 30 路 PWM 输出!

本实验是利用 TIM3 的通道 2,把通道 2 重映射到 PB5, 产生 PWM 来控制 DS0 的亮度。

TIM3_CH2 默认是接在 PA7上面的,而我们的 DS0 接在 PB5 上面,可以通过重映射功能,把 TIM3_CH2映射到 PB5 上。

STC12C56xxAD芯片用pwm调速程序的代码如下:

sbit k1=P3^4;

sbit k2=P3^5;

void delay(unsigned int cnt)

{

unsigned char i;

for(;cnt>0;cnt--)

for(i=0;i<250;i++);

}

void main()

{

CCON=0; //PCA初始化

CL=0; //PCA的16位计数器低八位

CH=0; //PCA的16位计数器高八位

CMOD=0x00; //选择 系统时钟/12 为计数脉冲,则PWM的频率f=sysclk/256/12;

CCAP0H=0x80; // 占空比控制

CCAP0L=0x80;

PCA_PWM0=0x00; //控制占空比的第九位为0

CCAPM0=0x42; //允许P13作为PWM输出

CR=1; //启动PCA计数器

while(1)

{

if(k1==0)

{

delay(200);

while(k1==0);

CCAP0H+=5; //占空比调节

CCAP0L+=10;

}

if(k2==0)

{

delay(200);

while(k2==0);

CCAP0H-=5; //占空比调节

CCAP0L-=5;

}

}

}

#ifndef __PWM__H__

#define __PWM__H__

void pwm_ccp1(unsigned char a,unsigned char b);

void pwm_ccp2(unsigned char a,unsigned char b);

#endif

void pwm_ccp1(unsigned char a,unsigned char b) //左边PWM

//CCP1 模块的 PWM 工作方式,周期为(b+1)4Tosc(TMR2前分频值)=b+1 us //pwm高电平=a:CCP1CON(第四五位)Tosc(TMR2前分频值)

//pwm高电平=a:CCP1CON(第四五位)Tosc(TMR2前分频值)

{ //a>b时有最高转速

CCPR1L=a; // 设置工作循环的高 8bit 为 a

CCP1CON=0X0C; //0000 1100 设置 CCP1 为 PWM 工作方式,且工作循环的低 bit2 为 11/

CCP1IE=0;; // 禁止总中断和外围中断 /

PR2=b; // 设置 PWM 周期 /

TRISC2=0; // 设置 RC2/CCP1 为输出 /

T2CON=0X04; // 0000 1000前分频比为 1:1 ,后分频器1:2,打开 TMR2 ,同时输出 PWM 信号 /

}

void pwm_ccp2(unsigned char a,unsigned char b) //右边PWM

//CCP2 模块的 PWM 工作方式,周期为(b+1)4Tosc(TMR2前分频值),

//pwm高电平=a:CCP2CON(第四五位)Tosc(TMR2前分频值)

{

CCPR2L=a; // 设置工作循环的高 8bit 为 a

CCP2CON=0X0C; // 设置 CCP2 为 PWM 工作方式,且工作循环的低 bit2 为 11/

CCP2IE=0; // 中断屏蔽

PR2=b; // 设置 PWM 周期 /

TRISC1=0; // 设置 RC1/CCP2 为输出 /

T2CON=0X04; // 前分频比为 1 ,打开 TMR2 ,同时输出 PWM 信号 /

}

第一,要理解中断在这里的作用是固定的“一小段”时间进入一次。

第二,PWM_ON在程序中的作用很大,它会由0------>CYCLE------>0并且一直循环下去。可以把它看成一个有规律的变化的量。

第三,每进入中断一次count++,满足条件count==PWM_ON或count==CYCLE时改变LED的当前状态。作用是给小灯亮或灭的时间不同。

第四,LED的亮度与其通电时间有关,也可以说成是占空比。上面的条件要理解成是呈线性增加或减小的频率。可以理解成三角波,对应的面积就是通电时间。

不知能不能给你讲明白!

以上就是关于STM32F103配置一个PWM输出的程序是什么全部的内容,包括:STM32F103配置一个PWM输出的程序是什么、STC12C56xxAD芯片怎么用pwm调速程序、PIC单片机输出PWM波的C语言源程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9874843.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存