本帖最后由 Featheryuyuyu 于 2019-12-2 00:44 編輯
小白上路,希望各位大佬能指教。 感激不盡
以下是程序:
//**************************************************************************//
// 程序名稱:直流電機測試程序
// 功能描述:直流電機正轉2秒,反轉2秒,自動加速正轉,自動減速反轉,依次循環
// 單片機: AT89S52,外接12M晶振
// 硬件連接:P1.0----IN1
// P1.1----IN2
// P1.2----ENA
// 直流電機兩端分別接OUT1和OUT2,
// 電機驅動電壓根據所接電機而定,驅動板芯片邏輯電壓為+5V
//**************************************************************************//
#include<reg52.h>
sbit IN1=P1^0;
sbit IN2=P1^1;
sbit ENA=P1^2;
void delay(unsigned int z);
void delay_us(unsigned int aa);
/*******************主函數**************************/
void main()
{
while(1)
{
unsigned int i,cycle=0,T=2048;
IN1=1; //正轉
IN2=0;
for(i=0;i<200;i++)
{
delay(10);//PWM占空比為50%,修改延時調整PWM脈沖
ENA=~ENA;
}
IN1=0; //反轉
IN2=1;
for(i=0;i<100;i++)
{
delay(20);//PWM占空比為50%,修改延時調整PWM脈沖
ENA=~ENA;
}
IN1=1; //自動加速正轉
IN2=0;
while(cycle!=T)
{ ENA=1;
delay_us(cycle++);
ENA=0;
delay_us(T-cycle);
}
IN1=0; //自動減速反轉
IN2=1;
while(cycle!=T)
{ ENA=1;
delay_us(cycle++);
ENA=0;
delay_us(T-cycle);
}
}
}
/******************z秒延時函數*************************/
void delay(unsigned int z)
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/****************微妙延時******************************/
void delay_us(unsigned int aa)
{
while(aa--);
}
///////////////各位大佬,教教我吧。我試著改過幾次,電機都只能響不能轉,零件都是好的,我試過直接把12v的電壓加在12v的電機上,這樣就可以運轉。程序不用pwn,也只響不轉,我真的想不明白。最好詳細點指明改哪兒,怎么改。謝謝各位大佬了!
|