STM32 电机教程 4 - 直流有刷电机闭环电流控制

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/zhanglifu3601881/article/details/102769936

 

前言

      有刷电机是大家最早接触的一类电机,中学时物理课堂上介绍电动机也是以它为模型来展示的。有刷电机的主要结构就是定子+转子+电刷,通过旋转磁场获得转动力矩,从而输出动能。电刷与换向器不断接触摩擦,在转动中起到导电和换相作用。

https://images2018.cnblogs.com/blog/1435508/201808/1435508-20180822191635169-1771943257.gif

有刷电机采用机械换向,磁极不动,线圈旋转。电机工作时,线圈和换向器旋转,磁钢和碳刷不转,线圈电流方向的交替变化是随电机转动的换相器和电刷来完成的。

在有刷电机中,这个过程是将各组线圈的两个电源输入端,依次排成一个环,相互之间用绝缘材料分隔,组成一个像圆柱体的东西,与电机轴连成一体,电源通过两个碳元素做成的小柱子(碳刷),在弹簧压力的作用下,从两个特定的固定位置,压在上面线圈电源输入环状圆柱上的两点,给一组线圈通电。

随着电机转动,不同时刻给不同线圈或同一个线圈的不同的两极通电,使得线圈产生磁场的N-S极与最靠近的永磁铁定子的N-S极有一个适合的角度差,磁场异性相吸、同性相斥,产生力量,推动电机转动。碳电极在线圈接线头上滑动,像刷子在物体表面刷,因此叫碳“刷”。

相互滑动,会摩擦碳刷,造成损耗,需要定期更换碳刷;碳刷与线圈接线头之间通断交替,会发生电火花,产生电磁破,干扰电子设备。

有刷电机采用机械自动换向方式,控制起来特别简单,特别是直流有刷电机,只需在电机电极上通上直流电就可以让其转动起来,本节以下图所示的1718直流有刷电机为例 ,为大家展示如何用NUCLEO-F103RB和X-NUCLEO-IHM07M1 3SH让其实现电流闭环控制!

要实现电流闭环控制,就需要有电流返馈,刚好X-NUCLEO-IHM07M1 3SH板上有电流检测电路,可能通过ADC实现对电机电流的检测。说到闭环控制怎么少得了PID控制,本节将用PID控制器实现电流闭环控制。

http://5b0988e595225.cdn.sohucs.com/images/20171209/baebd11475b34efb85ba74039b46dbfe.png

关于PID控制器的详细知识请大家自行参阅其它资料或书籍,本节就不在这里介绍。

 

示例详解

本节用到ST官方推出的NUCLEO-F103RB和X-NUCLEO-IHM07M1 3SH 开发板。

 

NUCLEO-F103RB对应的大致原理接线图:

X-NUCLEO-IHM07M1 3SH部分原理图:

 

 

    1. 准备操作
      1. X-NUCLEO-IHM07M1 3SH是一款专门用于PMSM(永磁同步)或BLDC(直流无刷 )的电机驱动板(后面的章节将会给大家展示),当然也可以用于驱动直流有刷电机,本节就用它来控制直流有刷电机(1718,电压7-11V,实际使用9.6V),X-NUCLEO-IHM07M1 3SH电机驱动板驱动芯片型号为L6230(详细数据手册可在st官网下载),本节仅用IN1,IN2,和OUT1,OUT2即可!

电机电流检测,本例采用单电阻方式,跳帽端子连接图:

在50%占空时电机电流与彩样电阻两端电压波形图:

 

需要用到的信号

对应MCU引脚

EN1

PC10

IN1

PA8

EN2

PC11

IN2

PA9

Curr_fdbk2

PC1

本节将直接使能EN1及EN2引脚,PA8和PA9配置成定时器1的PWM引脚控, PC1配置为ADC引脚 ,通过PID控制器,调节PWM的占空实现对电机电流的精确控制。

 

      1. 在STM32CubeMX中,有专门的NUCLEO-F103RB工程模板,新建一个Cube工程,芯片型号为st32f103rb:

生成一个简单的工程模板实现了RCC,SYS,USART2接口的配置,同时还实现了LD2(LED)引脚的配置。接下来手动配置TIM1(产生主载波频率为72M / ( 2+1) / ( 999 +1) = 24K的PWM):

开启定时器更新事件中断:

 

配置PC10,PC11为GPIO_OUTPUT模式:

配置ADC,

并开启DMA功能:

生成工程:

 

 

      1. 打开工程,为工程加入事先准备好的pid.c和visualscope.c文件,pid.c,visualscope.c放于工程文件夹中src文件夹下,pid.h,visualscope.h放于工程文件夹中inc文件夹下,pid.c中包含本工程所需用到的PID控制器的实现,visualscope.c 中有本工程所要用到的串口示波器的校验算法:

  

在TIM.C中加入定时器更新中断开启代码:

在adc.c中加入电机平均电流计算代码,(电机电流 = 最近32个ADC采样结果的平均值):

在stm32f1xx_it.c中加入电流闭环实现代码:

在main.c中加入如下代码:

设置工程下载后自动运行:

编译代码,下载程序运行可直以看到电机成功转动起来, 程序中可以修改PidCurrent.Ref,的值来实现电机最大输出电流的不同(或最大输出力的不同)。

上位机打开VisualScope软件,设置好串口波特率和端口号,本机对应的端口号为COM10:

设置好以上参数后就可以让串口示波器RUN起来!

通过串口示波器软件,打印出电流闭环控制中的电参考(红线)和电流反馈(黄线)波形如下图所示,需要注意的在本例的测试程序中电机是空载的,要体现如下图所示的波形,需要给电机加载(可用钳子短时间夹住电机输出端)查看电流波形变化情况:

本节,由上图结果来看,电流闭环控制已成功实现, 有刷电机的速度闭环及位置闭环控制同样可以使用例的框架来实现,只不过在实现对应的闭环控制时需要有额外的外传器去获取电机的速度或位置反馈值。OK,本期实验完成!同时如果大家有什么疑问或是有想了解的其它内容,也欢迎大家留言!!最后喜欢这个公众号的同学们记得加关注了,每天都会有技术干货推出!!

 

 

文中源码及资料下载,关注十三公众号:

在公众号里给十三发送 “下载|STM32 电机教程4” :

 

 

猜你喜欢

转载自blog.csdn.net/zhanglifu3601881/article/details/102769936