直流电机驱动
目的
在运动控制技术中,DC电机的应用很多,本教程将教大家如何用一个电位器来控制DC电机的转速。改变电位器的输出电压值,通过AD转换后,PWM输出给电机。
设备
- Microduino-CoreSTM32
- 其他硬件设备
- 面包板跳线 一盒
- 面包板 一块
- 3线电位器 一个
- 直流电机 一个
- S8050 NPN晶体管 一个
- IN4007整流二极管 一个
- USB数据连接线 一根
原理
PWM
PWM(脉冲宽度调制)是按一个固定的频率来接通和断开电源,并且根据需要改变一个周期内“接通”和“断开”时间的长短。通过改变直流电机电枢上电压的“占空比”来达到改变平均电压大小的目的,从而来控制电动机的转速。也正因为如此,PWM又被称为“开关驱动装置”。
改变占空比的方法有:
- 定宽调频法:即保持t1不变,只改变t2,这样使周期(或频率)也 随之改变。
- 调宽调频法:即保持t2不变,而改变t1,这样使周期(或频率)也 随之改变。
- 定频调宽法:保持T(或频率)不变,而同时改变t1和t2。
本教程采用定频调宽法。
PWM调速设计方法:
- 软件延时法:首先求出占空比D,再根据周期T分别给电机通电N 个单位时间(t0),即N =t1 /t0,然后再断电N个单位时间,即N =t2 /t0。
- 计数法:首先求出单位延时个数N,作为给定值放在存储单元,对通电单位时间(t0)的次数计数,然后与通电给定值比较;同理,对断电单位时间计数,然后与断电给定值比较。
原理图
在连接NPN晶体管的时候,基极B与2.2K电阻相连接在Microduino-CoreSTM32的D4引脚,发射极E连接地线,集电极C连接电机并加一整流二极管防止电感带来的影响,Microduino-CoreSTM32得A0(14)引脚用来读取电位器的电压值。 原理图如下所示:
程序
//PWM pin: 0,1,4,11,12,14(A0),15(A1),16(A2),17(A3),18(SDA),19(SCL),20(A6),21(A7)
int potPin=14; // potentiometer connected to analog pin A0(14)
int motorPin=4; //PWM pin 4
int potValue=0;
int motorValue=0;
void setup()
{
pinMode(potPin, INPUT_ANALOG);//sets the potentiometer pin as analog input
pinMode(motorPin,PWM); //sets the motor control pin as PWM
}
void loop()
{
potValue=analogRead(potPin); // read the input pin
motorValue=map(potValue,0,4096,0,65535); // analogRead values go from 0 to 4095,
// pwmWrite values from 0 to 65535
pwmWrite(motorPin,motorValue); //PWM pass motor
SerialUSB.print("potentiometer = " );
SerialUSB.print(potValue);
SerialUSB.print("\t motor = ");
SerialUSB.println(motorValue);
delay(2);
}
通过analogRead()函数读取电位器的电压值并把其转换为对应的数字,用map()函数把对应的数字映射到0-65535范围内对应的值,最后通过pwmWrite()函数输出对应的PWM波。
注意:motorPin的引脚要设为支持PWM输出的引脚,Microduino-CoreSTM32支持PWM输出的引脚有0,1,4,11,12,14(A0),15(A1),16(A2),17(A3),18(SDA),19(SCL),20(A6),21(A7)。
调试
步骤一:把代码复制到IDE中,编译
步骤二:电路连接如下图:
步骤三:运行代码,打开串口监视界面。
步骤四:调整电位器,查看电机转速
结果
扭动电位器,可以调整电机转速,串口见识界面的值也随之变化。