每一个555定时器输出电压都可以输出多路PWM,这几路PWM信号肯定一样的吗

用什么方法能够实时采集8路PWM信号的占空比_EEWorld电子工程世界搜索中心
搜索范围:
一周以内&&&&
搜索到约7项结果
系统的重要部分。在飞思卡尔智能车大赛中,电机涉及到的方面包括驱动电路,电机调速电路,转速测量电路等。
电机驱动电路。
图1是一个典型实用的简单直流电机调速驱动电路,功率管的选择由电机的功率决定,由于电机启动的时候存在较大的浪涌电流,其标称电流取电机正常工作时电流的3~5倍。PWM信号的占空比决定电机的转速,故电机的调速可通过改变PWM信号的占空比实现。
PWM(脉宽调制)调速...
.cn/thread--1.html 发布时间:
串口问题,串口程序在FPGA内部能正确接收到数据的每一个包,在实际环境中就是由偶尔出错的问题。关于夏老师提出的增加RAM,缓冲,还有握手信号都我试过,还是不能解决问题。
只要在器件的技术指标范围内,具体问题一定能够得到解决。如果数据量十分大,又有异步时钟,偶然的个别位的错误不可能避免,只能通过检错或自动纠错编码解决。
原帖由 eeleader 于
.cn/thread--1.html 发布时间:
ABS控制器,MCU已经选择好,系统图也画完了。最近才发现控制高速电磁阀没有考虑PWM输出控制。定时器也用完了,软件输出PWM行不通。怎么办?我想在微控制器添加硬件加PWM芯片调制,不知是否有芯片输出独立8路的PWM信号?PWM芯片后再接电磁阀驱动芯片MC33289驱动开关阀可以实现吗? 答:ABS一种是简单地模拟人们的点刹,这不需要PWM控制,因为所有轮胎都按同样的节拍点刹;还有一种就是根据不同的...
.cn/thread-.html 发布时间:
!只要是单片机方面的就好!最好是有英文摘要的,没有也没关系!再次感谢楼主!
我的邮箱是:
我选用的单片机是增强型的C51系列80C552单片机,想利用它自带的PWM产生方波信号脉冲,应该涉及到哪些电路,最好能有连接图!方波信号的频率为20~90HZ左右. 我的邮箱: 利用单片机的PWM产生方波信号! 你好,麻烦你 也我传...
.cn/thread-.html 发布时间:
移动类的机器人项目应当很有帮助,拿最常见的轨迹项目来说,如果能在调试时不断返回小车的速度、控制状态、采集的信号,我想调试者也不用一次次盲目地改变参数。在走线失败的情况下,也不至于靠猜测的原因来修改程序了。
6.2.2 调试步骤调试测速脉冲输入 —— 确定采样器的位置和对应电路中的参数,以使输入MCU的脉冲信号尽量为50%占空比;调试几个特定PWM值下的PWM频率 —— 确定针对所用电机的最佳...
.cn/thread-.html 发布时间:
用什么方法能够实时采集8路PWM信号的占空比
现有8路PWM信号,信号不同步,且占空比都很小周期一样都为50HZ,最小脉宽为0.5ms,最大为2.5ms,想通过一种方法实时得到这8路信号的脉冲宽度
用什么方法能够实时采集8路PWM信号的占空比 不知道能更改INT触发方式的单片机,不停切换响应方式,不知道这样能测出来不?
不知道对精度有什么要求,如果要求不高,可不可以这样测:?
.cn/thread--1.html 发布时间:
用什么方法能够实时采集8路PWM信号的占空比
现有8路PWM信号,信号不同步,且占空比都很小周期一样都为50HZ,最小脉宽为0.5ms,最大为2.5ms,想通过一种方法实时得到这8路信号的脉冲宽度
用什么方法能够实时采集8路PWM信号的占空比 没想过,不过我感觉至少应该引出一条sub clock。不然怎么能算出宽度。-_-||
能再说的详细一些么
不知道对精度有什么要求,如果...
.cn/thread--1.html 发布时间:
相关结果约7个21ic官方微信-->
后使用快捷导航没有帐号?
请完成以下验证码
查看: 1148|回复: 9
同一个定时器可以在不同的通道输出不同频率的PWM吗
&&未结帖(5)
主题帖子积分
高级技术员, 积分 902, 距离下一级还需 98 积分
高级技术员, 积分 902, 距离下一级还需 98 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
高级技术员, 积分 902, 距离下一级还需 98 积分
高级技术员, 积分 902, 距离下一级还需 98 积分
同一个定时器可以在不同的通道输出不同频率的PWM吗,应该怎么设置呢
主题帖子积分
中级技术员, 积分 135, 距离下一级还需 165 积分
中级技术员, 积分 135, 距离下一级还需 165 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
中级技术员, 积分 135, 距离下一级还需 165 积分
中级技术员, 积分 135, 距离下一级还需 165 积分
是可以的,给你个代码看看
#include &stm32f10x.h&
TIM_TimeBaseInitTypeDef TIM_TimeBaseS
TIM_OCInitTypeDef TIM_OCInitS
uint16_t CCR1_Val = 250;
uint16_t CCR2_Val = 500;
uint16_t CCR3_Val = 750;
uint16_t CCR4_Val = 0;
uint16_t PrescalerValue = 0;
voidRCC_Configuration(void);& && && && && & //时钟配置
voidGPIO_Configuration(void);& && && && &//管脚配置
void Delay (__IO uint32_tnCount);& && && &//延时函数
int main(void)
{
RCC_Configuration();
GPIO_Configuration();
PrescalerValue = (uint16_t) (SystemCoreClock /) - 1;
TIM_TimeBaseStructure.TIM_Period =1000;& && && && && && && && && && && &//周期
TIM_TimeBaseStructure.TIM_Prescaler =PrescalerV& && && && & //分频
TIM_TimeBaseStructure.TIM_ClockDivision =0;& && && && && && && && && & //时钟分割
TIM_TimeBaseStructure.TIM_CounterMode =TIM_CounterMode_Up;
& && && && && &//计数模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);& && && && && && &//初始TIM3
/*************************** 通道1 ********************************/
TIM_OCInitStructure.TIM_OCMode =TIM_OCMode_PWM2;& & //PWM2
TIM_OCInitStructure.TIM_OutputState =TIM_OutputState_E& &//PWM功能使能
TIM_OCInitStructure.TIM_Pulse =CCR1_V& && && && && && && && && &//写比较值(占空比
TIM_OCInitStructure.TIM_OCPolarity =TIM_OCPolarity_L& &//置高
TIM_OC1Init(TIM3, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
/****************************** 通道2 ******************************/
/* PWM1 Mode configuration: Channel2 */
TIM_OCInitStructure.TIM_OutputState =TIM_OutputState_E
TIM_OCInitStructure.TIM_Pulse = CCR2_V
TIM_OCInitStructure.TIM_OCPolarity =TIM_OCPolarity_H
TIM_OC2Init(TIM3, &TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
/******************************* 通道3 *********************************/
/* PWM1 Mode configuration: Channel3 */
TIM_OCInitStructure.TIM_OutputState =TIM_OutputState_E
TIM_OCInitStructure.TIM_Pulse = CCR3_V
TIM_OC3Init(TIM3, &TIM_OCInitStructure);
TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);
/****************************** 通道4 *********************************/
/* PWM1 Mode configuration: Channel4 */
TIM_OCInitStructure.TIM_OutputState =TIM_OutputState_E
TIM_OCInitStructure.TIM_Pulse = CCR4_V
TIM_OC4Init(TIM3, &TIM_OCInitStructure);
TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM3,ENABLE);& && && && && && && &&&//
TIM_Cmd(TIM3,ENABLE);& && && && && && && && && && && && && &&&//使能计数
while (1)
{
CCR4_Val++;
if(CCR4_Val==1000)CCR4_Val=0;
TIM_SetCompare4(TIM3,CCR4_Val);& && && && && && && && &//占空比调节
复制代码
主题帖子积分
中级技术员, 积分 102, 距离下一级还需 198 积分
中级技术员, 积分 102, 距离下一级还需 198 积分
主题帖子积分
专家等级:结帖率:0%打赏:0.00受赏:1.00
主题帖子积分
中级技术员, 积分 102, 距离下一级还需 198 积分
中级技术员, 积分 102, 距离下一级还需 198 积分
除非不断地进行软件干预,否则单个通用定时器不可以单独输出几路不同频率的PWM波形。
主题帖子积分
高级技术员, 积分 695, 距离下一级还需 305 积分
高级技术员, 积分 695, 距离下一级还需 305 积分
主题帖子积分
专家等级:结帖率:15%
主题帖子积分
高级技术员, 积分 695, 距离下一级还需 305 积分
高级技术员, 积分 695, 距离下一级还需 305 积分
可以设置输出 几路频率一样,占空比不同的PWM
主题帖子积分
中级技术员, 积分 159, 距离下一级还需 141 积分
中级技术员, 积分 159, 距离下一级还需 141 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
中级技术员, 积分 159, 距离下一级还需 141 积分
中级技术员, 积分 159, 距离下一级还需 141 积分
用比较模式时可以的
主题帖子积分
初级技术员, 积分 82, 距离下一级还需 18 积分
初级技术员, 积分 82, 距离下一级还需 18 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
初级技术员, 积分 82, 距离下一级还需 18 积分
初级技术员, 积分 82, 距离下一级还需 18 积分
利用改变定时器输出比较通道的捕获值,当输出通道捕获值产生中断时,在中断中将捕获值改变,这时, 输出的I/O会产生一个电平翻转,利用这种办法,实现不同频率的PWM输出。
主题帖子积分
中级技术员, 积分 162, 距离下一级还需 138 积分
中级技术员, 积分 162, 距离下一级还需 138 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
中级技术员, 积分 162, 距离下一级还需 138 积分
中级技术员, 积分 162, 距离下一级还需 138 积分
可以使用定时器的比较输出模式,然后在中断中调节各个通道的比较值
主题帖子积分
中级技术员, 积分 120, 距离下一级还需 180 积分
中级技术员, 积分 120, 距离下一级还需 180 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
中级技术员, 积分 120, 距离下一级还需 180 积分
中级技术员, 积分 120, 距离下一级还需 180 积分
可以看看这个文档
主题帖子积分
高级技术员, 积分 902, 距离下一级还需 98 积分
高级技术员, 积分 902, 距离下一级还需 98 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
高级技术员, 积分 902, 距离下一级还需 98 积分
高级技术员, 积分 902, 距离下一级还需 98 积分
可以看看这个文档
/link?url=9yI65ExQVUOY4HCaBT-89YRLO6KkInr2R-DCxc5Fua7ioumlEcJ ...
谢谢,我看看去。
主题帖子积分
高级技术员, 积分 902, 距离下一级还需 98 积分
高级技术员, 积分 902, 距离下一级还需 98 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
高级技术员, 积分 902, 距离下一级还需 98 积分
高级技术员, 积分 902, 距离下一级还需 98 积分
利用改变定时器输出比较通道的捕获值,当输出通道捕获值产生中断时,在中断中将捕获值改变,这时, 输出的I ...
这也是一个很好的办法。下次自动登录
现在的位置:
STM32 PWM输出以及端口重映射
由于STM32没有专门的PWM引脚,所以使用IO口的复用模式,通用定时器TIM2-TIM5每个可以产生4路PWM(CH1-CH4)。
一:首先,配置GPIO为复用模式,如下图:
配置GPIO为复用模式
配置GPIO为复用模式
配置GPIO为复用模式
配置GPIO为复用模式
例如开启TIM3的CH2通道PWM,查表知该通道关联的是PA7口,所以,配置PA7为输出,并设置它为复用输出。
GPIOA-&CRL&=0X0FFFFFFF;//PA7输出
GPIOA-&CRL|=0XB0000000;//复用功能输出
如何选择开启每个定时器中的4路PWM呢?这就用到捕获/比较模式寄存器(TIMx_CCMR1/2),该寄存器总共有2个,TIMx _CCMR1和TIMx _CCMR2。TIMx_CCMR1控制CH1和2,而TIMx_CCMR1控制CH3和4。该寄存器如图(下排为输入模式):
TIMx_CCMR控制寄存器
这里要用到的是模式设置位(12-14、4-6位)OCxM,此部分由3位组成。总共可以配置成7种模式,若要使用PWM模式,则将这3位设置为110/111。这两种PWM模式的区别就是输出电平的极性相反,即高电平或低电平时间所占总周期的比例,110为高电平时间所占总周期比例;
还有使能位11位、3位,置1预装载使能CH2和CH1。
预装载使能打开并未真正打开PWM通道,还有两个开关,一个是单通道使能—TIMx_CCER寄存器,一个是TIMx开关TIMx_CRx。
TIMx_CCER寄存器控制CH1—CH4输入输出通道的开关,只需设置对应的CCxE位为1即可将PWM信号输出到对应的输出引脚。 该寄存器如下图:
TIMx_CCER寄存器
TIMx_CRx寄存器:需要打开该寄存器自动重装载预装载允许位ARPE (第7位)。注:个人认为不对该寄存器操作也可。
二:配置TIM3的ARR寄存器和PSC寄存器,确定PWM频率。
这里配置的这两个定时器确定了PWM的频率,我的理解是:PWM的周期(频率)就是ARR寄存器值与PSC寄存器值相乘得来,但不是简单意义上的相乘,例如要设置PWM的频率参考上次通用定时器中设置溢出时间的算法,例如输出100HZ频率的PWM,首先,确定TIMx的时钟,除非APB1的时钟分频数设置为1,否则通用定时器TIMx的时钟是APB1时钟的2倍,这时的TIMx时钟为72MHz,用这个TIMx时钟72MHz除以(PSC+1),得到定时器每隔多少秒涨一次,这里给PSC赋7199,计算得定时器每隔0.0001秒涨一次,即此时频率为10KHz,再把这个值乘以(ARR+1)得出PWM频率,假如ARR值为0,即0.0001*(0+1),则输出PWM频率为10KHz,再假如输出频率为100Hz的PWM,则将ARR寄存器设置为99即可。如果想调整PWM占空比精度,则只需降低PSC寄存器的值即可。
三:TIMx_CCRx寄存器,确定PWM的占空比。
TIMx_CCR1—TIMx_CCR4确定定时器的CH1—CH4四路PWM的占空比。直接给该寄存器赋0—65535值即可确定占空比。占空比计算方法:TIMx_CCRx的值除以ARR寄存器的值即为占空比,因为占空比在0—100%之间,所以一般TIMx_CCRx寄存器值不能超过ARR寄存器的值,否则可能会引起PWM的频率或占空比的准确性。
TIMx_CCRx寄存器如下图所示:
TIMx_CCRx寄存器
STM32 PWM输出函数(举例TIM3-CH2)
void PWM_Init(u16 arr,u16 psc)
RCC-&APB1ENR|=1&&1;
//TIM3时钟使能
GPIOA-&CRL&=0X0FFFFFFF;//PA7输出
GPIOA-&CRL|=0XB0000000;//复用功能输出 PWM模式
TIM3-&ARR=//设定计数器自动重装值
TIM3-&PSC=//预分频器不分频
TIM3-&CCMR1|=6&&12;
//CH2 PWM2模式(高电平为占空比)
TIM3-&CCMR1|=1&&11; //CH2预装载使能
TIM3-&CCER|=1&&4;
//OC2 输出使能
TIM3-&CR1=0x80; //ARPE使能
TIM3-&CR1|=0x01;
//使能定时器3
【上篇】【下篇】
您可能还会对这些文章感兴趣!
百度站内搜索
日志:254篇
评论:397条
分类:38个
标签:333个
运行:1433天
最后更新:日后使用快捷导航没有帐号?
来自ValentinRuhry的创意,这哥们用整整500
STM32自学系列——2.定时器TIM和PWM的输出【暑期持续更新】
本帖最后由 明少丶 于
00:42 编辑
学习完前面的STM32系统框架,时钟,GPIO和按键,我们开始由浅入深的逐个攻破STM32的所有功能。
我自己用的是stm32f103rc可以看看它的功能描述:
1.jpg (41.32 KB, 下载次数: 45)
20:54 上传
内容是:ARM 32位 cortex-M3内核 最高工作频率72MHZ 256KB Flash 48KB SRAM
内嵌RC振荡时钟 8MHZ和32MHZ ,RTC(实时时钟) , NIV(中断) , JTAG SWD仿真下载口 ,
PWM , 2个16位高级、2个16位基本、2个16位通用定时器 , 滴答定时器 , 3个 SPI/I2S ,
5个USART串口 , USB2.0 , CAN通信 , 3个12位 16通道AD转换器 , 2个12位 DA转换器 ,
SDIO(sd卡模块) , 高速i/o端口。
大体意思就是这样。&&所以说其实我们要学的内容不多,几天突破一个。很快我们就可以利用它来DIY一些高端、大气的电子类作品,是不是很开心。我们开始下面的内容:
& && && & STM32的定时器外设功能强大得超出了想像力,STM32一共有8个都为16位的定时器。其中TIM6、TIM7是基本定时器;TIM2、TIM3、TIM4、TIM5是通用定时器;TIM1和TIM8是高级定时器。这些定时器使STM32具有定时、信号的频率测量、信号的PWM测量、PWM输出、三相6步电机控制及编码器接口等功能,都是专门为工控领域量身订做的。
& && && &基本定时器:具备最基本的定时功能,下面是它的结构:
2.jpg (44.56 KB, 下载次数: 39)
21:50 上传
我们来看看它的启动代码:
void TIM2_Configuration(void)
{&& 基本定时器TIM2的定时配置的结构体(包含定时器配置的所有元素例如:TIM_Period = 计数值)
& & TIM_TimeBaseInitTypeDef&&TIM_TimeBaseS
& & 设置TIM2_CLK为72MHZ (即TIM2外设挂在APB1上,把它的时钟打开。)& && &&&
& & RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE);
& & 设置计数值位1000
& & TIM_TimeBaseStructure.TIM_Period=1000;
& & 将TIM2_CLK为72MHZ 除以72 = 1MHZ为定时器的计数频率
& & TIM_TimeBaseStructure.TIM_Prescaler= 71;
& & 这个TIM_ClockDivision是设置时钟分割,这里不分割还是1MHZ的计数频率
& & TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
& & 设置为向上计数模式;(计数模式有向上,向下,中央对齐1,中央对齐2,中央对齐3)
& & TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
& & 将配置好的设置放进stm32f10x-tim.c的库文件中
& & TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
& & 清除标志位
& & TIM_ClearFlag(TIM2, TIM_FLAG_Update);
& & 使能TIM2中断
& & TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
& & 使能TIM2外设& && &&&
& & TIM_Cmd(TIM2, ENABLE);& && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && &
& && & 通用定时器:就比基本定时器复杂得多了。除了基本的定时,它主要用在测量输入脉冲的频率、脉冲宽与输出PWM脉冲的场合,还具有编码器的接口。
3.jpg (81.47 KB, 下载次数: 49)
22:46 上传
我们来详细讲解:如何生成PWM脉冲
通用定时器可以利用GPIO引脚进行脉冲输出,在配置为比较输出、PWM输出功能时,捕获/比较寄存器TIMx_CCR被用作比较功能,下面把它简称为比较寄存器。
这里直接举例说明定时器的PWM输出工作过程:若配置脉冲计数器TIMx_CNT为向上计数,而重载寄存器TIMx_ARR被配置为N,即TIMx_CNT的当前计数值数值X在TIMxCLK时钟源的驱动下不断累加,当TIMx_CNT的数值X大于N时,会重置TIMx_CNT数值为0重新计数。
而在TIMxCNT计数的同时,TIMxCNT的计数值X会与比较寄存器TIMx_CCR预先存储了的数值A进行比较,当脉冲计数器TIMx_CNT的数值X小于比较寄存器TIMx_CCR的值A时,输出高电平(或低电平),相反地,当脉冲计数器的数值X大于或等于比较寄存器的值A时,输出低电平(或高电平)。
如此循环,得到的输出脉冲周期就为重载寄存器TIMx_ARR存储的数值(N+1)乘以触发脉冲的时钟周期,其脉冲宽度则为比较寄存器TIMx_CCR的值A乘以触发脉冲的时钟周期,即输出PWM的占空比为 A/(N+1) 。
如果不想看的可以直接看我标注的红色字体,就大体可以理解。
下面我们来编写具体代码和讲解:
void TIM3_GPIO_Config(void)
{配置TIM3复用输出PWM的IO
&&GPIO_InitTypeDef GPIO_InitS
&&打开TIM3的时钟
&&RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
&&打开GPIOA和GPIOB的时钟
&&RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);
&&配置PA6.PA7的工作模式
&&GPIO_InitStructure.GPIO_Pin =&&GPIO_Pin_6 | GPIO_Pin_7;
&&GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;& && &&&
&&GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
&&GPIO_Init(GPIOA, &GPIO_InitStructure);
&&配置PB0.PB1的工作模式
&&GPIO_InitStructure.GPIO_Pin =&&GPIO_Pin_0 | GPIO_Pin_1;
&&GPIO_Init(GPIOB, &GPIO_InitStructure);
void TIM3_Mode_Config(void)
& && &&&TIM_TimeBaseInitTypeDef&&TIM_TimeBaseS//初始化TIM3的时间基数单位
& && &&&TIM_OCInitTypeDef&&TIM_OCInitS//初始化TIM3的外设
& && && &u16 CCR1_Val = 500;& && &&&
& && && &u16 CCR2_Val = 375;
& && && &u16 CCR3_Val = 250;
& && && &u16 CCR4_Val = 125;//PWM信号电平跳变值(即计数到这个数值以后都是低电平之前都是高电平)
/* -----------------------------------------------------------------------
& & TIM3 Channel1 duty cycle = (TIM3_CCR1/ TIM3_ARR+1)* 100% = 50%
& & TIM3 Channel2 duty cycle = (TIM3_CCR2/ TIM3_ARR+1)* 100% = 37.5%
& & TIM3 Channel3 duty cycle = (TIM3_CCR3/ TIM3_ARR+1)* 100% = 25%
& & TIM3 Channel4 duty cycle = (TIM3_CCR4/ TIM3_ARR+1)* 100% = 12.5%
&&----------------------------------------------------------------------- */
&&TIM3的时间基数单位设置(如计数终止值:999,从0开始 ;计数方式:向上计数)& && && &
&&TIM_TimeBaseStructure.TIM_Period = 999;& && &
&&TIM_TimeBaseStructure.TIM_Prescaler = 0;& && && && &
&&TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;& && &&&
&&TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
&&TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
&&TIM3的外设的设置
&&TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;& && &&&//TIM脉冲宽度调制模式1& &
&&TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_E//这个暂时不知道,stm32固件库里没有搜到。应该是定时器输出声明使能的意思& && &&&
&&TIM_OCInitStructure.TIM_Pulse = CCR1_V//设置了待装入捕获比较寄存器的脉冲值& && && &
&&TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_H //TIM输出比较极性高
&&TIM_OC1Init(TIM3, &TIM_OCInitStructure);
&&TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);//使能或者失能TIMx在CCR1上的预装载寄存器
&&下面3路PWM输出和上面的一样不再解说
&&TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_E
&&TIM_OCInitStructure.TIM_Pulse = CCR2_V& && && &
&&TIM_OC2Init(TIM3, &TIM_OCInitStructure);& && && &
&&TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
&&TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_E
&&TIM_OCInitStructure.TIM_Pulse = CCR3_V& && &&&
&&TIM_OC3Init(TIM3, &TIM_OCInitStructure);& && && &
&&TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);
&&TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_E
&&TIM_OCInitStructure.TIM_Pulse = CCR4_V& && &&&
&&TIM_OC4Init(TIM3, &TIM_OCInitStructure);& && &&&
&&TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);
&&TIM_ARRPreloadConfig(TIM3, ENABLE);& && &&&//使能TIM3重载寄存器ARR& && && && && &
&&TIM_Cmd(TIM3, ENABLE);//使能TIM3& && && && &&&
太累了边看边写都这个点了日0:24:13在自己床上写的。下面是看看我们程序达到的4路PWM的效果:
4.jpg (84.64 KB, 下载次数: 68)
00:20 上传
可以看到明显占空比不同的4路pwm波。
这一节终于讲完,个人觉得敲一遍代码学起来还是蛮容易懂的。希望看到的人也能搞懂。
最后补充一点pwm具体能干什么?&&特别是对广大电子DIY爱好者的应用:
智能小车的电机控制:我们可以利用pwm来控制我们的智能小车的车速;
机器人:给“机器人关节”舵机周期一定(我以前玩过具体多少毫秒忘记了)pwm波就可以控制舵机的转动角度了;
呼吸灯:输入不同的pwm波就可以达到明暗渐明渐暗的效果。
还有别的应用大家一起发挥想象力给予补充。我们可以一起交流,希望大家支持。
刚刚学习STM32,共勉
凑个热闹,看不懂,不过感兴趣
大神是怎么学会51单片机,学习方法牛逼,佩服
王栋春 发表于
凑个热闹,看不懂,不过感兴趣
花点时间,应该看得懂。很人性化的东西。
酷爱diy 发表于
大神是怎么学会51单片机,学习方法牛逼,佩服
刚上大学空余时间看到机器人感兴趣,就认识了微型计算机。从51这种基础的8位微机开始学的,不懂就去百度。买书看看。我一般学一款微机都不会去买单片机学习板,其实买个微机的最小系统就够了。一般都不会超过50,只能建议怎么多了。
那么你的方法除了百度与看书最重要的是怎么学习的,我学的头大了
酷爱diy 发表于
那么你的方法除了百度与看书最重要的是怎么学习的,我学的头大了
理解很重要。就和解数学题一样,思路要理清。最好看别人的教学视频,然后自己理解消化,拿去应用举一反三。就可以了。
你是怎样组织代码的???根据参考手册将一个个函数调用起来么???我是学正点原子的开发板,但是我只是大概了解一下外设的结构,简介。还有就是照着书把代码抄进去而已,感觉达不到更好效果。
电子DIY嘿皮 发表于
你是怎样组织代码的???根据参考手册将一个个函数调用起来么???我是学正点原子的开发板,但是我只是大 ...
是效果没出来,还是什么?&&我也学了好几天才用的很自然。重点在于理解,才能去用,
Copyright &
Powered by}

我要回帖

更多关于 555定时器输出电压 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信