OpenEdv-开源电子网

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

菜鸟求助,对条形码扫描模块的数据管脚进行输入捕获以及截取有效信号的代码问题。

[复制链接]

1

主题

11

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2015-4-29
在线时间
2 小时
发表于 2015-4-29 13:33:18 | 显示全部楼层 |阅读模式
5金钱


        现在在用一款条形码扫描模块和开发板做一个条码扫描器,这个扫描模块的原理是激光点右模块内的震动镜片震动将其变成激光线,就像超市收银的那种条码扫描枪,激光点从左到右然后从右回到最左边,然后循环扫描,反射光被收集起来,由模块吸收后,4号管脚会输出PWM波,我把线一分二,分别接到PA0和PA1上,用TIM5定时器的CH1和CH2分别捕获高电平和低电平的脉宽,就是高低电平的时间(对应的就是条码黑白条纹的宽度)。然后为了把数据传到PC的时候方便判断是第几帧,3号管脚的帧信号输出一比一的高低电平,高电平对应从左到右扫描的条码信息(是我想要的信号),低电平是从右到左的电平信息(不需要的数据)。所以我又用了一个TIM4定时器的CH1来捕获3号管脚的上升沿,并在中断函数里写了以下程序:
[mw_shl_code=c,true]void TIM4_IRQHandler(void) { if(TIM_GetITStatus(TIM4, TIM_IT_CC1) != RESET) { if(Flag_Rising_Falling==1) { TIM_ITConfig(TIM5,TIM_IT_Update|TIM_IT_CC1|TIM_IT_CC2,ENABLE); TIM_OC1PolarityConfig(TIM4,TIM_ICPolarity_Falling); Flag_Rising_Falling=0; TIM_ClearITPendingBit(TIM4,TIM_IT_CC1); sResult.sID++; printf("sID:%d\r\n",sResult.sID); } } if(TIM_GetITStatus(TIM4,TIM_IT_CC1) != RESET) { if(Flag_Rising_Falling==0) { TIM_ITConfig(TIM5,TIM_IT_Update|TIM_IT_CC1|TIM_IT_CC2,DISABLE); TIM_OC1PolarityConfig(TIM4,TIM_ICPolarity_Rising); Flag_Rising_Falling=1; TIM_ClearITPendingBit(TIM4,TIM_IT_CC1); } } } [/mw_shl_code]

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

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2015-4-29
在线时间
2 小时
 楼主| 发表于 2015-4-29 15:05:12 | 显示全部楼层
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2015-4-29
在线时间
2 小时
 楼主| 发表于 2015-4-29 15:13:22 | 显示全部楼层
黄色的波形代表3号管脚的帧信号,蓝色的波形是4号管脚输出的数据,3号管脚高电平下对应的的蓝色波形是有用的数据。用示波器测后,黄色波形的高电平低电平持续时间几乎相等,大约22ms。黄色波形下对应的蓝色的波中,一般会有70个左右的高电平加低电平,这一部分从波形里看大约持续10ms,也就是说10ms里要进行70次输入捕获,用我们15讲里的输入捕获的代码(我进行了修改,把TIM5的CH2也打开了,捕获低电平时间),跟得上这个波的速度吗。实际实验的情况好像达不到平均一个电平持续时间10/70=140us啊。。。这个输入捕获能连续不断的捕获吗。。。卡在这里好几天了,一直没正常的结果。。。
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2015-4-29
在线时间
2 小时
 楼主| 发表于 2015-4-29 15:16:17 | 显示全部楼层
@whut-showming @正点原子
能@吗。。。
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2015-4-29
在线时间
2 小时
 楼主| 发表于 2015-4-29 15:38:46 | 显示全部楼层
原子大哥,我还想问下,按照我上面算的平均142us一个高电平,我还是用的你的例程
TIM5_Cap_Init(0XFFFF,72-1); 
TIM5_Cap_Low_Init(0XFFFF,72-1);

这意思是说1秒记1000次 最小时间是1ms吗,我把这里的预分频系数psc设置得小一点,可以吗
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-4-29 23:06:09 | 显示全部楼层
回复【5楼】whut-wbihx:
---------------------------------
这里是1Mhz的技术频率,1秒钟计数1M次,而不是1000次。改小当然可以
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

48

主题

177

帖子

0

精华

高级会员

Rank: 4

积分
782
金钱
782
注册时间
2013-4-23
在线时间
166 小时
发表于 2016-8-1 17:37:15 | 显示全部楼层
whut-wbihx 发表于 2015-4-29 15:13
黄色的波形代表3号管脚的帧信号,蓝色的波形是4号管脚输出的数据,3号管脚高电平下对应的的蓝色波形是有用 ...

楼主用的这个条形码模块是什么型号?
努力做,耐心等
回复

使用道具 举报

0

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2018-5-7
在线时间
19 小时
发表于 2018-9-19 17:27:04 | 显示全部楼层
楼主会用扫描器扫描到数据传到32上并LCD显示出来吗
回复

使用道具 举报

0

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2018-5-7
在线时间
19 小时
发表于 2018-9-19 17:27:37 | 显示全部楼层
楼主如果会的话求指导
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 05:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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