基于DRV8825驱动芯片的步进电机

需要控制步进电机,电机方面主要包括控制运动、加减速、限位。下面介绍一下在电机控制方面的心得,由于对于电机的控制不需要很精确,并且自身能力有限,相比于大牛有很大的差距。
1.需要实现的功能
主要是控制滑块的运动,开始运动时需要加速,当稳定在最高速度时匀速运动,检测到下端限位信号时,开始减速直到停止,然后进行反向加速,匀速,检测到上端限位时停止运动。
加速——匀速——减速——停止——反向——加速——匀速——停止
2.硬件部分
本次电机为两相四线步进电机,两相:电机有两个线圈(绕组),四线:电机有四根线,一般是a+ a- b+ b-。有些电机不会标注出线的极性,其实可以用万用表测,短接的就是同一个绕组,或者短接之后电机转动很费力,也代表是同一个绕组。
驱动
电机的运动需要较大的电流,这取决于电机本身和负载,所以通常需要驱动芯片。而且驱动芯片可以实现许多附加的功能,包括细分、休眠、保护等。本次采用的是drv8825驱动芯片模块。模块的介绍图如图所示:
引脚介绍:
1.enable/:使能引脚,高电平停止工作,低电平正常工作;
2.m0-m2:代表细分,最大可以达到32细分,这部分可以参考datasheet;
3.reset/ 、sleep/:低电平会休眠和复位,因此电机正常工作时,两个引脚接高电平;
4.step:最重要的引脚,通过单片机给这个引脚pwm信号,控制电机运动;
5.dir:0和1控制电机方向;
6.vmot:供电引脚,一般用12-20v就可以了;
7.b2-a1:接电机四根线;
8.fault/:接高电平工作;
光电限位
光电限位采用的反射型,型号为sy1200,感应距离为1-4mm,当没有遮挡时,输出低电平;有遮挡时,代表有光反射回来,输出高电平;测试过程中,发现最好采用白色的平面反射,效果更好。
3.软件部分
软件主要就是通过stm32输出pwm脉冲,脉冲的频率决定了电机的速度。
pwm通过定时器产生,决定频率的主要是arr重装载值,以及psc预分频值。最终输出的pwm频率为72000k/(arr*psc)。
加减速
由于需要做到加减速,也就意味着pwm的频率是改变的,因此arr的值需要改变。参考网上对于加减速的一些方法:主要有t型加减速和s型加减速,实现方法有公式法或者查表法。由于公式法比较麻烦,就直接采用了查表法。所以根据需要的频率,计算出不同频率下的arr值,写到数组里,就可以实现频率的改变。不过这种方法下,频率的改变是根据时间做线性或者s型变化,这种方法对吗?还是根据步数来改变?
s型加减速:
t型加速就是匀加速,固定加速度。s型加速需要根据公式计算,详细说明如下:
其中fcurrent代表某个点的频率:fmin代表最小频率;fmax代表最大频率;flexible为s曲线区间系数,越大代表压缩的最厉害,中间(x坐标0点周围)加速度越大;越小越接近匀加速。理想的s曲线的取值为4-6;num:频率点/2;
例如想要从1khz加速到40khz,中间经过40个点,fmin=1khz,fmax=40khz,num=40/2=20,最后通过excel计算出各个频率值,可以发现在末端的加速是非常缓慢的,中间加速比较大。问题就是,初始速度并不是1khz了,他取决于系数的取值,取6时,初始速度就越小。
软件中实现:
采用定时器3输出pwm脉冲,定时器2用于计数中断(更精确的控制可以通过定时器2来计算出给出多少个脉冲,也就是电机运动的步数,那样的话就可以精确控制电机运动,形成开环反馈)
// 加减速实现部分void tim2_irqhandler(void) //
{
if(tim_getitstatus(tim2, tim_it_update) != reset) //
{
tim_clearitpendingbit(tim2, tim_it_update); //
time++;
if(time》=35)//
{
time=0; //每x个周期进入定时后,对time进行清零,然后重新进行累加
if(jiasu==1) //加速状态
{
n=n+1;
fre=freq[n];
}
if(jiasu==0) //减速状态,检测到下端的限位后进行减速,此时的n应该等于加速之后的最大值,也就是频率最大的时候,接下来进行递减,速度降低
{
n=n-1;
fre=freq[n];
}
if(n》=38)//
{
n=38;
}
if(n《=0) //根据前面速度递减,当减到第一个数时,速度已经降到了1k,可以让电机开始停止然后转向
{
gpio_setbits(gpioc,gpio_pin_6); // 拉高步进电机的enable,停止运动
dir0=!dir0; //转向
delay_ms(100);
n=0;
fre=freq[n];
jiasu=1;
gpio_resetbits(gpioc,gpio_pin_6); // 转向之后拉低电机的enable,开始运动
}
tim3_pwm_init(fre,9);
tim_setcompare4(tim3,fre/2);// 改变tim3的输出频率,从而改变电机的速度
}
}
}

直流电阻测试仪有哪些特点及注意事项
线束加工生产过程中有哪些是需要我们注意的
鸿蒙推送时间 华为鸿蒙推送时间
无线充电,那些你不知道的伤害
黑科技!Santa Cruz计划用按钮 摇杆替换当前控制器触控板
基于DRV8825驱动芯片的步进电机
如何自制简单的夹具来测量电容器的特征参数
院士谈共融机器人产业群的创新发展和跨越发展
PLC与多台变频器的MODBUS/RTU通信方案
ZYNQ开发案例:GPIO的结构体系及使用案例
Passware Kit 2023 v2 现已发布
这场IPv6大会上我读懂了中国式创新 2021中国IPv6创新发展大会亮点多
如何吧手机变成服务器
MySQL端口可以从MySQL数据库中存储和检索数据
中国光伏陷利润、出口、资金链三大困境分析
3D打印面具成功解锁iPhone X
大众ID Buzz电动汽车将推迟到2023年在美国上市
GSM测试仪 HP8922M HP8922M HP8922M
如何选择图像传感器的镜头
食品安全综合检测仪的生产厂家如何选择?