ããåçæºæ§å¶PWMç´æµçµæºçç¨åºï¼å
·ä½å¦ä¸ï¼
ããPWMæ§å¶ç´æµçµæºå®ç°ä¸æ¥è¯´åºè¯¥ä¸é¾ï¼æ主è¦æ¯è¦æ±ï¼æ¯å¦å é度ï¼éè¦å¤åè¾¾å°è®¾å®é度ï¼
ããä¸è¬æ¥è®²æâå¼ç¯çæ¥è¡¨æ³âåâéç¯çééå®æ¶é度æ³âï¼
ããâå¼ç¯æ¥è¡¨âï¼åææ¯ç¥éè¦è¾¾å°çé度æ¯åªäºï¼ç¶åå»å¢å ï¼æåå°ï¼PWMçå 空æ¯æ¥çé度æ¯å¦å设å®çä¸è´ï¼ç¶åå°æ¤æ¶çå 空æ¯æ¾å°è¡¨æ ¼ä¸ï¼ä¸æ¬¡éè¦ç¨æ¶ï¼ç´æ¥æ ¹æ®è®¾å®é度æ¥è¡¨æ ¼å°±è¡ï¼è¿ç§æ§å¶æ¹æ³éåäºâè´è½½âä¸åçæ
åµï¼ç¸å¯¹ç®åï¼
ããâéç¯é度ééâï¼å¨ç¡¬ä»¶çµè·¯ä¸è¦æé度ééç³»ç»ï¼éå°å
件ï¼ï¼æ ¹æ®åé¦çé度大å°æ¥è°èPWMçå 空æ¯ï¼è¿ç§æ¹æ³æ¯è¾ç²¾ç¡®ï¼éç¨äºä¸åçâè´è½½âï¼å¨æ§å¶é度çè¿ç¨ä¸è¦å°å¿âè¶
è°âï¼ä¹å°±æ¯é度å ç太快æè
太æ
¢ï¼PWMå 空æ¯è°è太快ï¼ï¼å¯ä»¥éè¿è¯éªæ¥ç¡®å®è°èçå¿«æ
¢æè
å¼å
¥PIDç®æ³ï¼
ããæ§å¶çµæºï¼è¦äºè§£å¯æ§ç¡
ç使ç¨ã
ããä¾åï¼
ãã51åçæºç´æµçµæºçPWMé度æ§å¶ç¨åºç代ç å¦ä¸ï¼
ãã/* =======ç´æµçµæºçPWMé度æ§å¶ç¨åº======== */
ãã/* æ¶æ¯éç¨11.0592M,产ççPWMçé¢ç约为91Hz */
ãã#include<reg51.h>
ãã#include<math.h>
ãã#define uchar unsigned char
ãã#define uint unsigned int
ããsbit en1=P2^0; /* L298çEnable A */
ããsbit en2=P2^1; /* L298çEnable B */
ããsbit s1=P2^2; /* L298çInput 1 */
ããsbit s2=P2^3; /* L298çInput 2 */
ããsbit s3=P2^4; /* L298çInput 3 */
ããsbit s4=P2^5; /* L298çInput 4 */
ããuchar t=0; /* ä¸æ计æ°å¨ */
ããuchar m1=0; /* çµæº1éåº¦å¼ */
ããuchar m2=0; /* çµæº2éåº¦å¼ */
ããuchar tmp1,tmp2; /* çµæºå½åéåº¦å¼ */
ãã/* çµæºæ§å¶å½æ° index-çµæºå·(1,2); speed-çµæºé度(-100â100) */
ããvoid motor(uchar index, char speed)
ãã{
ããif(speed>=-100 && speed<=100)
ãã{
ããif(index==1) /* çµæº1çå¤ç */
ãã{
ããm1=abs(speed); /* åé度çç»å¯¹å¼ */
ããif(speed<0) /* é度å¼ä¸ºè´åå转 */
ãã{
ããs1=0;
ããs2=1;
ãã}
ããelse /* ä¸ä¸ºè´æ°åæ£è½¬ */
ãã{
ããs1=1;
ããs2=0;
ãã}
ãã}
ããif(index==2) /* çµæº2çå¤ç */
ãã{
ããm2=abs(speed); /* çµæº2çé度æ§å¶ */
ããif(speed<0) /* çµæº2çæ¹åæ§å¶ */
ãã{
ããs3=0;
ããs4=1;
ãã}
ããelse
ãã{
ããs3=1;
ããs4=0;
ãã}
ãã}
ãã}
ãã}
ããvoid delay(uint j) /* ç®æ延æ¶å½æ° */
ãã{
ããfor(j;j>0;j--);
ãã}
ããvoid main()
ãã{
ããchar i;
ããTMOD=0x02; /* 设å®T0çå·¥ä½æ¨¡å¼ä¸º2 */
ããTH0=0x9B; /* è£
å
¥å®æ¶å¨çåå¼ */
ããTL0=0x9B;
ããEA=1; /* å¼ä¸æ */
ããET0=1; /* å®æ¶å¨0å
许ä¸æ */
ããTR0=1; /* å¯å¨å®æ¶å¨0 */
ããwhile(1) /* çµæºå®é
æ§å¶æ¼ç¤º */
ãã{
ããfor(i=0;i<=100;i++) /* æ£è½¬å é */
ãã{
ããmotor(1,i);
ããmotor(2,i);
ããdelay(5000);
ãã}
ããfor(i=100;i>0;i--) /* æ£è½¬åé */
ãã{
ããmotor(1,i);
ããmotor(2,i);
ããdelay(5000);
ãã}
ããfor(i=0;i<=100;i++) /* å转å é */
ãã{
ããmotor(1,-i);
ããmotor(2,-i);
ããdelay(5000);
ãã}
ããfor(i=100;i>0;i--) /* å转åé */
ãã{
ããmotor(1,-i);
ããmotor(2,-i);
ããdelay(5000);
ãã}
ãã}
ãã}
ããvoid timer0() interrupt 1 /* T0ä¸ææå¡ç¨åº */
ãã{
ããif(t==0) /* 1个PWMå¨æå®æåæä¼æ¥åæ°æ°å¼ */
ãã{
ããtmp1=m1;
ããtmp2=m2;
ãã}
ããif(t<tmp1) en1=1; else en1=0; /* 产ççµæº1çPWMä¿¡å· */
ããif(t<tmp2) en2=1; else en2=0; /* 产ççµæº2çPWMä¿¡å· */
ããt++;
ããif(t>=100) t=0; /* 1个PWMä¿¡å·ç±100次ä¸æ产ç */
ãã}
温馨提示:答案为网友推荐,仅供参考