电子发烧友网 > 嵌入式技术 > 正文

STM32定时器产生PWM彻底应用

2018年02月11日 11:26 次阅读

这次学习STM32花了很长时间,一个礼拜多,也有颇多收获,学习过程也有颇多曲折。这次的任务是:用STM32的一个定时器在四个通道上产生四路频率可调占空比可调的PWM波。

看到这个题,我先看STM32的数据手册,把STM32的定时器手册看完就花了一天,但是看了一遍任然不知道所云,就看库函数,略有点理解,就想一哈把这个程序调出来,于是就花了一天多时间仿照网上别人的程序来写,花了一天多写出来调试,结果行不通,做了无用功,于是静下心来想想,还是一步一步的来。

我先用STM32的通用定时器用PWM模式产生四路相同占空比,不同频率的PWM波,配置如下:

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//使能TIM2时钟

TIM_InternalClockConfig(TIM2);//使用内部时钟

TIM_BaseInitStructure.TIM_Prescaler=3; //设置TIM时钟频率除数的预分频值

TIM_BaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;//选择计数器模式

TIM_BaseInitStructure.TIM_Period=1799;//设置下一个更新事件装入活动的自动重装载寄存器周期的值

TIM_BaseInitStructure.TIM_ClockDivision=0;//设置时钟分割

TIM_TimeBaseInit(TIM2,&TIM_BaseInitStructure);

//通道1

TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;//选择定时器模式

TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//选择输出比较状态

TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Disable;//选择互补输出比较状态

TIM_OCInitStructure.TIM_Pulse=CCR1_Val;//设置了待装入捕获比较器的脉冲值

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

TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCNPolarity_Low;//设置互补输出极性

TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Set;//选择空闲状态下得非工作状态

TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCNIdleState_Reset;//选择互补空闲状态下得非工作状态

TIM_OC1Init(TIM2,&TIM_OCInitStructure);

TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);

//通道2

TIM_OCInitStructure.TIM_Pulse=CCR2_Val;//设置了待装入捕获比较器的脉冲值

TIM_OC2Init(TIM2,&TIM_OCInitStructure);

TIM_OC2PreloadConfig(TIM2,TIM_OCPreload_Enable);

//通道3

TIM_OCInitStructure.TIM_Pulse=CCR3_Val;//设置了待装入捕获比较器的脉冲值

TIM_OC3Init(TIM2,&TIM_OCInitStructure);

TIM_OC3PreloadConfig(TIM2,TIM_OCPreload_Enable);

//通道4

TIM_OCInitStructure.TIM_Pulse=CCR4_Val;//设置了待装入捕获比较器的脉冲值

TIM_OC4Init(TIM2,&TIM_OCInitStructure);

TIM_OC4PreloadConfig(TIM2,TIM_OCPreload_Enable);

TIM_Cmd(TIM2, ENABLE);

TIM_CtrlPWMOutputs(TIM2,ENABLE);

用pwm模式输出的频率和占空比是固定的,不可调,要想输出频率可调,占空比可调,必须得使用比较输出模式。这点资料是在STM32全国巡回研讨会上看到的,如图:

所以,接下来我就写了一个程序通过输出比较模式产生一路PWM波,这个波的频率和占空比都由自己确定,函数配置如下:

TIM_BaseInitStructure.TIM_Prescaler=3; //设置TIM时钟频率除数的预分频值(18M)

TIM_BaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;//选择计数器模式

TIM_BaseInitStructure.TIM_Period=1800;//设置下一个更新事件装入活动的自动重装载寄存器周期的值

TIM_BaseInitStructure.TIM_ClockDivision=0;//设置时钟分割

TIM_TimeBaseInit(TIM2,&TIM_BaseInitStructure);

//通道1

TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_Toggle;//选择定时器模式

TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//选择输出比较状态

TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Disable;//选择互补输出比较状态

TIM_OCInitStructure.TIM_Pulse=CCR1_Val1;//设置了待装入捕获比较器的脉冲值

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

TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCNPolarity_Low;//设置互补输出极性

TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Set;//选择空闲状态下得非工作状态

TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCNIdleState_Reset;//选择互补空闲状态下得非工作状态

TIM_OC1Init(TIM2,&TIM_OCInitStructure);

TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Disable);

TIM_ARRPreloadConfig(TIM2,ENABLE);

TIM_ITConfig(TIM2,TIM_IT_CC1,ENABLE);

TIM_Cmd(TIM2,ENABLE);

}

void TIM2_IRQHandler(void)

{

TIM_ClearITPendingBit(TIM2,TIM_IT_CC1);

if(n==1)

{

n=0;

TIM_SetCompare1(TIM2,CCR1_Val2);

}

else

{

n=1;

TIM_SetCompare1(TIM2,CCR1_Val1);

}

}

通过改变比较寄存器(CCR1)中的值,改变PWM的占空比,在每次匹配中断中改变CCR1的值。上面程序实现的是产生一路频率为10K占空比为40%的PWM波。

有了上面的思想我就想产生四路不同频率不同占空比的PWM波,经过反复思考光配函数似乎不能实现,在网上去查了的,很多网友也说不能实现,有一个网友给了一个提示:软件模拟。刚开始没明白什么意思,于是还是自己继续配置库函数,在这个过程中一直有两个疑问:

每次中断中,CCR寄存器的值都在循环的增加,CCR的寄存器不可能是无限大吧?就算是无限大,计数器也不是无限大呀,他只能记到65535。初步确定使用匹配中断不行,我有想过同时使用溢出中断和匹配中断,但这样四路PWM波只能是固定的,频率和占空比不能调。大概说一下怎样用溢出中断和匹配中断实现四路固定的PWM波,把计数器寄存器(CNT)的值装最大周期的那个PWM波,当一次计数完成算一下三路小点周期数,在匹配中断中对应的设个变量,CCR就改变几次,溢出中断来了就再次给计数器装初值,同时四个比较寄存器从装初值,这样很麻烦,理论上可以实现,但我考虑到最终不能实现我的要求,就没有去验证。所以产生四路频率可调占空比可调,用一个定时器似乎不能实现,就一直卡到这里,我又在想飞哥说能实现,就肯定能实现,我又在网上找资料,还是没找到,只是有人题四路,软模拟,于是我就思考用软模拟实现,最后在一个师兄的指点下,确实用软件模拟一个中间比较寄存器能实现,思路大概是这样子的,首先让比较寄存器装满,也就是最大值(65535),然后通过改变模拟比较寄存器的值,每次匹配中断只需把模拟比较寄存器的值去比较就行,具体方案看程序。

unsigned charCnt[4]; //一个数组,这个数组的每个元素对应一个通道,用来判断装PWM得高电平还是低电平数

unsigned intT[4];//周期数组

unsigned intR[4];//模拟的比较寄存器数组,一样的每个通道对应一个数组元素

unsigned intRh[4];//模拟的PWM高电平比较寄存器

unsigned intRl[4]; //模拟的PWM低电平比较寄存器

unsigned char F[4];//占空比数组

unsigned int CCR1,CCR2,CCR3,CCR4;

void Init(void)

{

unsigned char i = 0;

for(i = 0; i 《 4; i++)

{

Cnt[i]= 0;

T[i]= 0;

R[i]= 0;

Rh[i] = 0;

Rl[i] = 0;

F[i]= 0;

}

//t的范围为(0~65536)

T[0] = 450;//F=40K

T[1] = 600;//F=30K

T[2] = 900;//F=20K

T[3] = 1800;//F=10K

//F(占空比)的范围为(0~100)

F[0] = 40;

F[1] = 30;

F[2] = 20;

F[3] = 10;

for(i = 0; i 《 4; i++)

{

Rh[i] = (T[i] * F[i]) / 100;

Rl[i] = T[i] - Rh[i];

}

R[0] = Rl[0];

R[1] = Rl[1];

R[2] = Rl[2];

R[3] = Rl[3];

CCR1 = R[0];

CCR2 = R[1];

CCR3 = R[2];

CCR4 = R[3];

}

对应的数组初始化

void RCC_Configuration(void)

{

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD,ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);

}

时钟配置

void GPIO_Configuration(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

//Key1 PA0 Key3 PA8

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_8;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;

GPIO_Init(GPIOA,&GPIO_InitStructure);

//Key2 PC13

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;

GPIO_Init(GPIOC,&GPIO_InitStructure);

//Key PD3

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;

GPIO_Init(GPIOD,&GPIO_InitStructure);

//TIM3 CH1 CH2

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;

GPIO_Init(GPIOA,&GPIO_InitStructure);

//TIM3 CH3 CH4

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;

GPIO_Init(GPIOB,&GPIO_InitStructure);

}

管脚配置

void NVIC_Configuration(void)

{

NVIC_InitTypeDef NVIC_InitStructure;

#ifdef VECT_TAB_RAM

NVIC_SetVectorTable(NVIC_VectTab_RAM,0x0);

#else

NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);

#endif

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQChannel;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;

NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;

NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;

NVIC_Init(&NVIC_InitStructure);

}

中断配置

void TIM_Configuration(void)

{

TIM_TimeBaseInitTypeDef TIM_BaseInitStructure;

TIM_OCInitTypeDef TIM_OCInitStructure;

TIM_InternalClockConfig(TIM3);

TIM_BaseInitStructure.TIM_Prescaler=3;//4分频,18M

TIM_BaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;

TIM_BaseInitStructure.TIM_Period=65535;

TIM_BaseInitStructure.TIM_ClockDivision=0;

TIM_BaseInitStructure.TIM_RepetitionCounter=0;

TIM_TimeBaseInit(TIM3,&TIM_BaseInitStructure);

TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_Toggle;

TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;

TIM_OCInitStructure.TIM_Pulse=CCR1;

TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;

TIM_OC1Init(TIM3,&TIM_OCInitStructure);

TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Disable);

TIM_ClearITPendingBit(TIM3,TIM_IT_CC1);

TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_Toggle;

TIM_OCInitStructure.TIM_Pulse=CCR2;

TIM_OC2Init(TIM3,&TIM_OCInitStructure);

TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Disable);

TIM_ClearITPendingBit(TIM3,TIM_IT_CC2);

TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_Toggle;

TIM_OCInitStructure.TIM_Pulse=CCR3;

TIM_OC3Init(TIM3,&TIM_OCInitStructure);

TIM_OC3PreloadConfig(TIM3,TIM_OCPreload_Disable);

TIM_ClearITPendingBit(TIM3,TIM_IT_CC3);

TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_Toggle;

TIM_OCInitStructure.TIM_Pulse=CCR4;

TIM_OC4Init(TIM3,&TIM_OCInitStructure);

TIM_OC4PreloadConfig(TIM3,TIM_OCPreload_Disable);

TIM_ClearITPendingBit(TIM3,TIM_IT_CC4);

TIM_Cmd(TIM3,ENABLE);

TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);

TIM_ITConfig(TIM3,TIM_IT_CC1|TIM_IT_CC2|TIM_IT_CC3|TIM_IT_CC4,ENABLE);

}

void TIM3_IRQHandler(void)

{

if(TIM_GetITStatus(TIM3,TIM_IT_CC1)!=RESET)

{

TIM_ClearITPendingBit(TIM3,TIM_IT_CC1);

Cnt[0]=(~Cnt[0])&0x01;

if(Cnt[0]==0x01)

R[0]+=Rl[0];

else

R[0] += Rh[0];

if(R[0]》65535)

R[0]=R[0]-65535;

CCR1=R[0];

TIM_SetCompare1(TIM3,CCR1);

}

if(TIM_GetITStatus(TIM3,TIM_IT_CC2)!=RESET)

{

TIM_ClearITPendingBit(TIM3,TIM_IT_CC2);

Cnt[1]=(~Cnt[1])&0x01;

if(Cnt[1]==0x01)

R[1]+=Rl[1];

else

R[1] += Rh[1];

if(R[1]》65535)

R[1]=R[1]-65535;

CCR2=R[1];

TIM_SetCompare2(TIM3,CCR2);

}

if(TIM_GetITStatus(TIM3,TIM_IT_CC3)!=RESET)

{

TIM_ClearITPendingBit(TIM3,TIM_IT_CC3);

Cnt[2]=(~Cnt[2])&0x01;

if(Cnt[2]==0x01)

R[2]+=Rl[2];

else

R[2] += Rh[2];

if(R[2]》65535)

R[2]=R[2]-65535;

CCR3=R[2];

TIM_SetCompare3(TIM3,CCR3);

}

if(TIM_GetITStatus(TIM3,TIM_IT_CC4)!=RESET)

{

TIM_ClearITPendingBit(TIM3,TIM_IT_CC4);

Cnt[3] = (~Cnt[3])&0x01;

if(Cnt[3]==0x01)

R[3]+=Rl[3];

else

R[3] += Rh[3];

if(R[3]》65535)

R[3]=R[3]-65535;

CCR4=R[3];

TIM_SetCompare4(TIM3,CCR4);

}

}

中断函数

其余就是按键扫描函数,通过改变周期数组中的值和占空比寄存器中的值就能改变PWM波的频率和占空比,当然按键可以设置为4个(一个按键对应一个通道),如果IO够用也可以设置8个,没两个按键对应一个通道分别改变频率和占空比。

技术专区

关注电子发烧友微信

有趣有料的资讯及技术干货

下载发烧友APP

打造属于您的人脉电子圈

关注发烧友课堂

锁定最新课程活动及技术直播
收藏 人收藏
分享:

评论

相关推荐

STM32L496AGI6及P-L496G-CE...

ST公司的STM32L496AGI6是基于高性能Arm® Cortex®-M4 32-位RISC核的...

发表于 2018-04-12 05:07 9次阅读
STM32L496AGI6及P-L496G-CE...

各位大佬,请问mosfet驱动器能达到的开关频率由什么参数决定?

发表于 2018-04-11 23:31 57次阅读
各位大佬,请问mosfet驱动器能达到的开关频率由什么参数决定?

成熟的设计还在用三极管是原因!

这周检查水泵变频器的电路,定稿用,发现数码管的控制三极管,基极竟然没有串联电阻,这会导致单片机的IO...

发表于 2018-04-11 17:21 339次阅读
成熟的设计还在用三极管是原因!

定时/计数器PWM设计要点及应用设计参考

定时 / 计数器 PWM设计要点 根据 PWM ((脉宽调制(PWM:(Pulse Width Mo...

发表于 2018-04-11 13:21 22次阅读
定时/计数器PWM设计要点及应用设计参考

请问28335怎么生成一个复杂的pwm波?

发表于 2018-04-10 22:43 88次阅读
请问28335怎么生成一个复杂的pwm波?

深度解读STM32数据保存与毁灭

单通道选择:有16个多路通道。可以把转换分成两组:规则的和注入的。在任意多个通道上以任意顺序进行的一...

发表于 2018-04-10 09:15 27次阅读
深度解读STM32数据保存与毁灭

求教各位大佬:MOSFET半桥驱动空载为什么HO和LO都没有输出波形?

发表于 2018-04-09 23:54 248次阅读
求教各位大佬:MOSFET半桥驱动空载为什么HO和LO都没有输出波形?

arm的PWM模块脉宽调制及超声波系统设计

近年来以微电子学和计算机技术为基础的信息技术飞速发展,超声无损检测仪器也得到了前所未有的发展动力,为...

发表于 2018-04-09 08:12 29次阅读
arm的PWM模块脉宽调制及超声波系统设计

需要做一套水质监测系统,想请问一下各位大神有研究得能提供一下方案不

发表于 2018-04-08 17:03 162次阅读
需要做一套水质监测系统,想请问一下各位大神有研究得能提供一下方案不

STM32Note初识单片机

本连载将以STM32F103为例为学习嵌入式系统开发搭建一个基础知识框架。 初识单片机系列将会介绍单...

发表于 2018-04-08 10:00 34次阅读
STM32Note初识单片机

基于STM32芯片的一款智能台灯

随着现代科学技术的不断发展,生活用品的智能化程度也越来越普及,人们对一些家居物品的人性化、智能化设计...

发表于 2018-04-08 08:48 625次阅读
基于STM32芯片的一款智能台灯

STM32 GPIO工作原理及LED电路原理

STM32F103ZET6:共144个引脚,7组IO口,每组16个IO口7*16=112个IO口(这...

发表于 2018-04-07 11:50 208次阅读
 STM32 GPIO工作原理及LED电路原理

SKJ-II型数字随动系统中PWM功率变换控制系...

实现PWM控制器的电路如图2所示。预建立PWM装置的模型,先确定其输入信号,输入信号为UX11(X1...

发表于 2018-04-07 10:19 50次阅读
SKJ-II型数字随动系统中PWM功率变换控制系...

基于STM32的家庭服务机器人系统工作原理及设计

为解决当前大部分家庭服务机器人不具备行走功能或只具有简单的避障能力等问题,本文设计一种基于STM32...

发表于 2018-04-06 08:26 473次阅读
基于STM32的家庭服务机器人系统工作原理及设计

基于STM32的伺服压力机控制系统设计

伺服压力机的基本结构及对控制系统的要求与传统压力机比较,伺服压力机取消了原有压力机的飞轮和离合器,保...

发表于 2018-04-06 08:07 354次阅读
基于STM32的伺服压力机控制系统设计

STM32的串口中断配置

STM32的串口中断配置,也是很简单的. 首先是配置UART的GPIO口 首先是配置UART的GPI...

发表于 2018-04-06 07:24 261次阅读
STM32的串口中断配置

基于STM32单片机的DLP1700显示电路、光...

传统的数字微镜显示技术的信号输入端是由DVI接口提供图像信号和行场同步信号,由MSP430单片机对D...

发表于 2018-04-06 02:58 267次阅读
基于STM32单片机的DLP1700显示电路、光...

这样做为什么会导致占空比改变?

发表于 2018-04-05 17:28 128次阅读
这样做为什么会导致占空比改变?

这样做为什么会导致占空比改变?

发表于 2018-04-05 17:28 128次阅读
这样做为什么会导致占空比改变?

Keil MDK3.20的stm32调试方法

要点: (1)程序的下载地址改到RAM空间中 (2)程序的debug之前要设定SP,PC指针到R...

发表于 2018-04-04 11:49 87次阅读
Keil MDK3.20的stm32调试方法

基于STM32的数字PDA系统软件系统设计

数字PDA系统整体由硬件电路和软件系统2部分组成,硬件电路由低功耗ARM微控制器STM32ZET6控...

发表于 2018-04-04 11:25 99次阅读
基于STM32的数字PDA系统软件系统设计

stm32 LCD12864 串口无显示

发表于 2018-04-03 23:41 331次阅读
stm32   LCD12864 串口无显示

最近在用RX62T家族的开发板,pwm不知道怎么修改了,这手册没太看明白需要求助

发表于 2018-04-03 19:39 358次阅读
最近在用RX62T家族的开发板,pwm不知道怎么修改了,这手册没太看明白需要求助

CoolSETTM家族:全新固定频率PWM控制器...

电源制造商需要使用能够提供最佳性能、效率、稳健性且便于设计的器件。为此,英飞凌科技股份公司(FSE:...

发表于 2018-04-03 17:01 2571次阅读
CoolSETTM家族:全新固定频率PWM控制器...

请问像4054那样的充电ic,如何用单片机读取chrg端口充电状态

发表于 2018-04-03 15:57 218次阅读
请问像4054那样的充电ic,如何用单片机读取chrg端口充电状态

Alexa语音服务软件扩展STM32Cube

X-CUBE-AVS扩展套件包含一组用于STM32F7系列微控制器的库和应用示例,充当支持Alexa...

发表于 2018-04-03 13:41 1665次阅读
Alexa语音服务软件扩展STM32Cube

STM32进入和退出睡眠模式

要求系统按如下方式进入和退出睡眠模式:在系统启动2秒后,将RTC在3秒钟之后配置为产生一个报警事件,...

发表于 2018-04-03 11:43 81次阅读
STM32进入和退出睡眠模式

STM32开放式开发环境手册

发表于 2018-04-03 10:50 193次阅读
STM32开放式开发环境手册

STM32单片机--PWM输出

采用定时器2的通道2,使PA1输出频率1K,占空比40的PWM波形,用PA8随意延时取反led灯,指...

发表于 2018-04-03 08:54 183次阅读
STM32单片机--PWM输出

单片机STM32时钟图文理解

如输出到称为HCLK、FCLK的时钟,还直接输出到SDIO外设的SDIOCLK时钟、存储器控制器FS...

发表于 2018-04-03 08:45 270次阅读
单片机STM32时钟图文理解

固定频率电流模式PWM控制器

NCP1247USBPDGEVB评估板是一款专为USB PD(电源输送)应用而设计的反激式拓扑开关模...

发表于 2018-04-02 16:56 743次阅读
固定频率电流模式PWM控制器

RT-Thread Nano 3.0.3 的基本...

RT-Thread是一个高度可配置的嵌入式实时操作系统,配置文件是rtconfig.h。Nano就是...

发表于 2018-04-02 15:58 174次阅读
RT-Thread Nano 3.0.3 的基本...

智能集成BLDC电机驱动器如何进行EMI管理

本文将在汽车应用的BLDC系统中详细阐述EMI管理。BLDC电机在10-100kHz范围内的高开关频...

发表于 2018-04-02 00:08 793次阅读
智能集成BLDC电机驱动器如何进行EMI管理

STM32三种BOOT模式介绍

内置SRAM,既然是SRAM,自然也就没有程序存储的能力了,这个模式一般用于程序调试。假如我只修改了...

发表于 2018-03-30 16:09 420次阅读
STM32三种BOOT模式介绍

STM32_IAP详解(有代码,有上位机)

 和app中分别放置两套中断向量表,当iap代码中将app烧写到flash中之后,跳转到app的中断...

发表于 2018-03-30 15:58 185次阅读
STM32_IAP详解(有代码,有上位机)

uc3844中文资料汇总(uc3844引脚图及功...

本文主要介绍了uc3844中文资料汇总(uc3844引脚图及功能_工作原理及应用电路。UC3844是...

发表于 2018-03-30 15:42 284次阅读
uc3844中文资料汇总(uc3844引脚图及功...

PWM芯片uc3842应用电路图汇总(开关电源电...

本文主要介绍了PWM芯片uc3842应用电路图汇总(开关电源电路/充电器电路/PWM控制器)。UC3...

发表于 2018-03-30 14:16 422次阅读
PWM芯片uc3842应用电路图汇总(开关电源电...

uc3842中文资料汇总(uc3842引脚图及功...

本文主要介绍了uc3842中文资料汇总(uc3842引脚图及功能_工作原理及典型应用电路)。UC38...

发表于 2018-03-30 13:55 305次阅读
uc3842中文资料汇总(uc3842引脚图及功...

STM32内存管理以及STM32中的堆栈

这个是MDK编译之后能够得到的每个段的大小,也就能得到占用相应的FLASH和RAM的大小,但是还有两...

发表于 2018-03-29 13:45 384次阅读
STM32内存管理以及STM32中的堆栈

pwm呼吸灯原理及程序分享

本文主要介绍了pwm呼吸灯原理及程序分享。PWM(脉冲宽度调制)对模拟信号电平进行数字编码的方法,计...

发表于 2018-03-28 17:41 618次阅读
pwm呼吸灯原理及程序分享

基于stm32的PWM输出呼吸灯(包括stm32...

本文主要介绍了基于stm32的pwm呼吸灯设计与实现。使用定时器来控制I/O口输出PWM波形,从而驱...

发表于 2018-03-28 16:23 389次阅读
基于stm32的PWM输出呼吸灯(包括stm32...

STM32学习—如何选择各个电路部分的主要芯片

最小系统:考虑到小车的主控板可以作为今后做四轴或其他更高级的机器人的基础电路,所以主控选择了STM3...

发表于 2018-03-27 09:59 459次阅读
STM32学习—如何选择各个电路部分的主要芯片

STM32片内FLASH被异常改写的问题分享

到此问题毫无进展,只好求助ST芯片设计人员做进一步确认,看看芯片是否真的坏了。同时,又请客户的硬件工...

发表于 2018-03-26 11:24 358次阅读
STM32片内FLASH被异常改写的问题分享

STM32的存储器映射详解

存储器映射是指把芯片中或芯片外的FLASH,RAM,外设,BOOT,BLOCK等进行统一编址。

发表于 2018-03-23 15:24 367次阅读
STM32的存储器映射详解

IAR在STM32的配置方法

FWLib-用来存放所需固件库的头文件;2).StartUp-用来存放STM32的启动代码,添加co...

发表于 2018-03-20 15:52 383次阅读
IAR在STM32的配置方法

PWM蜂鸣器驱动之FPGA在线下载配置图解

如图7.20所示,在弹出的Hardware Setup页面里,选择当前硬件为USB Blaster,...

发表于 2018-03-18 10:15 591次阅读
PWM蜂鸣器驱动之FPGA在线下载配置图解

PWM变模拟信号(积分电路)

积分电路的作用积分电路与微分电路在功能方面表现也是相反的:能够提取输入信号的平均值大小,即低频成份。...

发表于 2018-03-18 09:28 562次阅读
PWM变模拟信号(积分电路)

(纯干货)使用STM32测量频率和占空比的几种方...

本文详细介绍了使用STM32测量频率和占空比的几种方法。

发表于 2018-03-13 15:43 875次阅读
(纯干货)使用STM32测量频率和占空比的几种方...

用STM32测量频率和占空比的几种方法

在内存复制过程中,面对大数据量的转移时利用DMA。所以,我们使用输入捕获事件触发DMA来搬运寄存器而...

发表于 2018-03-13 10:02 1581次阅读
用STM32测量频率和占空比的几种方法

stm32使用中出现的警告

发表于 2018-03-09 09:45 76次阅读
stm32使用中出现的警告

基于STM32的三轴数字罗盘HMC5883L模块...

最近买了个数字罗盘模块,调通后发现很不错,非常灵敏,测试的时候精度在1°以内。连续测量模式下,最快测...

发表于 2018-03-08 08:40 280次阅读
基于STM32的三轴数字罗盘HMC5883L模块...

意法半导体的新STM32让物联网设备快速连接云服...

意法半导体的新STM32探索套件简化移动网至云端连接,并提供免费试用的第三方服务,让物联网设备能够通...

发表于 2018-03-02 16:44 374次阅读
意法半导体的新STM32让物联网设备快速连接云服...

一文了解stm32使用DMA模块的相关操作

CPU最重要的工作室进行数据运算,从加减乘除到一些高级的运算,包括浮点、积分、微分、FFT等。CPU...

发表于 2018-02-27 11:18 3374次阅读
一文了解stm32使用DMA模块的相关操作

一种简易PWM温控风扇电路设计

本文主要介绍了一种简易PWM温控风扇电路设计,为了有效的解决散热问题,尽量减少散热风扇的不必要的运转...

发表于 2018-02-27 08:47 456次阅读
一种简易PWM温控风扇电路设计

关于STM32的 一个TIM1 的PWM程序和P...

高级定时器与通用定时器比较类似,下面是一个TIM1 的PWM 程序,TIM1是STM32唯一的高级定...

发表于 2018-02-24 14:39 568次阅读
关于STM32的 一个TIM1 的PWM程序和P...

PWM脉宽调制:基础和一些高级概念

脉宽调制(PWM)是电子学许多领域广为采用的一个基本概念。它是一种简单的平均方法,用于从微波炉功率百...

发表于 2018-02-24 14:26 339次阅读
PWM脉宽调制:基础和一些高级概念

dsp28335例程pwm讲解

PWM信号频率由时基周期寄存器TBPDR和时基计数器的计数模式决定。初始化程序采用的计数模式为递增计...

发表于 2018-02-23 08:43 456次阅读
dsp28335例程pwm讲解

机器人设计中利用51单片机输出PWM波的方法

PWM这个功能在飞思卡尔、STM32等高档的单片机内部有专用的模块,用此类芯片实现PWM功能时只需要...

发表于 2018-02-11 11:29 397次阅读
机器人设计中利用51单片机输出PWM波的方法

ATMage16的16位定时器的PWM应用

本文详细介绍了ATMage16的16位定时器的PWM应用。

发表于 2018-02-11 11:22 269次阅读
ATMage16的16位定时器的PWM应用

飞思卡尔M9S12XS128单片机初学之PWM调...

本文着重应用实践,理论性的东西少谈为妙,因为理论的东西资料上都有。想借此平台记录下调试心得以免日后遗...

发表于 2018-02-11 11:20 170次阅读
飞思卡尔M9S12XS128单片机初学之PWM调...

STC12C5201AD单片机的PWM功能的应用...

52xxAD系列单片机的内部集成了两路可编程计数阵列模块(PCA),可用于软件定时器、外部脉冲的捕捉...

发表于 2018-02-11 11:14 259次阅读
STC12C5201AD单片机的PWM功能的应用...

STM32基础PWM输出

目的:基础PWM输出,以及中断配合应用。输出选用PB1,配置为TIM3_CH4,是目标板的LED6控...

发表于 2018-02-10 16:47 201次阅读
STM32基础PWM输出

STM32的GPIO输入编程实例之读取按键状态

按键的一端与STM32的GPIO(PH15)相连,另外一端接地,且PH15外接一个1K电流大小的上拉...

发表于 2018-02-10 11:08 1006次阅读
STM32的GPIO输入编程实例之读取按键状态

stm32寄存器版矩阵键盘库函数(附详细注释)

新系列采用LQFP64、LQFP100和LFBGA100三种封装,不同的封装保持引脚排列一致性,结合...

发表于 2018-02-09 11:48 193次阅读
stm32寄存器版矩阵键盘库函数(附详细注释)

stm32矩阵键盘原理图及程序介绍

STM32F0 系列产品基于超低功耗的 ARM Cortex-M0 处理器内核,整合增强的技术和功能...

发表于 2018-02-09 11:30 1206次阅读
stm32矩阵键盘原理图及程序介绍

STM8单片机PWM应用

PD3复用功能是TIM2_CC2,正好可以用来测试PWM功能。本例程通过电位器调整PWM脉宽来调整接...

发表于 2018-02-08 20:18 173次阅读
STM8单片机PWM应用

PWM控制LED灯的亮度程序(C 语言)

控制LED灯的亮度,通过调节电压的方式可以达到,但不理想,而且可调的范围很小,电压稍高,还容易把LE...

发表于 2018-02-07 16:45 381次阅读
PWM控制LED灯的亮度程序(C 语言)

STM32的GPIO输出编程实例之点亮三色LED

本实验通过STM32的三个GPIO口驱动三色LED的三个通道,将GPIO设置为推挽输出模式,采用灌电...

发表于 2018-02-07 11:14 2087次阅读
STM32的GPIO输出编程实例之点亮三色LED

直流电机的PWM速度控制程序

* =======直流电机的PWM速度控制程序======== */ /*晶振采用11.0592M,...

发表于 2018-02-07 08:44 256次阅读
直流电机的PWM速度控制程序

开路电压超过200V直流 PWM控制方法

所有用PWM都是最简单的方式,因为这个是48V 96V使用。太阳能电池板的开路电压,可能超过200V...

发表于 2018-02-07 08:40 243次阅读
开路电压超过200V直流 PWM控制方法

简单脉冲控制(PWM)直流电机调速电路方案

  555芯片组成一频率为1KHZ的多谐振荡器,脉冲宽度主要通过电阻R1,R2,R3,D1及C2控制...

发表于 2018-02-05 11:47 731次阅读
简单脉冲控制(PWM)直流电机调速电路方案

基于PWM技术的太阳能控制器的制作

太阳能发电系统是利用太阳能电池板(PV板)吸收太阳的光能转化为电能,充电给蓄电池储能,再输出直流低压...

发表于 2018-02-05 11:43 292次阅读
基于PWM技术的太阳能控制器的制作

串口通信协议stm32

串口通信指串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用...

发表于 2018-02-01 16:22 330次阅读
串口通信协议stm32

基于STM32实现孤立词语音识别系统

语音识别是机器通过识别和理解过程把人类的语音信号转变为相应文本或命令的技术,其根本目的是研究出一种具...

发表于 2018-01-31 19:23 483次阅读
基于STM32实现孤立词语音识别系统

sg3525怎么确定频率_sg3525频率计算

本文主要介绍了sg3525怎么确定频率。并分析了SG3525内部结构、SG3525引脚图及其功能,S...

发表于 2018-01-31 14:27 890次阅读
sg3525怎么确定频率_sg3525频率计算

sg3525怎样调脉宽_sg3525怎么调节占空...

本文主要介绍了sg3525怎样调脉宽_sg3525怎么调节占空比。SG3525脉宽调制控制器,不仅具...

发表于 2018-01-31 14:07 1209次阅读
sg3525怎样调脉宽_sg3525怎么调节占空...

一款基于stm32的毕业设计方案

设计选用STM32单片机作控制器,设计温度单反馈的控制系统,对电加热水器内水的温度进行控制。通过PT...

发表于 2018-01-29 14:22 1110次阅读
一款基于stm32的毕业设计方案

基于stm32的电子秤方案大全(二款stm32的...

 电子秤(英文名:electronic balance)是衡器的一种,是利用胡克定律或力的杠杆平衡原...

发表于 2018-01-29 12:05 790次阅读
基于stm32的电子秤方案大全(二款stm32的...

基于stm32的8m晶振不起振的原因解析

晶振不起振原因分析: (1) PCB板布线错误; (2) 单片机质量有问题; (3...

发表于 2018-01-26 15:41 1820次阅读
基于stm32的8m晶振不起振的原因解析

稳压电源PWM芯片UC3846的应用设计方案

本文主要介绍了一种稳压电源PWM芯片UC3846的应用设计方案,开关电源的控制电路可以分为电压控制型...

发表于 2018-01-26 10:42 498次阅读
稳压电源PWM芯片UC3846的应用设计方案

提供多主机功能,STM32的I2C通信简析

在传输数据的时候,SDA线必须在时钟的高电平周期保持稳定,SDA的高或低电平状态只有在SCL 线的时...

发表于 2018-01-26 09:37 3286次阅读
提供多主机功能,STM32的I2C通信简析

基于STM32的高性能低功耗的中文人机界面系统

本文选用了意法半导体公司基于ARM最新Cortex—M3内核的STM32F103RB作为主控芯片,通...

发表于 2018-01-25 22:53 396次阅读
基于STM32的高性能低功耗的中文人机界面系统

四款555脉冲宽度调制电路详细介绍

本文主要介绍了四款555脉冲宽度调制电路。脉冲宽度调制(PWM)是一种对模拟信号电平进行数字编码的方...

发表于 2018-01-25 16:13 1043次阅读
四款555脉冲宽度调制电路详细介绍

pwm输出波形的特点

控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦...

发表于 2018-01-25 15:38 181次阅读
pwm输出波形的特点

pwm调制原理同步调制_几种pwm调制方式介绍

本文介绍了脉宽调制分类与优点,介绍了PWM脉宽调制原理,对PWM同步调制进行了介绍,介绍来了PWM具...

发表于 2018-01-25 15:32 337次阅读
pwm调制原理同步调制_几种pwm调制方式介绍

单相全桥pwm整流电路及工作原理

本文介绍了什么是整流电路以及整流电路作用原理及分类。其次介绍了pwm整流电路与单相全桥PWM整流电路...

发表于 2018-01-25 11:44 939次阅读
单相全桥pwm整流电路及工作原理

每一个GPIO如何配置成一个外部中断触发源

1STM32中断分组STM32 的每一个GPIO都能配置成一个外部中断触发源,这点也是 STM32 ...

发表于 2018-01-25 08:44 2110次阅读
每一个GPIO如何配置成一个外部中断触发源

基于STM32F103的水动力测控系统设计的解决...

测控系统是水动力实验中的重要测试设备。在实验中有压力、拉力、加速度等物理量通过传感器转换成电压值,需...

发表于 2018-01-25 05:40 308次阅读
基于STM32F103的水动力测控系统设计的解决...

介绍如何通过意法的STM32 MCU实现用DMA...

在嵌入式产品中有时候需要实现对外部的模拟量进行采样处理和记录,而这就需要使用到ADC功能,将外部的模...

发表于 2018-01-24 15:41 1548次阅读
介绍如何通过意法的STM32 MCU实现用DMA...

高集成度编程工具软件STM32代码烧录编程实战

如今ST推出了新的高集成度编程工具软件STM32CubeProgrammer,以后就不用这么麻烦了,...

发表于 2018-01-23 09:22 2058次阅读
高集成度编程工具软件STM32代码烧录编程实战

STM32F407总线存储框架及应用设计

在使用过程中发现DMA1无法把GPIO的IDR数据传输到内存,调试过程中出现DMA1的数据流传输错误...

发表于 2018-01-22 09:22 2452次阅读
STM32F407总线存储框架及应用设计

使用STM32快速开发AliOS Things硬...

AliOS Things 是 AliOS 家族旗下的、面向 IoT 领域的、轻量级物联网嵌入式操作系...

发表于 2018-01-22 09:17 2442次阅读
使用STM32快速开发AliOS Things硬...

实现半桥DC/DC变换器软开关的PWM控制解决方...

经常被用于中小功率电路设计的DC-DC转换器一直是工程师们在进行电源设计时候的首选。半桥电路由两个功...

发表于 2018-01-22 09:07 1670次阅读
实现半桥DC/DC变换器软开关的PWM控制解决方...

新步降型转换电路的PWM控制器合理选择方案

随着前沿的DSP、FPGA和CPU工作在越来越低的供电电压、并消耗更大的电流,选择PWM控制器变得并...

发表于 2018-01-22 07:32 186次阅读
新步降型转换电路的PWM控制器合理选择方案

对开关电源发展概述、关键技术、未来趋势的解析

随着技术的进步,特别是功率器件的更新换代,功率变换技术的不断改进,新型电磁材料的不断使用,控制方法的...

发表于 2018-01-21 11:50 984次阅读
对开关电源发展概述、关键技术、未来趋势的解析

STM32调试SP3485技术总结

本文主要对STM32调试SP3485技术总结。使用的STM32芯片是STM32F103RB,使用的资...

发表于 2018-01-17 15:56 340次阅读
STM32调试SP3485技术总结

STM32的调试方式、更新程序、仿真以及补救措施

STM32支持JTAG和SWD两种调试方式,且默认状态下这两种调试功能都是开启的。

发表于 2018-01-17 14:55 1228次阅读
STM32的调试方式、更新程序、仿真以及补救措施

用stm32控制4位数码管_stm32控制共阴数...

本文主要介绍了stm32控制4位共阳数码管输出计数程序设计和stm32控制共阴数码管程序设计。首先我...

发表于 2018-01-16 17:07 859次阅读
用stm32控制4位数码管_stm32控制共阴数...

对STM32基本知识的详细剖析

STM32是一种功能比较强大的32位单片机,广泛应用于各种嵌入式设备中,由于它的普及性及丰富的资源,...

发表于 2018-01-16 14:29 1251次阅读
对STM32基本知识的详细剖析

max7219驱动数码管程序(51单片机+STM...

本文主要介绍了max7219驱动数码管:STM32硬件SPImax7219驱动8位数码管显示模块程序...

发表于 2018-01-15 16:51 616次阅读
max7219驱动数码管程序(51单片机+STM...