历史上的今天

今天是:2024年09月20日(星期五)

正在发生

2018年09月20日 | STM32 PWM 占空比可变函数

发布者:静默思考 来源: eefocus关键字:STM32  PWM  占空比  可变函数 手机看文章 扫描二维码
随时随地手机看文章

频率 10K,占空比可以达到1%变化的精度,100K只能是10%的变化精度。




#define PWM_CLK1M_ARR_10K 100-1

 

void IzADCPWMInit(uint8_t duty)//10%~90%

{

 

  if(duty>90)

  {

 duty = 90;

  }

  if(duty<10)

  {

 duty = 10;

  } 

//reset 

  /* TIM4 enable counter */

  TIM_Cmd(TIM4, DISABLE);

 

   /* TIM4 Main Output Enable */

  TIM_CtrlPWMOutputs(TIM4, DISABLE); 

//end of reset

 

    /* System Clocks Configuration */

  RCCPWMADCConfiguration();

 

  /* GPIO Configuration */

  GPIOPWMADCConfiguration();

  /* -----------------------------------------------------------------------

    TIM3 Configuration: generate 4 PWM signals with 4 different duty cycles:

    The TIM3CLK frequency is set to SystemCoreClock (Hz), to get TIM3 counter

    clock at 24 MHz the Prescaler is computed as following:

     - Prescaler = (TIM3CLK / TIM3 counter clock) - 1

    SystemCoreClock is set to 72 MHz for Low-density, Medium-density, High-density

    and Connectivity line devices and to 24 MHz for Low-Density Value line and

    Medium-Density Value line devices

    The TIM3 is running at 36 KHz: TIM3 Frequency = TIM3 counter clock/(ARR + 1)

                                                  = 24 MHz / 666 = 36 KHz

    TIM3 Channel1 duty cycle = (TIM3_CCR1/ TIM3_ARR)* 100 = 50%

    TIM3 Channel2 duty cycle = (TIM3_CCR2/ TIM3_ARR)* 100 = 37.5%

    TIM3 Channel3 duty cycle = (TIM3_CCR3/ TIM3_ARR)* 100 = 25%

    TIM3 Channel4 duty cycle = (TIM3_CCR4/ TIM3_ARR)* 100 = 12.5%

  ----------------------------------------------------------------------- */

  /* Compute the prescaler value */

  //PrescalerValue = (uint16_t) (SystemCoreClock / 24000000) - 1;//24M

  //TIM3 Frequency=1MHz/(9999+1) =100Hz

  PrescalerValue = (uint16_t) (SystemCoreClock / 1000000) - 1; //TIM3 counter clock: 1MHz

  /* Time base configuration */

  //TIM_TimeBaseStructure.TIM_Period = 665;//(ARR)

  //TIM3 Frequency=1MHz/(9999+1) =100Hz

  //TIM_TimeBaseStructure.TIM_Period = 10000-1;  //TIM3 counter clock/TIM3 Frequency

  //TIM3 Frequency=1MHz/(99+1) =10 000Hz

  TIM_TimeBaseStructure.TIM_Period = PWM_CLK1M_ARR_10K;//PWM_CLK1M_ARR_100;  //TIM3 counter clock/TIM3 Frequency 

  TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;

  TIM_TimeBaseStructure.TIM_ClockDivision = 0;

  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

 

  TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);

 

  /* PWM1 Mode configuration: Channel1 */

  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;

  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

  //CCR1_Val =TIM3_ARR*duty/100;

 // TIM_OCInitStructure.TIM_Pulse = CCR1_Val;

 // TIM_OCInitStructure.TIM_Pulse = (uint16_t)(10000-1)*duty/100; 

  TIM_OCInitStructure.TIM_Pulse = (uint16_t)(PWM_CLK1M_ARR_10K)*duty/100;   

  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

 

//  TIM_OC1Init(TIM3, &TIM_OCInitStructure);

 

//  TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);

//PB6: TM4 Channel1  

  TIM_OC1Init(TIM4, &TIM_OCInitStructure);

 

  TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable); 

//PB8: TM4 Channel3

 

  /* PWM1 Mode configuration: Channel3 */

  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

  TIM_OCInitStructure.TIM_Pulse = (uint16_t)(PWM_CLK1M_ARR_10K)*duty/100;   

 

 

  TIM_OC3Init(TIM4, &TIM_OCInitStructure);

 

  TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable);

 

//PB7: TM4 Channel2

  /* PWM1 Mode configuration: Channel2 */

  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

  TIM_OCInitStructure.TIM_Pulse =  (uint16_t)(PWM_CLK1M_ARR_10K)*duty/100; ;

 

  TIM_OC2Init(TIM4, &TIM_OCInitStructure);

 

  TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable);

#if 0

  /* PWM1 Mode configuration: Channel4 */

  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

  TIM_OCInitStructure.TIM_Pulse = CCR4_Val;

 

  TIM_OC4Init(TIM3, &TIM_OCInitStructure);

 

 

  TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);

#endif

 

  TIM_ARRPreloadConfig(TIM4, ENABLE);

 

  /* TIM4 enable counter */

  TIM_Cmd(TIM4, ENABLE);

 

   /* TIM4 Main Output Enable */

  TIM_CtrlPWMOutputs(TIM4, ENABLE);

 

}


关键字:STM32  PWM  占空比  可变函数 引用地址:STM32 PWM 占空比可变函数

上一篇:对STM32的CAN1模块的总结
下一篇:ARM中的RO段、RW段和ZI段的区别

推荐阅读

作为一家快时尚女装品牌,目前Cache-Cache经营线下门店1000多家,并且开展了天猫、官网等线上业务。线上下单线下发货业务已经执行了2~3年,是天猫O2O业务的标杆。 随着门店的增加,产品线变多,且库存深度不够,门店铺货量大,为了最大化库存的利用。 Cache-Cache亟需一个符合公司行业特点的ERP解决方案,便于物料需求与采购、订单生产与交付、库存管理...
(文章来源:中科罗伯特机器人学院) 工业机器人仿真系统,是通过计算机对实际的机器人系统进行模拟的技术。机器人仿真系统可以通过单机或者多台机器人从而组成工作站或是生产线。这些工业机器人的仿真,可以在制造单机和生产线产品之前模拟出实物,这不仅可以缩短生产的工期,还可以避免不必要的返工。在这里我们就来了解一下工业机器人仿真软件有哪些...
iPad Air 4率先用上5nm处理器A14,这颗芯片还将被应用到iPhone 12系列上。苹果A14仿生芯片之后,华为、高通、三星等手机芯片厂商将会陆续跟进。其中高通、三星即将发布的5nm旗舰处理器分别为高通骁龙875和三星Exynos 1000。据报道,高通骁龙875、三星Exynos 1000均为“1+3+4”八核心设计,即一颗超大核心+三颗大核心+四颗能效核心组成。消息称三星Exy...
近日,Counterpoint发布了 2021 年第二季度全球中高端智能手机市场报告。该机构将中高端智能手机市场分为三类,划分区间为 400 美元、600 美元和 800 美元。其中,在 400 美元(约 2572 元人民币)以上的市场中,第二季度全球智能手机市场销售额同比增长了 46%,这一价位的手机全球销量占比从去年同期的 21% 提升至 24%。苹果市场份额达到...

史海拾趣

问答坊 | AI 解惑

DC-DC转换器 XC6383系列.pdf

DC-DC转换器 XC6383系列该文章很详细的介绍了许多转换器系列的单片机很有收藏价值…

查看全部问答∨

NEC研制新电池厚度仅0.3毫米

对很多人来说,有机游离基电池可能是个很陌生的名字。有机游离基电池由NEC所开发,和传统的锂电池比起来,有机游离基电池能做到更轻,更薄,更柔软,并且有高输出以及快速充电等特性。而现在,游离基电池的研究到达了一个新的高度:NEC研制出了厚度 ...…

查看全部问答∨

Atmaga16学习板上有自带的东西(是二级管吗)来做流水灯吗

Atmaga16学习板上有自带的东西(是二级管吗)来做流水灯吗…

查看全部问答∨

能用电阻、电容等来模拟电池的充放电吗?

想用电阻、电容等来模拟充电电池、比如锂电池,不知道应该如何模拟,电阻串电容、还是电阻并电容,容值如何选择?希望得到大家的指点。…

查看全部问答∨

2015电子大赛控制类题目预测

欢迎大家一起讨论一下控制类题目的预测 …

查看全部问答∨

關於MSP430F2553的IO控制

您好 现在要把2553写成UART to SPI(slave)的一个转换程式,但却碰到了一个问题。 SPI Master端也是用 2553完成的。 状况是Slave端的2553一直没办法读到Master发送过来的SPI data,读出的值都为0x00。 经过一些测试后,发现在slave端读取的SPI m ...…

查看全部问答∨

我的SD传感器数据怎么来的?

今天不经意间在手机SD卡里面看到保存的.CSV格式的传感器数据,打开一看,确认就是SensorTile开发板数据,于是今天再看了看程序。记录如下 SD保存文件如下,每个传感器一个文件 打开气压传感器,数据如下 其中时间戳值变化感觉和手机界面的曲线的 ...…

查看全部问答∨

从网上找了一个51开发板PCB 感觉并不怎么样 求高手指点一下它的优点

画板子也有半年了   经常画低频的板子    基本不需要ic元件    想要进一步的学习   所以就想从51开发板画起     从网上找了一个   据说可以直接打板子    & ...…

查看全部问答∨

LM334+PT100恒流测温电压输出不变

使用LM334恒流源输出2mA的电流,流过PT100,然后放大,为什么我把PT100放在热水中, 在PT100的上端测电压,电阻在变,电压一直不变是怎么回事? 电流的计算是根据数据手册,2mA=0.134V/67Ω …

查看全部问答∨

TMS320C55x汇编语言知识--宏指令

如果程序中需要多次执行某段程序,可以把这段程序定义(宏定义)为一个宏,然后在需要重复执行这段程序的地方调用这条宏。     如果需要多次引用一个宏,但是每次都有不同的数据,可以在宏里使用参数,每次使用时赋予参数不同值即可 &n ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved