首先感谢上次发贴求助中回复的大侠cjm82,经过反复接线和研究程序,终于解决了L293D+74hc595驱动电机正反转的问题,这里把解决时遇到的问题和方法理一下:1、驱动电机正反转的顺序: 通过单片机89C52 IO口向74hc595发送正反转的数据 正转0x08(0001 1000) 反转0x06(0000 0110)----------74hc595接收数据后输出-----------L293D接收到数据-------驱动电机正反转
2、根据顺序 首选解决单片机是否成功发送数据给74hc595,595是否成功将数据输出,这里搞了一个下午,74hc595一直未成功输出,Q0-Q7全是高电平,经过换了一组单片机的IO口 将原来的P1^0-3换成了P3^4.6.5 72hc595成功输出,我也不知道为什么这样 请大家指点
3、L293D接收到数据后电机还是不转 经过大侠cjm82的指点,将两个PWM2(AB)接入单片机IO口电机不转,都直接接入5v vcc 电机就工作了 正反都能控制,这里只能控制正反转,而且电压还有点低,也不能调速,这个再继续学习,希望大家发点教程。
以下是程序和接线图: 72hc595 及 L293D 电路图见上一个贴
#include <REGX52.H>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit SER=P3^4;
sbit SCK=P3^6;
sbit RCK=P3^5;
sbit PWM2A=P1^3; //未使用 接上不转
sbit PWM2B=P1^4; //未使用 接上不转
void HC595SendData(unsigned char SendVal)//发一字节
{
unsigned char i;
for(;i<8;i++)
{
SER = SendVal>>7;
SendVal= SendVal<<1;
SCK = 1;
_nop_();
_nop_();
SCK = 0;
RCK=1;
_nop_();
_nop_();
RCK=0;
}
} void main()
{
//PWM2A=1;
//PWM2B=1;
HC595SendData(0x18);//0001 0100 正转
//HC595SendData(0x06);//0000 0110 反转
while(1);
}
|