pic单片机控制直流电机.docx
《pic单片机控制直流电机.docx》由会员分享,可在线阅读,更多相关《pic单片机控制直流电机.docx(15页珍藏版)》请在冰豆网上搜索。
pic单片机控制直流电机
目录
1总体设计框架3
2硬件电路设计4
2.1芯片介绍4
2.2驱动电路9
2.3按键控制电路10
3程序编写10
3.1工作原理10
3.2程序书写过程12
参考资料16
直流电机驱动
Abstract摘要:
本文主要内容是利用PIC18F452单片机来控制直流电机,通过L293NE来驱动电机,通过按键来使其正转,反转。
Keywords关键词:
直流电机,PWM,L293NE
1
总体设计框架
硬件电路利用驱动芯片L293D来驱动直流电机,按键则是单独引出。
如图1所示。
软件则是C语言编程。
图1硬件设计框
2硬件电路设计
2.1芯片介绍
首先,总体说明硬件电路设计,如图2原理图,图3PCB图以及图4板子的图所示。
三个输入信号,如图分别为RD4,RD5,RD6连上光耦的2脚,然后通过光耦的4脚引入L293D的使能引脚(12EN)以及输入引脚(1A,2A),然后L293D的输出引脚(1Y,2Y)通过H-桥型控制电路与直流电机连接。
图2直流电机控制部分原理图
图3直流电机控制部分PCB图
图4成品板
其中红线圈表示直流电机控制部分。
下面详细介绍各个芯片。
1、PIC18F452
PIC18F452与PIC18F4580外部端口以及内部存储器是相同的。
上图的U2。
2、光耦P521
光耦主要的作用是保护单片机。
光耦的结构如图5所示。
图5光耦P521结构
在PCB中(如图6所示),即U7,U9,U10三个光耦,左下方方形孔为1引脚,按逆时针方向,依次为2,3,4引脚。
光耦的1脚通过电阻与电源连接,2脚为输入引脚,3脚与地相连,4脚为输出引脚。
经试验测得,则当1脚输入高电平时,4脚也输出高电平。
则当1脚输入低电平时,4脚输出低电平。
图6光耦外形图
3、电阻
一共用到7个大小为470Ω的电阻(分别为R16,R17,R18,R19,R20,R21,R22)和3个大小为1kΩ(分别为R23,R24,R25)。
4、按键
按键电路也就是步进电机驱动实验的电路。
在此,再介绍一次。
所用按键为标准B3F—1000系列,结构图如图7所示。
PCB板上SW1,SW2,SW3,SW4,SW5为按键,其中SW1为复位开关,其他的为控制作用的按键。
按键的机理以SW5为例阐述,其他类同。
按键的3引脚一是直接分别与RA1,RA2,RA3,RA4相连二是通过四个470Ω的电阻与电源相连。
按键1引脚分别与地相连。
当不按按键的时候,RA4通过R19电阻与+5V电源相连,即此时RA4的输入为高电平,即1。
当按键SW5按下时,RA4通过按键的连接与地相连,此时RA4的输入为低电平,即0。
通过SW5按键控制RA4的高低电平。
程序可监控RA4的状态,来控制电机。
发现RA4高电平则正转,发现RA4低电平则反转。
图7按键图
如PCB板所示,按键右下方方形孔为1引脚,左上方为3引脚。
此按键只用到1与3引脚。
5、IN4007
整流二极管(如图8所示),通常它包含一个PN结,有阳极和阴极两端。
P区的载流子是空穴,N区的载流子是电子。
外加使P区相对N区为正的电压时,能通过大电流,具有低的电压降(典型值0.7V),称为正向导通状态。
若加相反的电压,则反向电流很小(反向漏电流),称为反向阻断状态。
整流二极管具有明显的单向导电性。
有白色线圈的为负极。
四个IN4007二极管,组成桥式电路。
如图9所示。
图8IN4007
图9桥式电路
经测定,IN4007在正向导通时,其电压为0.59V,反向截止时无电压。
这里的整流二极管主要起保护的作用。
当有个过冲信号,如电压过高,此时D2打开,避免高电压冲击直流电机,将其损坏,信号流向电源,而不是电机。
若是电压过低,D4打开,避免低电压冲击直流电机。
信号此时流向了地。
6.L293D
L293D采用16引脚DIP封装(如图10所示),其内部集成了双极型H-桥电路。
这种双极型脉冲调宽方式具有很多优点,如电流连续;电机可四角限运行;电机停止时有微振电流,起到“动力润滑”作用,消除正反向时的静摩擦死区:
低速平稳性好等。
L293D通过内部逻辑生成使能信号。
H-桥电路的输入量可以用来设置马达转动方向,使能信号可以用于脉宽调整(PWM)。
电机需要3个控制信号12EN、1A、2A,其中12EN是使能信号,1A、2A为电机转动方向控制信号,1A、2A分别为1,0时,电机正转,反之,电机反转。
选用一路PWM连接12EN引脚,通过调整PWM的占空比可以调整电机的转速。
图10L293D引脚图
12EN高电平有效,HEATSINKANDGROUND接地,VCC1与VCC2接电源。
1A输入高电平则1Y输出高电平。
1A输入低电平则1Y输出低电平。
2A2Y,3A3Y,4A4Y关系类同。
2.2驱动电路
光耦1脚通过四个470Ω的电阻分别与电源连接。
三个光耦的2脚(DC1,DC2,DC3)分别于RD4,RD5,RD6连接。
光耦的4脚与电源连接。
光耦的3脚分别通过三个1KΩ与驱动芯片L293NE连接。
然后驱动芯片L293NE的两个输出引脚引出通过桥式整流电路连上直流电机。
如图11所示。
图11驱动电路
2.3按键控制电路
按键的3引脚一是直接分别与RA1,RA2,RA3,RA4相连二是通过四个470Ω的电阻与电源相连。
按键1引脚分别与地相连。
正常状态下,为正转,通过按键SW4来使电机反转。
3程序编写
3.1工作原理
本次实验主要利用L293NE来驱动直流电机。
RA0,RA1,RA2,RA3四个输入信号,通过高低电平控制RD0,RD1,RD2来使直流电机转动。
工程文件请参考“DC_MOTOR”文件夹。
与原厂电路板的连接:
+5V电源由原厂电路板+5V供电。
如图12所示。
自制板J6(左下方)的+5V,GND分别与原厂电路板+5V,GND(右下方)连接。
两个电路板的RD4,RD5,RD6分别相连(使能与两个输入信号接入自制板中),同时,RA4也连起来(按键信号接入自制板中)。
如图13所示。
自制板J2(右上方)的RD4,RD5,RD6分别与原厂电路板的RDPORT(中间靠右一些)的4,5,6连接。
自制板J5的RA4(右下方)与原厂电路板的RAPORT4(中间靠右一些)连接。
直流电机的两个引脚与J7即DCMOTOR连接。
如图14所示。
电机的L,R引脚分别与J7的左(即1),右(即2)引脚相连。
图12输入输出口的连接
图13电源的连接
图14电机的连接
3.2程序书写过程
程序如下:
#include
voiddelay(unsignedintx);
voidmain()
{
TRISD=0;//定义D端口为输出口
TRISA=0Xff;//定义A端口为输出入口
PORTDbits.RD4=0;//使能位初始化为0
PORTDbits.RD5=0;//电机的左引脚控制信号初始化为0
PORTDbits.RD6=0;//电机的右引脚控制信号初始化为0
while
(1)
{
PORTDbits.RD4=1;//使能位设置为1,使能电机,使其工作
if(PORTAbits.RA4==0)
{
delay(10);
if(PORTAbits.RA4==0)
{
PORTDbits.RD5=1;
PORTDbits.RD6=0;
}
}
else
{
PORTDbits.RD5=0;
PORTDbits.RD6=1;
}
}
}
voiddelay(unsignedintx)
{
unsignedinta,b;
for(a=x;a>0;a--)
for(b=54;b>0;b--);
}
该程序主要包括初始化模块,控制模块,以及延时模块。
1、初始化模块
主要是端口初始化。
输入端RA的所有端口设置为高电平即1,为输入状态。
RD的所有端口设为低电平即0,为输出状态。
RD4,RD5,RD6初始化为0,清空状态,以便后面的赋值。
程序如下所示:
TRISD=0;//定义D端口为输出口
TRISA=0Xff;//定义AD端口为输出入口
PORTDbits.RD4=0;//使能位初始化为0
PORTDbits.RD5=0;//电机的左引脚控制信号初始化为0
PORTDbits.RD6=0;//电机的右引脚控制信号初始化为0
2、控制模块
控制模块主要是扫描键盘的变化,根据相应键盘的变化,来使直流电机转动。
如果SW5没有按下,正转。
如果SW5按下,则反转。
while
(1)表示一直循环下去。
程序如下所示:
while
(1)
{
PORTDbits.RD4=1;//使能位设置为1,使能电机,使其工作
if(PORTAbits.RA4==0)若SW5按键按下则反转
{
delay(10);
if(PORTAbits.RA4==0)
{
PORTDbits.RD5=1;
PORTDbits.RD6=0;
}
}
elseSW5按键没有按下则正转
{
PORTDbits.RD5=0;
PORTDbits.RD6=1;
}
}
其中,两个if语句判断SW5是否有按键按下,有防抖动的作用。
如果确实PORTAbits.RA4==0,则SW5也就被按下,则PORTDbits.RD5=1;PORTDbits.RD6=0;则电机左引脚高电平,右引脚低电平,反转。
反之,即没有按键按下,则电机左引脚低电平,右引脚高电平,正转。
3、延时模块
标准的延时程序,通过循环语句来延时。
此程序对应4M晶振时,unsignedintx中输入的数字,即为延时的毫秒数。
voiddelay(unsignedintx)
{
unsignedinta,b;
for(a=x;a>0;a--)
for(b=54;b>0;b--);
}
参考资料
以下是本文中的主要参考资料清单:
[1]MuhammadAliMazidi,RolinD.McKinlay,DannyCausey.李中华,张雨浓,陈卓怡等译.PIC技术宝典[M].北京人民邮电出版社,2008.
[2]MykePredko著.胡光华译.PIC微控制器基础与实践[M].北京:
科学出版社,