OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 11707|回复: 14

用FPGA发脉冲会莫名其妙的丢脉冲

[复制链接]

14

主题

59

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
252
金钱
252
注册时间
2012-8-21
在线时间
29 小时
发表于 2014-7-21 15:58:17 | 显示全部楼层 |阅读模式
5金钱
如题,小弟最近做一个用FPGA驱动电机的板子,用STM32把FPGA需要发出的脉冲的宽度和个数都计算好,然后用8位的并口,通过一个时钟上升沿写进FPGA,在FPGA内部进行运算之后发出脉冲,刚开始试验室没有问题,但是个数一多总会莫名其妙的丢脉冲,下面是用逻辑分析仪抓的波形,图中密密麻麻的都是脉冲,中间的低电平是间隔,但是中间很明显缺了一段脉冲,不知道是为什么,弄了好久了,求大神指点指点。。。。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

14

主题

59

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
252
金钱
252
注册时间
2012-8-21
在线时间
29 小时
 楼主| 发表于 2014-7-21 16:04:33 | 显示全部楼层
附上主要的verilog代码:
其中input1_qnt_fst和input1_wid_fst是从stm32输入fpga的脉冲个数和脉冲宽度,
      reg1_wid_fst和reg1_qnt_fst是fpga内部定义的寄存器,用来累加用

always @(posedge clk_div) begin
if(enn == 1) begin
if(reg1_wid_fst < input1_wid_fst) begin
reg1_wid_fst = reg1_wid_fst + 16'b1;
end
else begin
if(reg1_qnt_fst < input1_qnt_fst) begin
reg1_wid_fst = 1;
reg1_qnt_fst = reg1_qnt_fst + 16'b1;
end
else begin
reg1_qnt_fst = input1_qnt_fst;
end
end
end
else if(enn == 0) begin
reg1_wid_fst = 0;
reg1_qnt_fst = 0;
end
end

assign pout1 = reg1_qnt_fst[0];


在fpga内部通过reg1_wid_fst的累加,加到reg1_wid_fst==input1_wid_fst时就把reg1_qnt_fst加1,同时把reg1_wid_fst清零,重新开始累加,直到reg1_qnt_fst==input1_qnt_fst为止,
输出的脉冲是就是取reg1_qnt_fst的最低位进行输出
stm32是通过定时器10ms给fpga发这些参数,同时启动enn信号进行发送。

但是总是会出现1楼的那个问题,求大神指点指点啊
回复

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2014-7-21 17:32:35 | 显示全部楼层
帮顶。。。。
站在巨人的肩膀上不断的前进。。。
回复

使用道具 举报

1

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2013-10-13
在线时间
3 小时
发表于 2014-7-21 22:34:51 | 显示全部楼层
回复【2楼】枫叶情缘:
---------------------------------
脉冲频率多少?你这个不像是丢脉冲,更像是clk_div出了问题,脉冲时间变短了。
回复

使用道具 举报

14

主题

59

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
252
金钱
252
注册时间
2012-8-21
在线时间
29 小时
 楼主| 发表于 2014-7-22 08:43:15 | 显示全部楼层
回复【4楼】420304805:
---------------------------------
先谢谢您的回复!
FPGA主频是20M,然后我十分频,也就是2M,stm32是10ms进一次中断,给fpga发指令和数据,我这次设定的电平翻转一次的宽度是100个1/2M的周期,也就是50us,上图我截的不是很清晰,因为比较大,截不全。
图上不是脉冲时间变短,每隔电平翻转的时间和别的周期是一样的,但是就是丢了一部分脉冲,比如别的10ms都是发100个脉冲,这个10ms就发了30个脉冲。我感觉就像是fpga内部已经进行累加了,但是本该翻转的电平却没有输出来。
回复

使用道具 举报

14

主题

59

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
252
金钱
252
注册时间
2012-8-21
在线时间
29 小时
 楼主| 发表于 2014-7-22 08:43:26 | 显示全部楼层
回复【3楼】xiaoyan:
---------------------------------
谢帮顶~~
回复

使用道具 举报

1

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2013-10-13
在线时间
3 小时
发表于 2014-7-22 11:03:24 | 显示全部楼层
回复【5楼】枫叶情缘:
---------------------------------
我FPGA不是很懂,我是用STM32来发脉冲的。我觉得发上Mhz频率的脉冲使用FPGA才有意义吧,我用STM32实现了4路MHZ级的脉冲,基本不占用CPU。没用FPGA。
回复

使用道具 举报

14

主题

59

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
252
金钱
252
注册时间
2012-8-21
在线时间
29 小时
 楼主| 发表于 2014-7-23 07:20:58 | 显示全部楼层
回复【7楼】420304805:
---------------------------------
3q先。
你说的是产生pwm,这样是用fpga和arm都无所谓,但是驱动电机的话要脉冲个数可控,就是发多少个脉冲要通过插补算法计算出来之后再发出去,而不是用arm内部的定时器产生pwm。
主要是个数要可控,所以还是得用fpga,单单产生pwm就不用fpga了。
回复

使用道具 举报

1

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2013-10-13
在线时间
3 小时
发表于 2014-7-23 07:31:19 | 显示全部楼层
回复【8楼】枫叶情缘:
---------------------------------
确实用stm32产生频率,数量可控的脉冲串。因为不带插补,所以我不用fpga
回复

使用道具 举报

14

主题

59

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
252
金钱
252
注册时间
2012-8-21
在线时间
29 小时
 楼主| 发表于 2014-7-24 17:28:07 | 显示全部楼层
回复【9楼】420304805:
---------------------------------
请问大虾,产生个数可控的脉冲,怎么做到的?
回复

使用道具 举报

1

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2013-10-13
在线时间
3 小时
发表于 2014-7-24 19:25:27 | 显示全部楼层
回复【10楼】枫叶情缘:
---------------------------------
我自己都还没做成,不敢乱说,毕竟还不成熟。呵呵。
如果你想做,可以一起小开源。
回复

使用道具 举报

14

主题

59

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
252
金钱
252
注册时间
2012-8-21
在线时间
29 小时
 楼主| 发表于 2014-7-25 09:30:15 | 显示全部楼层
回复【11楼】420304805:
---------------------------------
那就先预祝成功啦。
我也是给别人做的东西,stm32跑跑人机交互和算法,fpga用来发脉冲,就是这个丢脉冲让我不解,照理说是很简单的逻辑,时间一长就丢脉冲,确实是费解。
回复

使用道具 举报

35

主题

227

帖子

3

精华

高级会员

Rank: 4

积分
956
金钱
956
注册时间
2014-3-5
在线时间
35 小时
发表于 2015-4-4 15:09:44 | 显示全部楼层
回复【10楼】枫叶情缘:
---------------------------------
我也觉得用stm32产生这样的脉冲不太容易。。。最近用32做步进电机控制,涉及到插补,希望多交流
把看到的有意义的例子进行扩充,并将其切实的运用到自己的设计中。 应用确实不容易,水平是在不断的实践中完善和发展的。
回复

使用道具 举报

1

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
318
金钱
318
注册时间
2014-5-14
在线时间
112 小时
发表于 2020-5-9 08:50:12 | 显示全部楼层
STM32 利用PWM +DMA 不仅可以产生 个数可控,并且频率也能实现加速减速变化
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2020-5-13
在线时间
0 小时
发表于 2020-5-13 23:23:03 | 显示全部楼层
真不知道你写的什么,用modelsim仿真吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-27 08:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表