首先感謝上次發貼求助中回復的大俠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);
}
|