如何发出固定个数的PWM矩形脉冲信号的参数有

查看: 1806|回复: 40
stm32 怎么对PWM脉冲计数?
我用的是F103ZET6 想同时驱动3台步进电机变速运行,然后想对输出的PWM脉冲个数计数,但是不知道在哪边下手,没有用定时器溢出中断,那样另外想问下 一块单片机带三台步进电机变速会不会太资源不够用啊?求大神帮忙(毕业设计··急)
显示值和实际电机转的圈数不对应
是差多少, 是每次差固定的数,还是变化的
你先发1个脉冲, 然后用示波器看,先把个位数的脉冲发对了再说,然后发多的
就是有定义一个整形变量在中断里边累加,然后在屏幕上把那个变量值显示出来,但是显示值和实际电机转的圈 ...
显示值和实际电机转的圈数不对应
是差多少, 是每次差固定的数,还是变化的
你先发1个脉冲, 然后用示波器看,先把个位数的脉冲发对了再说,然后发多的
好像STM32的定时器有一种模式可以产生PWM信号,想要多少个脉冲都可以,楼主要仔细研究下手册还有st的例子
定时器计数啊,想计算频率,用捕获定时器
再分别用3个IO中断吧。计数PWM。到了多少就关闭PWM
楼上正解&&。楼主 用的那家伺服 ?
定时器主从模式,最简单,最准确~
一个单片机驱动三个步进电机完全够用,用定时器的效果会好一些,我曾经用延时控制过三个,第一个还好,其他两个特别的震动特别大,搞不懂楼主算PWM波的脉冲数干嘛
将定时器设为外部时钟模式即当计数器使用,驱动三个步进电机应该没问题
没什么压力
定时器级联
stm32的高级定时器有产生指定脉冲数量pwm波的功能,设置一个寄存器的值就行,1到255个好像
用来定位的吗?&&在timer中断中 计数,周期到了就 +1
如果是 同时 多路的话需要测试多路的最高频率,中断多了会有影响的
好像STM32的定时器有一种模式可以产生PWM信号,想要多少个脉冲都可以,楼主要仔细研究下手册还有st的例子 ...
我的现在是三个步进电机不同速变速运行,貌似只能用三个定时器吧?
定时器计数啊,想计算频率,用捕获定时器
不要计算频率的,就是想对脉冲个数计数,然后步进电机定位
用来定位的吗?&&在timer中断中 计数,周期到了就 +1
我现在外部有64细分然后还用的是减速电机,输出频率很大啊 最大要1.5KHz呢,用溢出中断的话,单片机会不会很卡啊?
如果是 同时 多路的话需要测试多路的最高频率,中断多了会有影响的
是的啊,现在用了6个定时器,感觉系统不允许用中断方式
stm32的高级定时器有产生指定脉冲数量pwm波的功能,设置一个寄存器的值就行,1到255个好像 ...
大神求解,我昨天看正点原子那边人也是这么说的,但是我没用过高级定时器,那个复杂吗?
一个单片机驱动三个步进电机完全够用,用定时器的效果会好一些,我曾经用延时控制过三个,第一个还好,其他 ...
现在就想对步进电机定位的,脉冲计数跟准确一点
定时器主从模式,最简单,最准确~
主从模式是什么意思啊?我现在步进电机分别用的是定时器 2,3,4。然后用定时器6定时50ms 再改变上面三个定时器计数初值,这个是主从模式吗?&&但是通用定时器里边计数在什么地方加啊?昨天纠结了半天没找到
定时器级联
级联是什么?
楼上正解&&。楼主 用的那家伺服 ?
最近确实在学伺服,我们用的是倍福的。大神求帮忙···
主从模式是什么意思啊?我现在步进电机分别用的是定时器 2,3,4。然后用定时器6定时50ms 再改变上面三个定 ...
看手册啊...
定时器级联模式,pwm输出作为另一个定时器的输入,到达要计的数后中断
级联是什么?
主定时器输出,从定时器计数。
大神求解,我昨天看正点原子那边人也是这么说的,但是我没用过高级定时器,那个复杂吗? ...
这个帖子里有介绍
想让STM32输出频率可调脉冲,又要对输出脉冲进行计数,有什么耗资源少方案
(出处: amoBBS 阿莫电子论坛)
定时器级联模式,pwm输出作为另一个定时器的输入,到达要计的数后中断
就是把定时器pwm输出的引脚用线拉出来再接到定时器输入的引脚上吗?
longwu537 发表于
就是把定时器pwm输出的引脚用线拉出来再接到定时器输入的引脚上吗?
还是通读下定时器相关章节吧,收获更大
学弟,你又调皮了!
我现在外部有64细分然后还用的是减速电机,输出频率很大啊 最大要1.5KHz呢,用溢出中断的话,单片机会不 ...
实际上 3路脉冲 每路最大可以达到 90K, 支持速度模式, 梯形模式和非梯形模式, 木有问题啊
实际上 3路脉冲 每路最大可以达到 90K, 支持速度模式, 梯形模式和非梯形模式, 木有问题啊 ...
我现在就是用中断溢出对pwm脉冲数进行计数,但是记得的数字跟实际电机转的圈数相差很大呢。请您帮忙看看吧?
实际上 3路脉冲 每路最大可以达到 90K, 支持速度模式, 梯形模式和非梯形模式, 木有问题啊 ...
void TIM2_PWM_Init(u16 arr,u16 psc)
& & & & GPIO_InitTypeDef GPIO_InitS
& & & & TIM_TimeBaseInitTypeDef&&TIM_TimeBaseS
& & & & TIM_OCInitTypeDef&&TIM_OCInitS
& & & & RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);& & & &
& & & & RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA&&| RCC_APB2Periph_AFIO, ENABLE);&&
& & & & GPIO_PinRemapConfig( GPIO_PartialRemap2_TIM2 , ENABLE);
& & & & GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
& & & & GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;&&
& & & & GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
& & & & GPIO_Init(GPIOA, &GPIO_InitStructure);
& & & & TIM_TimeBaseStructure.TIM_Period =
& & & & TIM_TimeBaseStructure.TIM_Prescaler =&&
& & & & TIM_TimeBaseStructure.TIM_ClockDivision = 0;
& & & & TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
& & & & TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
& & & & TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
& & & & TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_E
& & & & TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_H
& & & & TIM_OC2Init(TIM2, &TIM_OCInitStructure);
& & & & TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);
& && &&&TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE );
& & & & TIM_Cmd(TIM2, ENABLE);&&
& & & & TIM_SetCompare2(TIM2,arr/2);
void TIM2_IRQHandler(void)&&
& &if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
& && &&&TIM_ClearITPendingBit(TIM2, TIM_IT_Update&&);
& && &&&countpwm[0]++;
看了所有的回答,还是没能看懂如何计数。中断计数方式效率太低了。
ZET6 3路刚刚好&&正好&&你可以看我发过的帖子
我现在就是用中断溢出对pwm脉冲数进行计数,但是记得的数字跟实际电机转的圈数相差很大呢。请您帮忙看看 ...
你是怎么测试的,有测试的设备吗?
比如说用 伺服控制器 直接查看显示的脉冲数,如果是个位数的话可以用示波器看&&单次采样。
最多只能差1个脉冲,而且不能累积
你是怎么测试的,有测试的设备吗?
比如说用 伺服控制器 直接查看显示的脉冲数,如果是个位数的话可以用 ...
就是有定义一个整形变量在中断里边累加,然后在屏幕上把那个变量值显示出来,但是显示值和实际电机转的圈数不对应
你是怎么测试的,有测试的设备吗?
比如说用 伺服控制器 直接查看显示的脉冲数,如果是个位数的话可以用 ...
请问您那个帖子?没找到
ZET6 3路刚刚好&&正好&&你可以看我发过的帖子
请问您那个帖子?没找到
STM32 内部有16位的计数器的
显示值和实际电机转的圈数不对应
是差多少, 是每次差固定的数,还是变化的
我现在直接把累加值拿出来显示的,差10倍左右呢,谢谢提醒啦,回头先试试数量少的。
阿莫电子论坛, 原"中国电子开发网"STM32&精确输出PWM脉冲数控制电机
发脉冲两种目的
1)速度控制
2)位置控制
速度控制目的和模拟量一样,没有什么需要关注的地方
发送脉冲方式为PWM,速率稳定而且资源占用少
stm32位置控制需要获得发送的脉冲数,有下面4种手段
1)每发送一个脉冲,做一次中断计数
2)根据发送的频率&发送的时间,获得脉冲数量,对于变速的脉冲,可以累计积分的方法来获得总脉冲
3)一个定时器作为主发送脉冲,另外一个定时器作为从,对发送的脉冲计数
4)使用DMA方式,例如共发送1000个脉冲,那么定义u16
per[1001],每发送一个脉冲,dma会从数组中更新下一个占空比字,数组最后一个字为0,表示停发脉冲
上面4种方法的用途和特点
1)对于低速率脉冲比较好,可以说低速发脉冲的首选,例如10Khz以下的,否则中断占用太多的cpu,这种方法要注意将中断优先级提高,否则会丢计数,
2)用作定时的计时精确高,可以允许有脉冲计数丢失的情况
3)主从方式,需额外的定时器来计数,例如tim1发脉冲
tim2计数,最方便的方式,无论高速低速即可,同时占用cpu最低,只是要占用多一个定时器
4)DMA方式也算是一个很确定的方式,不会丢失脉冲,但是高速的时候,会较多的占用内部总线同时会使用一个多余的DMA控制器,而且有个缺点,就是使用起来比较复杂,没有达到KISS原则
个人推荐方式,低速时中断方式,如果不知高速还是低速,则使用主从方式。具体的方式需要根据资源和需求来确定。
stm32定时器算是比较复杂的器件,而且用户要较多的介入底层,希望将来st公司能够能够简化器件的使用。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。如何发出固定个数的PWM脉冲信号_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
如何发出固定个数的PWM脉冲信号
我有更好的答案
TIM_RepetitionCounter = 1000,修改RCR寄存器的值
if ((TIMx == TIM1) || (TIMx == TIM8))
{/* Set the Repetition Counter value */TIMx-&gt发出固定个数的PWM脉冲信号方法:TIM_TimeBaseStructure
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包关于STM32输出精确PWM脉冲数的方法? - STM32 - 意法半导体STM32/STM8技术社区
后使用快捷导航没有帐号?
查看: 37713|回复: 31
关于STM32输出精确PWM脉冲数的方法?
在线时间0 小时
该用户从未签到主题帖子好友
新手上路, 积分 45, 距离下一级还需 5 积分
新手上路, 积分 45, 距离下一级还需 5 积分
在驱动伺服或步进电机的时候,都需要用精确的脉冲数。并且PWM的频率都还挺高,一般100kHz,还可能是多路同时工作,比如驱动4个伺服。
大体看到有两种做法可以实现精确的脉冲数:1,外部再弄个IO口接到PWM脚上,用外部中断的办法,单独来计数。此办法可行,但非常不科学,并且浪费资源。& &2,使用定时器,使用一个和PWM频率一致的定时器,使用定时器中断来计数。此方法比第一种办法好了很多,但是仍然感觉比较笨。
STM32的定时器寄存器中有一个重复次数寄存器RCR。& &这个寄存器在定时器中可以使用,个人想,若这个重复次数能做到PWM的重复次数计数该多好?
请问大伙,这个能实现吗?或者有不用每个脉冲中断一次的办法实现PWM的精确计数吗?
在线时间0 小时
该用户从未签到主题帖子好友
新手上路, 积分 923, 距离下一级还需 -873 积分
新手上路, 积分 923, 距离下一级还需 -873 积分
RE:关于STM32输出精确PWM脉冲数的方法?
for(脉冲数)
IO高电平;延时;IO低电平;延时;
不好意思,发帖的时候点错,接着上面的发
在线时间98 小时
该用户从未签到主题帖子好友
金牌会员, 积分 1641, 距离下一级还需 3359 积分
金牌会员, 积分 1641, 距离下一级还需 3359 积分
RE:关于STM32输出精确PWM脉冲数的方法?
RCR是重复次数计数器,如果你想要用这个你必须这样设置,
假设你想要测量的是100PWM周期为一次计数,需要重复计数10次的话:
1、选择TIM1的时钟源为“外部时钟源模式1”;
2、TIM1向上计数,且计数周期为100;
3、重复计数RCR设为10;
4、设置产生UDE更新时中断,你已经测量到100x10=1000个脉冲了。
以前用过STM32的PWM计数,测量发动机转速,都是基于比较捕获引脚的定时器计数或是中断计数,转速快的时候就用计数方式,转速慢的时候就测量周期,也挺好用的,就是中断进的次数多,不过我的项目中处理速度跟转速有关,所以必须进中断。
在线时间0 小时
该用户从未签到主题帖子好友
新手上路, 积分 923, 距离下一级还需 -873 积分
新手上路, 积分 923, 距离下一级还需 -873 积分
RE:关于STM32输出精确PWM脉冲数的方法?
直接用单片机的pwm不好控制,我控制步进电机的方法就是用到精确脉冲数,形如:
在线时间1 小时
该用户从未签到主题帖子好友
初级会员, 积分 171, 距离下一级还需 29 积分
初级会员, 积分 171, 距离下一级还需 29 积分
RE:关于STM32输出精确PWM脉冲数的方法?
可以选择使用DMA来控制发送的脉冲数,最大可以65535个。如果你的脉冲宽度一致,则DMA地址不增加的方式传输;如果你想使用不同频率,可以设置不同的装载值,PWM使用单次触发。如果你发送的脉冲数超过65535个,则可以使用DMA传输完成中断中切换DMA传输的数据起始地址及发送数量,继续发送。这个方法即方便,又减轻CPU的负担,可以同时驱动多个电机工作,还可以根据电机的启动-运行-停止使用不同的频率。不知道这个方法符不符合你的要求呢。
在线时间5 小时
该用户从未签到主题帖子好友
初级会员, 积分 85, 距离下一级还需 115 积分
初级会员, 积分 85, 距离下一级还需 115 积分
RE:关于STM32输出精确PWM脉冲数的方法?
你的精确是什么意思?可控吗?
在线时间0 小时
该用户从未签到主题帖子好友
新手上路, 积分 45, 距离下一级还需 5 积分
新手上路, 积分 45, 距离下一级还需 5 积分
RE:关于STM32输出精确PWM脉冲数的方法?
精确可控就是: 比如我要输出100kHZ,占空比50%的PWM,发出102个脉冲后,自动停止。
发出的PWM脉冲数是准确的。而不仅仅是频率或占空比。
在线时间20 小时
该用户从未签到主题帖子好友
中级会员, 积分 427, 距离下一级还需 73 积分
中级会员, 积分 427, 距离下一级还需 73 积分
回复:关于STM32输出精确PWM脉冲数的方法?
楼主,你好!
请问你实现了吗?
我也急用这个方法,而且最好是一个定时器控制一路,因为我需要6路脉冲。
在线时间146 小时
该用户从未签到主题帖子好友
金牌会员, 积分 2408, 距离下一级还需 2592 积分
金牌会员, 积分 2408, 距离下一级还需 2592 积分
我也遇到了上述问题求教
在线时间164 小时
该用户从未签到主题帖子好友
金牌会员, 积分 2622, 距离下一级还需 2378 积分
金牌会员, 积分 2622, 距离下一级还需 2378 积分
本帖最后由 王建 于
13:13 编辑
我测试用STM32F103C8发出两路PWM,一路200KHz,另外一路150KHz,这两路频率都是固定的,同时以位置控制的模式(精确个数脉冲)驱动两个伺服电机,还带有USB通讯,没有什么问题。要搞六路的话,还得看资料,换资源多的芯片,六路有点多。DMA方式输出,控制机器人最少8路PWM输出,至少需要8路DMA传输完毕中断。不如上CAN open。
站长推荐 /2
Tel: 3-8064
备案号: 苏ICP备号-2
|||意法半导体STM32/STM8技术社区
Powered by想得到STM32PWM输出脉冲个数和控制输出个数?_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
想得到STM32PWM输出脉冲个数和控制输出个数?
在做电机控制,用中断计脉冲个数效果不太理想想问问有没有好的方法,还有就是希望能精确控制输出的脉冲个数。。
我有更好的答案
恩,现在就用的这个方法。有效果,不过好像不太准。正在解决。。
查看更多答案&&
采纳率:73%
为您推荐:
其他类似问题
脉冲的相关知识
换一换
回答问题,赢新手礼包}

我要回帖

更多关于 脉冲与数字信号教案 的文章

更多推荐

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

点击添加站长微信