历史上的今天
返回首页

历史上的今天

今天是:2024年09月11日(星期三)

正在发生

2020年09月11日 | PWM控制led渐变

2020-09-11 来源:eefocus

PWM,中文释义:脉冲宽度调制。它是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。


PWM 是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。


STM32的定时器除了TIM6和7。其他的定时器都可以用来产生PWM输出。其中高级定时器TIM1和TIM8可以同时产生多达7路的PWM输出。而通用定时器也能同时产生多达4路的PWM输出,这样,STM32最多可以同时产生30路PWM输出!(在编程过程中的定时器重映像时涉及到)


STM32 的PWM是TIMx_ARR寄存器确定频率(周期)、由TIMx_CCRx寄存器确定占空比的信号。


PWM  模式


脉冲宽度调制模式可以产生一个由 TIM1_ARR 寄存器确定频率、由TIM1_CCRx寄存器确定占空比的信号。在 TIM1_CCMRx寄存器中的OCxM位写入“110”(PWM 模式 1)或“111”(PWM 模式 2),能够独立地设置每个通道工作在 PWM模式,每个 OCx 输出一路 PWM。必须通过设置 TIM1_CCMRx 寄存器 OCxPE 位使能相应的预装载寄存器,最后还要设置 TIM1_CR1 寄存器的 ARPE 位使能自动重装载的预装载寄存器(在向上计数或中心对称模式中)。


PWM 边沿对齐模式  


向上计数配置     当 TIM1_CR1 寄存器中的 DIR 位为低的时候执行向上计数。 在 PWM 模式 1,当 TIM1_CNT

向下计数的配置   当 TIM1_CR1 寄存器的 DIR 位为高时执行向下计数。 在 PWM 模式 1,当 TIM1_CNT>TIM1_CCRx 时参考信号 OCxREF 为低,否则为高。如果 TIM1_CCRx 中的比较值大于 TIM1_ARR 中的自动重装载值,则 OCxREF保持为“1"。该模式下不能产生 0%的 PWM 波形。


PWM 中央对齐模式


当TIM1_CR1寄存器中的CMS位不为 00时为中央对齐模式(所有其他的配置对OCxREF/OCx信号都有相同的作用)。根据不同的CMS位的设置,比较标志可能 在计数器向上计数时被置 1、在计数器向下计数时被置 1、或在计数器向上和向下计数时被置 1。TIM1_CR1寄存器中的计数方向位(DIR)由硬件更新,不要用软件修改它。 图 3-2给出了一些中央对齐的PWM波形的例子 · TIM1_ARR=8 ; · PWM模式 1; · TIM1_CR1 寄存器中的 CMS=01,在中央对齐模式 1 时,当计数器向下计数时标志被设置。


测试用例:(PWM控制led亮度的渐变)


 1 #include "pbdata.h"

 2 #include "led.h"

 3 #include "misc.h"

 4 #include "stm32f10x_tim.h"

 5 

 6 void RCC_Configration(void)

 7 {

 8      SystemInit();

 9      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

10      RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);      //定时器时钟使能

11      RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);     //端口复用使能,因为要使用PWM

12 }

13 

14 void GPIO_Configration(void)

15 {

16     GPIO_LED_Configration();

17 }

18 

19 void TIM_Configuration(void)

20 {

21     TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;        

22     TIM_OCInitTypeDef TIM_OCInitStructure;

23 

24     GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);      // 定时器管脚映射,部分重映像到PB5,PB5正好为接led的管脚(搜索“复用功能重映射”)

25 

26     TIM_TimeBaseStructure.TIM_Period = 2000;            //设置初始值,定时1s

27     TIM_TimeBaseStructure.TIM_Prescaler = 35999;   //设置预分频

28     TIM_TimeBaseStructure.TIM_ClockDivision = 0;         //时钟分割

29     TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;   //向上计数

30     TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

31 

32     //pwm 初始化

33     TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;         //设置为PWM模式1

34     TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;             //    输出使能?????

35     TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;                 //设置输出极性

36 

37     TIM_OC2Init(TIM3,&TIM_OCInitStructure);        //选择定时器通道2

38     TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);      //预装载使能

39     TIM_Cmd(TIM3,ENABLE);                 //定时器外设打开

40 }

41 

42 

43 int main(void)

44 {

45         u8 led_fx = 1;

46         u16 led_dt = 0;

47         RCC_Configration();

48         GPIO_Configration();

49         TIM_Configuration();

50         while(1)

51        {

52            // delay_ms(10);

53          if(led_fx==1)

54          {

55              led_dt++;

56          }

57          else

58          {

59            led_dt--;

60          }    

61          if(led_dt>1000)  led_fx=0;

62             if(led_dt==0)     led_fx=1;

63     

64          TIM_SetCompare2(TIM3,led_dt);

65        }    

66 }



--------------------------------------------------------------------------------------------------------------------------------------------------------------->补充...


GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);有了这个管脚的映射后,PWM才和LED有了联系,相应管脚才会以PWM方式输出。


推荐阅读

史海拾趣

Allied Electronic & Semiconductor Technology Inc公司的发展小趣事

随着国内市场的饱和,AE&ST公司开始将目光投向全球。公司积极寻找国际合作伙伴,拓展海外市场。在一次国际电子展上,AE&ST与一家欧洲知名电子公司达成了战略合作协议。双方共同研发了一款针对欧洲市场的特色产品,并成功打开了欧洲市场的大门。此后,AE&ST公司不断深化与国际伙伴的合作,逐步实现了全球化布局。

General Instrument Optoelectronics公司的发展小趣事
发声电路中的元件(如三极管、蜂鸣器等)可能损坏,或者驱动电路设置不正确。
科达嘉CODACA公司的发展小趣事

科达嘉电子高度重视质量管理,先后通过了ISO9001质量管理体系、ISO14001环境管理体系认证。公司不仅建立了完善的质量检测流程,还成立了专门的检测中心,对产品进行严格的质量把控。这些措施确保了科达嘉电子产品的稳定性和可靠性,进一步提升了公司在市场上的竞争力。

ELNA(依娜)公司的发展小趣事

进入电子领域后,ELNA迅速在电子元件领域取得了突破。公司凭借其在材料科学和制造工艺方面的专长,成功开发出了一系列高性能的电子元件产品。这些产品广泛应用于通信、计算机、消费电子等领域,为ELNA赢得了广泛的客户群。

为了保持技术领先,ELNA不断投入研发资源,加强技术创新。公司积极引进国际先进的生产设备和检测手段,提升产品品质和可靠性。同时,ELNA还加强了与国内外科研机构和高校的合作,共同推动电子元件技术的发展。

E-tec Interconnect Ltd公司的发展小趣事

E-tec Interconnect Ltd成立于XX世纪初,起初是一家专注于电子连接器设计与制造的小型公司。在创始团队的带领下,E-tec注重基础技术的积累,投入大量资源进行研发和创新。他们成功开发了一系列高精度、高可靠性的连接器产品,为公司的后续发展奠定了坚实的基础。

南京国博公司的发展小趣事

国博电子的前身可以追溯到2000年成立的上海华信集成电路有限公司,起初专注于射频芯片的研发与生产。随着技术的积累和市场的拓展,公司逐步从单一的射频芯片企业成长为覆盖射频芯片、模块、组件的完整产业平台。这一跨越不仅体现了公司在技术上的深厚积累,也反映了其对市场需求的敏锐洞察和快速响应能力。通过不断的技术创新和产品研发,国博电子成功在无线通信、移动通信等领域占据了一席之地。

问答坊 | AI 解惑

不用电池的双音门铃

随着电话机的普及率越来越高,拥有住宅电话的家庭也越来越多,但大多数住宅电话使用率很低,利用电话入户馈线提供的48V(60V)直流馈电作电子门铃的工作能源是经济实用的。现介绍一款不用电池的双音门铃电路。电路原理如图所示,不难看出,图中电路 ...…

查看全部问答>

偶的FPGA ,NIOS的资料,与大家分享

正打算下个版本的示波器使用FPGA做,所以下了一些资料,觉得这篇还不错,传上来. 入门学习很好的资料…

查看全部问答>

关于TCPMP解码图片的问题

     请问各位大侠,我在做wince下用TCPMP解码图片,但是我想将图片绘制在我提供的DC上面该怎么做?      我开发的平台是三星2530,在此之前我做过三星2440下面相同的程序,能将图片解码到我提供的DC上面 ...…

查看全部问答>

请问在ce5.0的platform builder中用cec editor如何添加一个dll文件?

请问在ce5.0的platform builder中用cec editor如何添加一个dll文件?…

查看全部问答>

牛人关于IC设计流程说明:

牛人关于IC设计流程说明:1:Datasheet定义,这个是市场、AE、RD共同完成;2:电路设计,RD完成;3:Layout, Layout Engineer完成,但RD指导并配合(算RD部门);4:IC测试电路,RD定义测试电路和方法,AE完成PCB Layout(此AE一般是跟踪本项目的 ...…

查看全部问答>

教材求助

我是DSP刚入门的菜鸟,跪求关于学习DSP的宝典级教材或是资料!万分感谢!!!!…

查看全部问答>

基于MSP430F149+nRF905无线数传模块的调试心得

调试nRF905无线模块近一个星期之久,下面细说一下基于MSP430F149+nRF905的调试步骤。   l  看到很多网友提出 First:测试nRF905模块是否正常工作        对于发射机  进入发射状态31脚1.5V&nbs ...…

查看全部问答>

飞思卡尔FTF2012中国站:开发创新积极务实的盛会

    8月14日和8月15日 , 飞思卡尔FTF2012中国站在北京国贸大饭店隆重举行。阿牛哥一直关注着FTF盛会,无论是前一段时间FTF2012美国站的报道,还有阿牛哥应邀加过FTF2010上海,FTF2011深圳的盛会。这是一个所有工程师朋友都期待的盛 ...…

查看全部问答>

LM3S9D90 DMA方式ADC高速转换疑点

小生最近在用LM3S9D90,ADC用高速转换(500K的转换速度算快吗?),因此使用DMA进行数据搬移。有两点我是一直搞不懂的: 1、  DMA仲裁机制是干嘛用的? 2、  ADC的缓冲是否一定要32位的? 以下是节选ADC和DMA初始化程序: ...…

查看全部问答>

卖全新未拆封的LM3S811开发套件,C2000LauchPad 以及430LauchPad

要毕业了,才发现有没拆封的开发板:LM3S811卖100,c2000LAUCHpad卖50,430那个卖15.需要的联系马化腾:694311468…

查看全部问答>