»ùÓÚµ¥Æ¬»úµÄPWMµ÷ËÙϵͳÉè¼Æ±ÏÒµÉè¼ÆÂÛÎÄ ÏÂÔØ±¾ÎÄ

ÄÚÈÝ·¢²¼¸üÐÂʱ¼ä : 2025/8/22 7:53:45ÐÇÆÚÒ» ÏÂÃæÊÇÎÄÕµÄÈ«²¿ÄÚÈÝÇëÈÏÕæÔĶÁ¡£

ºþÄϿƼ¼´óѧ±¾¿ÆÉú±ÏÒµÉè¼Æ£¨ÂÛÎÄ£©

3.1.4 ËÅ·þµç»ú½éÉÜ

ËÅ·þµç¶¯»úÓÖ³ÆÖ´Ðе綯»ú£¬ÔÚ×Ô¶¯¿ØÖÆÏµÍ³ÖУ¬ÓÃ×÷Ö´ÐÐÔª¼þ£¬°ÑËùÊÕµ½µÄµçÐźÅת»»³Éµç¶¯»úÖáÉϵĽÇÎ»ÒÆ»ò½ÇËÙ¶ÈÊä³ö¡£·ÖΪֱÁ÷ºÍ½»Á÷ËÅ·þµç¶¯»úÁ½´óÀ࣬ÆäÖ÷ÒªÌØµãÊÇ£¬µ±ÐźŵçѹΪÁãʱÎÞ×ÔתÏÖÏó£¬×ªËÙËæ×Åת¾ØµÄÔö¼Ó¶øÔÈËÙϽµ[14]¡£

¶¨Ò壺ÔÚËÅ·þϵͳÖпØÖÆ»úеԪ¼þÔËתµÄ·¢¶¯»ú.ÊÇÒ»ÖÖ²¹ÖúÂí´ï¼ä½Ó±äËÙ×°Öᣠ×÷Ó㺿Éʹ¿ØÖÆËÙ¶È,λÖþ«¶È·Ç³£×¼È·¡£½«µçѹÐźÅת»¯Îª×ª¾ØºÍתËÙÒÔÇý¶¯¿ØÖƶÔÏó¡£

·ÖÀֱࣺÁ÷ËÅ·þµç»úºÍ½»Á÷ËÅ·þµç»ú¡£Ö±Á÷ËÅ·þµç»ú·ÖΪÓÐË¢µç»úºÍÎÞË¢µç»úÁ½ÖÖ¡£ÓÐË¢µç»ú³É±¾µÍ£¬½á¹¹¼òµ¥£¬Æô¶¯×ª¾Ø´ó£¬µ÷ËÙ·¶Î§¿í£¬¿ØÖÆÈÝÒ×£¬ÐèҪά»¤£¬µ«Î¬»¤·½±ã£¨»»Ì¼Ë¢£©£¬²úÉúµç´Å¸ÉÈÅ£¬¶Ô»·¾³ÓÐÒªÇó¡£Òò´ËËü¿ÉÒÔÓÃÓڶԳɱ¾Ãô¸ÐµÄÆÕͨ¹¤ÒµºÍÃñÓó¡ºÏ¡£ ÎÞË¢µç»úÌå»ýС£¬ÖØÁ¿Çᣬ³öÁ¦´ó£¬ÏìÓ¦¿ì£¬Ëٶȸߣ¬¹ßÁ¿Ð¡£¬×ª¶¯Æ½»¬£¬Á¦¾ØÎȶ¨¡£¿ØÖƸ´ÔÓ£¬ÈÝÒ×ʵÏÖÖÇÄÜ»¯£¬Æäµç×Ó»»Ï෽ʽÁé»î£¬¿ÉÒÔ·½²¨»»Ïà»òÕýÏÒ²¨»»Ïà¡£µç»úÃâά»¤£¬Ð§Âʺܸߣ¬ÔËÐÐζȵͣ¬µç´Å·øÉäºÜС£¬³¤ÊÙÃü£¬¿ÉÓÃÓÚ¸÷ÖÖ»·¾³¡£

- 12 -

ºþÄϿƼ¼´óѧ±¾¿ÆÉú±ÏÒµÉè¼Æ£¨ÂÛÎÄ£©

3.2 ϵͳÈí¼þÉè¼Æ

3.2.1 ³ÌÐòÁ÷³Ìͼ

ͼ3.4 PWMµ÷ËÙϵͳ³ÌÐòÁ÷³Ìͼ

3.2.2 CÓïÑÔ³ÌÐòÉè¼Æ

/* =======Ö±Á÷µç»úµÄPWMËÙ¶È¿ØÖƳÌÐò======== */ /* ¾§Õñ²ÉÓÃ11.0592M,²úÉúµÄPWMµÄƵÂÊԼΪ91Hz */ #include #include #define uchar unsigned char

- 13 -

ºþÄϿƼ¼´óѧ±¾¿ÆÉú±ÏÒµÉè¼Æ£¨ÂÛÎÄ£©

#define uint unsigned int [15]

sbit en1=P1^0; /* L298µÄEnable A */ sbit s1=P1^2; /* L298µÄInput 1 */ sbit s2=P1^1; /* L298µÄInput 2 */ uchar t=0; /* ÖжϼÆÊýÆ÷ */ uchar m=0; /* µç»úËÙ¶ÈÖµ */ uchar tmp; /* µç»úµ±Ç°ËÙ¶ÈÖµ */ /* speed-µç»úËÙ¶È(-100¡ª100) */ void motor(char speed) {

if(speed>=-100 && speed<=100) {

m=abs(speed); /* È¡Ëٶȵľø¶ÔÖµ */ if(speed<0) /* ËÙ¶ÈֵΪ¸ºÔò·´×ª */ { s1=0; s2=1; }

else /* ²»Îª¸ºÊýÔòÕýת */ { s1=1; s2=0; } } }

void delay(uint j) /* ¼òÒ×ÑÓʱº¯Êý */ {

for(j;j>0;j--); }

void main() { uchar i;

TMOD=0x02; /* É趨T0µÄ¹¤×÷ģʽΪ2 */ TH0=0x9B; /* ×°È붨ʱÆ÷µÄ³õÖµ */ TL0=0x9B;

- 14 -

ºþÄϿƼ¼´óѧ±¾¿ÆÉú±ÏÒµÉè¼Æ£¨ÂÛÎÄ£©

EA=1; /* ¿ªÖÐ¶Ï */

ET0=1; /* ¶¨Ê±Æ÷0ÔÊÐíÖÐ¶Ï */ TR0=1; /* Æô¶¯¶¨Ê±Æ÷0 */ while(1) /* µç»úʵ¼Ê¿ØÖÆÑÝʾ */ {

for(i=0;i<=100;i=i++) /* Õýת¼ÓËÙ */ { motor(i); delay(5000); }

for(i=100;i>0;i--) /* Õýת¼õËÙ */ { motor(i); delay(5000); }

for(i=0;i<=100;i++) /* ·´×ª¼ÓËÙ */ { motor(-i); delay(5000); }

for(i=100;i>0;i--) /* ·´×ª¼õËÙ */ { motor(-i); delay(5000); } } }

void timer0() interrupt 1 /* T0ÖжϷþÎñ³ÌÐò */ {

if(t==0) /* 1¸öPWMÖÜÆÚÍê³Éºó²Å»á½ÓÊÜÐÂÊýÖµ */ { tmp=m; }

if(t

- 15 -

ºþÄϿƼ¼´óѧ±¾¿ÆÉú±ÏÒµÉè¼Æ£¨ÂÛÎÄ£©

if(t>=100) t=0; /* 1¸öPWMÐźÅÓÉ100´ÎÖжϲúÉú */ }

3.3 PWMµ÷ËÙϵͳ·ÂÕæ

±¾ÎIJÉÓÃCÓïÑÔ±à³Ì£¬ÀûÓÃKeil±àÒë³É¹¦ºóÉú³ÉHexÎļþ£¬µ¼Èëµ½ProteusµÄ¹¤³ÌÖС£·ÂÕæÊ±£¬ÔÚAT89C51ÉϼÓÔØHexÎļþ£¬¼´¿ÉʵÏÖ·ÂÕæ¡£

3.3.1 ϵͳ·ÂÕæµç·ͼ

ͼ3.5 PWMµ÷ËÙϵͳ·ÂÕæÍ¼

3.3.2 µçѹÊä³ö²¨ÐÎ

ÏÂÃæËùʾͼ3.6ÖÁͼ3.13ÊÇϵͳ·ÂÕæÊ±´ÓL298µÄOUT1Òý½ÅµÃ³öµÄ²¨ÐÎͼ¡£

ͼ3.6 µçѹÊä³ö²¨ÐΣ¨1£©

ͼ3.7 µçѹÊä³ö²¨ÐΣ¨2£©

- 16 -