完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1. 简介
本程序是基于stm32f103vet6单片机驱动led灯,使用pwm达到呼吸效果 1.1 选用引脚 [tr]PA2TIM2 CH1[/tr]1.2 灯泡 用的是野火的指南者STM32F103VET6,这个灯泡引脚是PB5,笔者将PB5与PA2接通(PB5对应的是TIM3,CH2,笔者一开始没有配置成功PB5的PWM,后来用PA2测试的,PB5需要把AFIO的部分映像功能打开就可以了 AFIO-》MAPR = AFIO_MAPR_TIM3_REMAP_1; //部分映像) 2. PWM PWM:Pulse Width Modulation 脉冲宽度调剂,是一种对模拟信号电平进行数字编码的方法。 随着电子技术的发展,出现了多种脉冲宽度调制(Pulse width modulation,PWM)技术,其中包括:相电压控制PWM、脉宽PWM法、随机PWM、SPWM法、线电压控制PWM等,而在镍氢电池智能充电器中采用的脉宽PWM法,它是把每一脉冲宽度均相等的脉冲列作为PWM波形,通过改变脉冲列的周期可以调频,改变脉冲的宽度或占空比可以调压,采用适当控制方法即可使电压与频率协调变化。可以通过调整PWM的周期、PWM的占空比而达到控制充电电流的目的。 模拟信号的值可以连续变化,其时间和幅度的分辨率都没有限制。9V电池就是一种模拟器件,因为它的输出电压并不精确地等于9V,而是随时间发生变化,并可取任何实数值。与此类似,从电池吸收的电流也不限定在一组可能的取值范围之内。模拟信号与数字信号的区别在于后者的取值通常只能属于预先确定的可能取值集合之内,例如在{0V,5V}这一集合中取值。 模拟电压和电流可直接用来进行控制,如对汽车收音机的音量进行控制。在简单的模拟收音机中,音量旋钮被连接到一个可变电阻。拧动旋钮时,电阻值变大或变小;流经这个电阻的电流也随之增加或减少,从而改变了驱动扬声器的电流值,使音量相应变大或变小。与收音机一样,模拟电路的输出与输入成线性比例。 尽管模拟控制看起来可能直观而简单,但它并不总是非常经济或可行的。其中一点就是,模拟电路容易随时间漂移,因而难以调节。能够解决这个问题的精密模拟电路可能非常庞大、笨重(如老式的家庭立体声设备)和昂贵。模拟电路还有可能严重发热,其功耗相对于工作元件两端电压与电流的乘积成正比。模拟电路还可能对噪声很敏感,任何扰动或噪声都肯定会改变电流值的大小。 通过以数字方式控制模拟电路,可以大幅度降低系统的成本和功耗。此外,许多微控制器和DSP已经在芯片上包含了PWM控制器,这使数字控制的实现变得更加容易了。 3. 配置PWM 说白了就是把频率配置好然后不断改变CCR3的值,就是在改变占空比。 3.1 用到的寄存器 3.2 配置PWM 这里我配置的是pwm 模式1:如果是向上计数,当TIMX_CNT《TIMX_CCRX时通道X为有效电平,否则为无效电平。 模式一:如下图所示将OCxM设置为6. 配置的向上计数:如下图为低电平就是向上计数 启动相应的预装载寄存器:将OCxPE置一 事件产生寄存器:将UG位置1 使能捕获/比较寄存器:CCERx置1(太重要了!!!) 4 相应代码 4.1 初始化引脚 初始化 打开GPIOA PA2和TIM2。 int main(void) { RCC-》APB2ENR |= RCC_APB2ENR_IOPAEN; GPIOA-》CRL |= (GPIOA-》CRL & 0XFFFFF0FF) | 0XB00; TIM2_Configuration(); while(1) { int i; for(i = 0; i 《 60; i++) { delay_ms(10); TIM2-》CCR3 = i*5; } for(i = 60; i》 0; i--) { delay_ms(10); TIM2-》CCR3 = i*5; } } return 0; ) 4.2 配置代码 pwm配置 void TIM2_Configuration( void) { RCC-》APB1ENR |= RCC_APB1ENR_TIM2EN; //使能 TIM2-》ARR = 250;//最大计数值 TIM2-》PSC = 999;// TIM2-》CR1 &=~TIM_CR1_DIR; TIM2-》CCMR2 |= TIM_CCMR2_OC3M_1|TIM_CCMR2_OC3M_2 | TIM_CCMR2_OC3PE ; TIM2-》CR1 |= TIM_CR1_ARPE; TIM2-》CCR3 = 50; TIM2-》CCER |= TIM_CCER_CC3P |TIM_CCER_CC3E ; TIM2-》EGR |= TIM_EGR_UG; TIM2-》RCR = 1; TIM2-》CR1 = TIM_CR1_CEN; TIM2-》BDTR |= TIM_BDTR_MOE; } 5. 结果 测试PA2的电压,会发现电压在变化,但其实电压是不会变化的,变化的原因是一会高电平一会低电平,在我们看来电压是变化的,所以led灯泡给我的感觉是在呼吸,如果用示波器测量,电压值就是稳定的。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1614 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1541 浏览 1 评论
970 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
682 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1592 浏览 2 评论
1863浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
644浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
515浏览 3评论
531浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
504浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 00:48 , Processed in 0.617874 second(s), Total 74, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号