完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
附上主要的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楼的那个问题,求大神指点指点啊 |
|
|
|
帮顶。。。。
|
|
|
|
脉冲频率多少?你这个不像是丢脉冲,更像是clk_div出了问题,脉冲时间变短了。
|
|
|
|
先谢谢您的回复!
FPGA主频是20M,然后我十分频,也就是2M,stm32是10ms进一次中断,给fpga发指令和数据,我这次设定的电平翻转一次的宽度是100个1/2M的周期,也就是50us,上图我截的不是很清晰,因为比较大,截不全。 图上不是脉冲时间变短,每隔电平翻转的时间和别的周期是一样的,但是就是丢了一部分脉冲,比如别的10ms都是发100个脉冲,这个10ms就发了30个脉冲。我感觉就像是fpga内部已经进行累加了,但是本该翻转的电平却没有输出来。 |
|
|
|
谢帮顶~~
|
|
|
|
我FPGA不是很懂,我是用STM32来发脉冲的。我觉得发上Mhz频率的脉冲使用FPGA才有意义吧,我用STM32实现了4路MHZ级的脉冲,基本不占用CPU。没用FPGA。
|
|
|
|
3q先。
你说的是产生pwm,这样是用fpga和arm都无所谓,但是驱动电机的话要脉冲个数可控,就是发多少个脉冲要通过插补算法计算出来之后再发出去,而不是用arm内部的定时器产生pwm。 主要是个数要可控,所以还是得用fpga,单单产生pwm就不用fpga了。 |
|
|
|
确实用stm32产生频率,数量可控的脉冲串。因为不带插补,所以我不用fpga
|
|
|
|
请问大虾,产生个数可控的脉冲,怎么做到的?
|
|
|
|
|
|
|
|
那就先预祝成功啦。
我也是给别人做的东西,stm32跑跑人机交互和算法,fpga用来发脉冲,就是这个丢脉冲让我不解,照理说是很简单的逻辑,时间一长就丢脉冲,确实是费解。 |
|
|
|
我也觉得用stm32产生这样的脉冲不太容易。。。最近用32做步进电机控制,涉及到插补,希望多交流
|
|
|
|
只有小组成员才能发言,加入小组>>
2889 浏览 3 评论
27682 浏览 2 评论
3465 浏览 2 评论
3979 浏览 4 评论
基于采用FPGA控制MV-D1024E系列相机的图像采集系统设计
2329 浏览 3 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-12 02:00 , Processed in 1.143592 second(s), Total 100, Slave 79 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号