步进电机驱动详解
使用l298n模块驱动步进电机效果演示步进电机工作原理l298n模块工作原理编写程序下载以及接线效果演示最近在使用步进电机的时候,发现细分驱动器太大了,于是就想找个小一点的驱动来驱动步进电机,于是l298n模块就符合我的要求了,它不仅小而且还带有两路大功率电机的输出,把他接到步进电机的四相刚刚好!按照惯例,先上效果图可以看出,我能够精确控制步进电机旋转360度以及稳定速度旋转。下面我来给出教程啦步
使用l298n模块驱动步进电机
效果演示
最近在使用步进电机的时候,发现细分驱动器太大了,而且只是会使用细分驱动器的话并不能代表你会用步进电机了,于是就想找个小一点的驱动自己编写代码驱动步进电机,于是l298n模块就符合我的要求了,它不仅小而且还带有两路大功率电机的输出,把他接到步进电机的四相刚刚好!
按照惯例,先上效果图
可以看出,我能够精确控制步进电机旋转360度以及稳定速度旋转。下面我来给出教程啦
步进电机工作原理
不知道工作原理的话是写不出驱动程序的,在这里我简单说说步进电机通过l298n的工作原理
如图所示分别代表步进电机的四根线A+ A- B+ B- 。初中物理应该学过,通电导线会产生磁场,所以我们只要改变图中所示电流方向就可以得到不同方向的磁场,图示线圈即为步进电机的定子。
接下来就是图示所示的运行了,因为我们改变了电流方向,即不断改变定子的磁场,根据异极相吸的道理,转子就会跟随着变化的磁场而转动,这就是步进电机旋转的原理。然后我们怎么控制他的角度呢?
如图所示,我们只要控制好A+ A- B+ B-的高低电平就可以控制步进电机旋转特定的角并停下,要是无限循环就会一直匀速转动啦。对应的真值表如下
在这里肯定有很多小伙伴有疑问了,你这里不是8拍转一圈吗?那你的步进值不是360/8=45度吗?为什么说电机的步进值是1.8度那么小呢?
这里我就要科普一下了,上面是步进电机的实现原理,现实的步进电机是比较复杂的,因为转子的周围还有很多小齿,比如1.8步进值的电机的话转子齿为50,所以公式是360/50/8=0.9为半拍步进值。360/50/4=1.8才是步进值
l298n模块工作原理
我们知道,单片机的io口虽然可以输出pwm波,但是他不能带动大功率的东西比如电机,而且电平也只有3.3v。于是乎我们就需要一个功率放大的模块比如l298n。它能够通过单片机的控制而产生方向与大小可变的电流电压输出,可以给步进电机的四相产生相应的脉冲。
IN1和IN2分别接入单片机的两个pwm输出脚。通过占空比来控制输出的电压大小,比如说l298n接入12v电源,我IN1输入50%占空比的pwm波,IN0输入电平为0,则输出口A+ A-产生正6v的电压。因为这个模块有两路,于是我们便可以输出步进电机所需的4种电平来驱动,这就是驱动原理
编写程序下载以及接线
我选用了TIM1的1.2通道和TIM的1.2通道分别接l298n的pwm1.pwm2.pwm3.pwm4
我们就初始化相应的引脚和时钟,因为是占空比控制所以频率无所谓,这里我选用了7.5khz,开发板时钟源是240M
不会初始化定时器使用io口输出电平的可以去网上搜索学习下
接下来就是重要部分的模拟步进电机的8拍运行了
我们确定好一个占空比之后,引脚输出pwm波视为逻辑1,不输出pwm波视为逻辑0。于是我们就可以这样实现步进电机的逻辑输入了
这里的节拍输入间隔我选择了1000us,因为经过实测这样比较平滑,不会出现剧烈抖动或者失步。
然后就是主函数了。我们怎样实现某个角度的控制呢?
因为输入一个半拍脉冲就会旋转0.9度,根据这个就可以精确计算所需要的角度了,也可以进行死循环使得电机匀速运动。旋转完成之后记得失能电机,不然一直停着不转电能无法被正确释放会产生不好的后果。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)