完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
这里我指的是机械旋转编码器——那些在转动时能产生反弹的廉价编码器,因此需要使用滤波器来避免错误的读数。我想到了PIC内部的硬件RC滤波器和软件数字滤波器。我知道可以使用许多其他的芯片来代替PIC10F322,但是我想继续使用这个芯片。接下来的想法是:-让我们假设一个更大的PIC或其他类型的微控制器和编码器的项目。原则上,可以直接连接到那个大芯片上。-如果我使用另一个更小的廉价芯片,例如PIC10F,特别是10F322,我将编码器连接到PIC10F,PIC10F负责编码器所需的滤波、中断、解码和计数器,并且只提供计数,该怎么办?ER以更大的PIC使用一个简单的通信作为I2C或比特BUART?-这样,较大的PIC有足够的时间做其他事情,其他任务,并且只读较小PIC提供的结果。你怎么看这个想法?有道理吗?有什么缺点要指出吗?关于如何在大PIC上实现小PIC内部计数器的阅读有什么建议吗?
|
|
相关推荐
19个回答
|
|
|
有可能,但是由于10F范围内缺少任何串行通信模块(SPI/I2c/UART)以及它们非常有限的程序和数据存储器,您将非常伤心。您最好选择一个带有USART和MSP的增强型中档PIC12F1xx部分,这样您就不必大惊小怪了。e主机接口,同时尽量不松开编码器转换的轨迹。或者,简单地使用带有硬件QEI模块的主PIC,该硬件QEI模块可以直接处理编码器,并且以最小的CPU干预来跟踪其移动。有几个DSIC33部分有两个QEI模块和一个显着数量的PIC18和PIC24/DSPIC部件与一个。
|
|
|
|
|
|
您可能看到的另一个选项是使用10F部分将编码器转换为“向上”脉冲和“向下”脉冲,或者“计数”和“方向”。在主PIC上使用两个计数器,一个是UP,一个是向下,这样就可以保证精度,因为它不会丢失计数。我实际上已经这样做了,我想我用旧的OTP 8引脚PIC作为转换器。但是,对于前面板“拨号”来说,这可能是过度的,如果你使用脉冲和方向信号,它只需要一个计数器,但在方向改变时需要软件干预(改变时中断?)可能会滑动两个计数,这样对旋钮是好的,但对伺服位置控制器没有好处。
|
|
|
|
|
|
重复帖子
|
|
|
|
|
|
这些旋转编码器大多是增量正交输出类型(2输出90度异相)。这些可以通过两个外部中断(典型的18F图片中的INT1和INT2将起作用)和ISR中的一些简单的去折扣和计数器来容易地处理。正交输出告诉您所有您需要知道的计数和方向,您只需要去掉边缘,并从两个信号状态确定上计数或下计数,因为它们计数非常慢,既不复杂也不耗时。
|
|
|
|
|
|
我知道PIC10F很小,带有串行通信模块(SPI/I2C/UART)的PIC12F是另一种选择,它使生活更容易。我不想要DFN包和更多的PIC12F引脚。我知道也有大的PIC有QEI输入,但是我在这里考虑没有那个模块的PIC。当我们说PIC10F没有串行通信模块时,我们在软件仿真时考虑。如果我们在PIC10F之间使用同步的位脉冲。一个更大的PIC,最终有一个串行通信,而小的PIC10F322和UART是用ASM编写的,那么在16MHz时,我们可能有足够的高速读取编码器,最终应用一些数字滤波器,并将信息发送到大的PIC。例如,这里已经介绍了用于串行通信仿真的拟议代码,并且没有占用太多的内存:http://www.micro..com/for./m926980-p4.aspxMy编码器是24凹口,在2个凹口之间有4个脉冲,因此每转一圈总共96个脉冲。让我们把它简化为100。它像旋钮一样用手转动,不是测量电机转速的快速装置。旋转编码器转动时的平均速度是1秒转动的一半,最大每秒转动1圈。这是我实际测试的。然后我们有100个脉冲,最大1秒旋转1圈,作为最快转弯。这导致两个脉冲之间有10毫秒。嗯,10毫秒用简单的4MHz内部振荡器(1MIPS=1百万指令/秒)读出和做其他事情的时间很多。有4倍的速度,足够的速度。下面是一些没有RC过滤器的示波器屏幕截图:HTTPS://Delv.GoGoLe.com/Onter?ID= 0BWXMKASWW75 EKSMPUF0T0FQQXC,当我问“有什么建议,如何实现阅读的柜台内的小PIC做了更大的PIC?”接下来,我想到了:-假设10F322完成工作,读取编码器,过滤去噪,在内部有一个计数器来保存编码器值,并且能够使用最大2引脚进行通信。-然后我们想将计数器数据,比如说8位值,发送到更大的PIC。-我们应该如何做协议,沟通?我下一个想法是:大PIC定期读取/请求10F322内部的计数器。通信是由大PIC发起的。为了更快的速度或异步,通信可以是同步的。小的PIC10F322定期异步地发送数据,并且当大的PIC有时间读取数据时,这已经足够快了,即使让我认为我们可能会丢失实时的读数,并且可能会看到延迟。10F322只有当有新数据时才发送数据到大PIC——可能使用中断。这样,大PIC就不会一直麻烦。也许是上面的结合,PIC10F322的时钟由大PIC提供,而我们是同步通信的。哪个PIC应该发起通信?最好的方法是什么?
|
|
|
|
|
|
你只有两个别针。如果主PIC必须敲击CAMS链接,或者一直监视它,那么你就失去了奴隶PIC的大部分优势。因此,它必须能够从上一次读取请求上/下计数,或者可能设置警报的条件。PIC10F322 HFIFTROC对于可靠的逻辑级RS232 COMs来说不够稳定,所以您的选项是非常慢的SPI或I2C。
|
|
|
|
|
|
稍后我会考虑速度和通信。示波器的屏幕截图显示“1”逻辑大约为2ms,而“0”逻辑几乎类似于最窄脉冲,这意味着最快的速度,比我最初估计的手眼10ms还要低。到上升沿(或者反过来)仍然有很多时间来完成任务。在这个论坛和其他网页上有许多链接,展示了如何阅读正交旋转编码器的代码示例。我可以提供简单的20个链接。但是,我发现了一个对我很好的网站。不幸的是,西班牙语,但这不是一个大问题看图表和代码。最后,您可以使用谷歌浏览器浏览器翻译网页的英文解释。以下是网页:https://..google.com/site/proyectosroboticos/encoder/encoder-por-software它们展示了各种编码器、硬件解码和软件解码,下面是简单的逻辑:https://..google.com/site/proyectosroboticos/encoder/encoder-por-./aumentar-la-resolucion-del你认为逻辑是什么?够好了吗?或者你有什么改进的建议吗?
|
|
|
|
|
|
我快速浏览了一下西班牙网站。对于C语言中的正交编码器,FSM算法的实现相当糟糕(没有错误状态检测和恢复,也没有去抖动)。不幸的是,只有512个单词的FLASH,您无法负担C语言的奢侈,因为您还必须适应其中的位脉冲串行通信。你对3x3mm UDFN-8包中的PIC12F1XXX范围部件设置了吗?与SOT23-6相比,额外的质量和面积可以忽略不计(大约1平方毫米额外的PCB面积),并且用C语言用硬件通信对算法进行编码节省时间,这将很容易地足够大,以支付一个好的SMD热风返修站(带有板式预热器)焊接它们的成本。
|
|
|
|
|
|
这不是一个大批量生产项目。它不像我对12F有一个“反感”,而是碰巧我周围有很多10F322。我有一个温度可调的热风枪,但我从来没有用没有销钉的芯片工作。Ii并不可怕,但我更喜欢看到引脚的小芯片,我可以用焊枪去焊,如果需要的话,一个小的。我不喜欢热空气_东西“,即使偶尔使用热空气。我认为我可以适应所有的东西,整个代码,甚至在C中,10F322里面。也许只有Bang-Band将是ASM。你能告诉我更多关于“没有错误状态检测和恢复”的信息吗?你有一些与代码示例的链接来理解后面的想法吗?关于去弹出,我认为在下一个编码器的数据表中提出的RC过滤器足够好:页面右下角的Bourns PEC11L页面2:http://www.mouser.com/ds/2/54/PEC11L-74340.pdfBourns PEL12T页面3:http://www.mouser.com/ds/2/54/PEL12T-48721。编码器的每个引脚2个电阻10K和1个电容10NF。看起来元件太多了,但是我认为需要一个好的外部无源RC滤波器。如果你有其他的建议,也许要减少元件或者改变它们的值,请提供它们。我不想使用其他有源解决方案去弹出像其他IC电路,即使它们是好的。例如,S-R锁存、触发施密特和其他使用反相器或OA的技术。我发现的关于去弹出包括软件去弹出的一些最好的页面是:http://www.eng.utah.edu/~cs5780/deboun..pdfhttp://drmarty.blogspot.de/2009/05/.-.-debounce-routine-..htmlhttp://ww。w.cc.gatech.edu/~hadi/./cs3220/02-2015fa/doc/debounce.pdfI发现Marty博士提出的软件去抖动和Jack G.Ganssle提出的移位寄存器方法很有趣。但是数字滤波器像模拟RC滤波器,然后是Schmitt Trigger。太多的指令,所以可以快速和容易地实现。你倾向于哪一个?那么我应该放弃外部RC滤波器吗?如果不是,你建议使用什么组件?
|
|
|
|
|
|
用C语言对它进行编码,并在具有调试能力的标准中档部件上使用带位符的comm,看看是否能将代码大小降低到512个字。如果可以,试着去压缩软件去抖动。如果不行,试试汇编程序。只有当你已经有了合适的工作代码时,才把它移植到PIC10F322。如果你无法在可用的FLASH中安装软件去绑定,那么对于外部RC去绑定的最终需求就否定了SOT23-6封装相对于具有足够c的简单手工焊接的SOIC-8封装PIC12F1xxxx的所有优势。ODE空间用于处理软件中的去抖动。此外,RC去弹出*REQUIRES*施密特触发器输入以防止由于慢转变上的噪声导致的多个故障,并且PIC10F322只有一个可访问的施密特触发器输入(通过CLC),您可以轮询级别,因此需要至少一个SOT23芯片来添加外部施密特。T触发器。
|
|
|
|
|
|
我突然想到要使用10F322的核心独立外围设备,特别是配置成S-R的CLC,但是我意识到编码器的每个引脚都需要两个PIC,所以很明显我需要4个引脚和2个CLC,意思是2x10F322,所以我放弃了。没有RC过滤器,至少在开始时,将自己限制在尽可能低的组件上。您能告诉我您想说_没有错误状态检测和恢复”吗?你有一些与代码示例的链接来理解后面的想法吗?你有一些好代码的例子,你认为编码器应该如何正确读取?
|
|
|
|
|
|
具有正交对输出的编码器应该具有在其输出与另一个输出之间在稳定电平上交替的转换。如果使用机械编码器,则接触弹跳、污垢或磨损+采样定时的坏运气可能导致两个编码器输出明显同时发生变化,这将是非法的状态转换。处理这种现象的过度简化的策略将简单地忽略无效的转换,但是如果编码器高速旋转或磨损,则会导致抖动甚至部分反转。更好的策略是跟踪最近的移动方向和速率,以确定在下一个合法状态转换中可能丢失了多少计数以及丢失的方向,并尝试补偿直到达到错误阈值,然后指示错误。R代码在那里-寻找代码从一个定时器中断调查输入,并使用一个FSM来跟踪它们,状态向量由两个LSB中的(DeBACK)输入和输入两个比特的上一个值组成,如果在C中,一个完全实现的Switch()语句带有实例所有合法的和非法的转变。
|
|
|
|
|
|
总是为了迎接挑战,我今天晚上写了一些代码。通用有线到Vss,采用芯片的弱上拉功能,采用中断控制下的软件UART,输出到RA2上的9600波特TTL,不需要RC网络,利用了设备的切换中断和弱上拉功能,不需要外部上拉。关键是IOC将检测上升或下降的过渡,并且这些转换可以根据需求被禁用。这意味着可以避免中断泛洪,只允许将来中断的有效转换。惟一的外部组件是MCLR上的10k上拉,但如果您对配置位进行处理,甚至可以避免这种情况。我使用AC244045 ICD头来调试它。我确信它可以改进,这是今晚三个小时工作的结果,但是它工作得很好。
|
|
|
|
|
|
嗨,两个CLC单元可以很好地用于旋转方向检测或去抖动。这些单元具有各种配置,如JK触发器或RS(旋转方向检测)它们也可以用作基本的NAND门或RS触发器(去抖动)
|
|
|
|
|
|
在10F322上只有一个CLC。
|
|
|
|
|
|
嗨,对不起,你是正确的PIC10F322只有一个CLC。我最近使用PIC16F18313,它也有8个引脚,但2个CLC和更多的外围设备;
|
|
|
|
|
|
那些新的16F18XXX设备太棒了!
|
|
|
|
|
|
霍华德的代码看起来很值得一试。希望主PIC的UART支持自动波特率检测,以应付10F322的较差振荡器容限。
|
|
|
|
|
|
Howard LongThank,非常感谢你花时间写这段代码。我会试着在接下来的几天里测试你的代码,然后分析它。你试着直接与PC或者更大的PIC通信吗?如果它是一个更大的图片,你是什么类型的,你是如何启动PICS之间的通信协议的?@I an.M当你给出关于_无错误状态检测和恢复的解释时,我认为它们总体上是好的,并且如果编码器正在读取轴、转子、高速的东西和每个计数很重要,我就应该处理这些事情。这通常是一个电位器的替代品,调整一个值,不管是速度还是声音或者别的什么。或者用它代替2或4个开关作为菜单中的导航设备。在这种条件下,测量速度最大为每秒100个凹痕,两次转换之间为2ms,那么我看没有必要考虑_没有错误状态检测和恢复”。EUT的ED,但没有别的。到底什么会出错?导航有延迟或在某个应用中的速度/音量的设置是用延迟来完成的,就像跳过一些凹痕一样。没有大的损失。然后我们知道我们需要修正,或者更好的去抖动或更高的UART速度,或者两者兼而有之。但是速度很慢,我们用手转动,我们用眼睛看到结果作为反馈。在最坏的情况下,你只是有那种不正常工作的感觉,而且会跳过凹痕。这是可以纠正的。我不认为我们真的需要“错误状态检测和恢复”。你真的怎么想?关于UART通信。关于小PIC和大PIC的整个故事,如果大PIC在与小PIC通信期间读取计数器的速度比大PIC自己处理编码器和如果没有由于在应用程序中直接转动编码器,在取计数器时可见/可检测到的延迟。以一种有趣的方式我看到:大PIC是一个成年人,一个忙于日常工作的先生。他是大先生。小PIC是一个四处张望,想帮助大先生的孩子。当孩子看到新事物时,很兴奋,想马上告诉大先生。然后是拉大先生的夹克或袖子,大先生停下来注意孩子。D说:“我想告诉你一些事情。我有一些有趣的消息。如果由于某些原因,这个孩子说话太慢了,而且要花很长时间来讲这个消息,那么Big先生会说:我是一个有很多事情要做的忙人,如果你不能说得快又能理解,那么我必须放弃你的服务,我可以用我的话通知你。你只是无聊。这有点无情,但是比格先生是对的。然后比格先生又告诉了一个条件:孩子,我不能经常来问你:你有什么消息要告诉我吗?我不能打断我的日常工作很多次。我需要你做的是:当你听到一些有价值的消息,然后你打电话给我,然后我可以打断我的任务,我给你注意,然后你说话清晰,尽可能快,然后我们每个人回到他的生意。听起来有点像奴隶制,没有任何人情味,但却是一种有效的方式。做这项工作。根据我们的情况:-10F322在读取编码器时完成它的工作。-当编码器计数器有一个新值时,请求更大的PIC注意,并通过UART发送数据。在大PIC中的UART应该使用中断来接收新数据。-在solvi中有两种方法针对10F322内置振荡器容限低的波特率问题:在异步UART RS232Or的情况下,我们使用USART,可能使用I2C,或者仍然使用RS232,但是我们放弃内部时钟16MHz,使用e.XTRONEL时钟,基于水晶更稳定,来自更大的PIC。你觉得怎么样?在编写任何代码之前,我试图理解并阐明我所要做的原则。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
503 浏览 0 评论
5812 浏览 9 评论
2350 浏览 8 评论
2237 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3544 浏览 3 评论
1159浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1121浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
888浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
503浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-13 22:07 , Processed in 1.084696 second(s), Total 106, Slave 89 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1130