stm32通过步进电机驱动器控制步进电机,IO口纹波非常严重,求助
背景:STM32通过IO口控制步进电机驱动器(成品)来实现对步进电机的控制(步进电机为57的)
有两个限位开关,分别接在两个IO口上,IO口配置成上拉输入,到达限定位置后,开关动作,IO口与地相连,一直读IO口就可以把电机停掉
问题是:
1.还没有到位置,电机就停了,原因是从IDR寄存器读的值为0了,用示波器观察发现步进电机转的过程中两个IO口的纹波非常严重
2.把两个IO口设置成浮动输入,然后接上拉电阻6.2K到3.3V,纹波小了好多,还是偶尔会出问题
3.电源纹波和地的纹波都没有IO口的严重,是否是步进电机的大电流影响的?
请问有没有遇到类似问题的。麻烦了 你的限位这样使用啊?
一般都是接光耦隔离了再用。 是不是限位开关本身的纹波就很严重? 滤波,再加定时器定时扫描,软件滤波:)
做输入还是用光耦隔离下吧。 学习下PLC输入口的做法,会有很大帮助的. 限位开关要设计成:没有到位的时候是低电平(即接地),到位后顶到后变成高电平。(一般限位开关都有3个引脚的,常开和常闭。)
没有到位的时候设计成低电平,可以保证单片机的输入IO不被干扰拉成高电平,毕竟IO已经被直接拉到地了,干扰还没有那么大的本事把GND拉高。
当然,作为输入检测的,最好加一级RC低通滤波。而且,输入输出如果有电源隔离、光耦隔离,那是更好。 顶5楼。这么做还能多个保障:在开关坏(接触不良)时停机。 学习 我遇到过这个问题。
半年前吧,用FPGA跑步进电机,也有两个限位开关。由于受到电机发射的电磁波干扰,限位开关的输出电平是有尖峰毛刺的。如果用中断的话,必然会让CPU误以为信号来了。
我在FPGA上的解决办法是写了一个开光防抖模块串在IO再接到CPU上。就是信号来了,等一定时间再检测(比如1us),如果还是这个值的话就放这个信号过去。这个方法很好用,能够对付大部分尖峰。我还用这个到霍尔传感器、旋转编码器上,效果很好。STM32的话类似,除了时序需要考虑外,不能让电机慢下来吧,OTL。
另外我昨天和今天在折腾直流电机,使用光耦隔离了IO来驱动三极管然后是继电器,但是用示波器依然能够看到非常夸张的尖峰,USB BLASTER也一直掉线。这个干扰是从空中传播过来的,根本不是加个光耦就能解决的。最后我在电机外壳和GND之间加了一个电容,把电机外壳高频接地,形成一个屏蔽罩,干扰就大幅降低,不足以让我手里的系统出问题了。
我对这个不是很懂,不是这个专业出身,但从实际体会上来看,很可能是步进电机或者它的驱动器来换电流方向的时候发出的电磁波让限位开关的输出抖了。LZ可以考虑一下屏蔽或者IO消抖的相关办法 谢谢大家,暂时的解决办法是按AVR猎手教的来做的,限位开关按下后是高电平,这样纹波就影响不到操作了
也找到了纹波的原因,是因为
1.步进电机驱动器通电对电路有影响,
2.连接IO口和限位的线的问题,换一根短线干扰小很多,所以IO口输入确实要加个缓冲或者隔离什么的
页:
[1]