å©ç¨åçæºPWMä¿¡å·è¿è¡èµæºæ§å¶
[æ¥æï¼2005-10-15] æ¥æºï¼ä»æ¥çµå ä½è
ï¼å京交éå¤§å¦ æ¶ç® [åä½ï¼å¤§ ä¸ å°]
åºäºåçæºçèµæºæ§å¶æ¹æ³å
·æç®åã精度é«ãææ¬ä½ãä½ç§¯å°çç¹ç¹ï¼å¹¶å¯æ ¹æ®ä¸åçèµæºæ°éå 以çµæ´»åºç¨ã
å¨æºå¨äººæºçµæ§å¶ç³»ç»ä¸ï¼èµæºæ§å¶æææ¯æ§è½çéè¦å½±åå ç´ ãèµæºå¯ä»¥å¨å¾®æºçµç³»ç»åèªæ¨¡ä¸ä½ä¸ºåºæ¬çè¾åºæ§è¡æºæï¼å
¶ç®åçæ§å¶åè¾åºä½¿å¾åçæºç³»ç»é常容æä¸ä¹æ¥å£ã
èµæºæ¯ä¸ç§ä½ç½®ä¼ºæç驱å¨å¨ï¼éç¨äºé£äºéè¦è§åº¦ä¸æåå并å¯ä»¥ä¿æçæ§å¶ç³»ç»ãå
¶å·¥ä½åçæ¯ï¼æ§å¶ä¿¡å·ç±æ¥æ¶æºçééè¿å
¥ä¿¡å·è°å¶è¯çï¼è·å¾ç´æµåç½®çµåãå®å
é¨æä¸ä¸ªåºåçµè·¯ï¼äº§çå¨æ为20msï¼å®½åº¦ä¸º1.5msçåºåä¿¡å·ï¼å°è·å¾çç´æµåç½®çµåä¸çµä½å¨ççµåæ¯è¾ï¼è·å¾çµåå·®è¾åºãæåï¼çµåå·®çæ£è´è¾åºå°çµæºé©±å¨è¯çå³å®çµæºçæ£å转ãå½çµæºè½¬éä¸å®æ¶ï¼éè¿çº§èåé齿轮带å¨çµä½å¨æ转ï¼ä½¿å¾çµå差为0ï¼çµæºåæ¢è½¬å¨ã
å¾1 èµæºçæ§å¶è¦æ±
èµæºçæ§å¶ä¿¡å·æ¯PWMä¿¡å·ï¼å©ç¨å 空æ¯çååæ¹åèµæºçä½ç½®ãä¸è¬èµæºçæ§å¶è¦æ±å¦å¾1æ示ã
åçæºå®ç°èµæºè½¬è§æ§å¶
å¯ä»¥ä½¿ç¨FPGAã模æçµè·¯ãåçæºæ¥äº§çèµæºçæ§å¶ä¿¡å·ï¼ä½FPGAææ¬é«ä¸çµè·¯å¤æã对äºè宽è°å¶ä¿¡å·çè宽åæ¢ï¼å¸¸ç¨çä¸ç§æ¹æ³æ¯éç¨è°å¶ä¿¡å·è·åææºæ»¤æ³¢åçç´æµçµåï¼ä½æ¯éè¦50Hz(å¨ææ¯20ms)çä¿¡å·ï¼è¿å¯¹è¿æ¾å¨ä»¶çéæ©æè¾é«è¦æ±ï¼ä»çµè·¯ä½ç§¯ååèèèä¹ä¸æéç¨ã5mV以ä¸çæ§å¶çµåçååå°±ä¼å¼èµ·èµæºçæå¨ï¼å¯¹äºæºè½½çæµæ§ç³»ç»èè¨ï¼çµæºåå
¶ä»å¨ä»¶çä¿¡å·åªå£°é½è¿å¤§äº5mVï¼æ以滤波çµè·¯ç精度é¾ä»¥è¾¾å°èµæºçæ§å¶ç²¾åº¦è¦æ±ã
ä¹å¯ä»¥ç¨åçæºä½ä¸ºèµæºçæ§å¶åå
ï¼ä½¿PWMä¿¡å·çèå²å®½åº¦å®ç°å¾®ç§çº§çååï¼ä»èæé«èµæºç转è§ç²¾åº¦ãåçæºå®ææ§å¶ç®æ³ï¼åå°è®¡ç®ç»æ转å为PWMä¿¡å·è¾åºå°èµæºï¼ç±äºåçæºç³»ç»æ¯ä¸ä¸ªæ°åç³»ç»ï¼å
¶æ§å¶ä¿¡å·çååå®å
¨ä¾é 硬件计æ°ï¼æ以åå¤çå¹²æ°è¾å°ï¼æ´ä¸ªç³»ç»å·¥ä½å¯é ã
åçæºç³»ç»å®ç°å¯¹èµæºè¾åºè½¬è§çæ§å¶ï¼å¿
é¡»é¦å
å®æ两个任å¡ï¼é¦å
æ¯äº§çåºæ¬çPWMå¨æä¿¡å·ï¼æ¬è®¾è®¡æ¯äº§ç20msçå¨æä¿¡å·ï¼å
¶æ¬¡æ¯è宽çè°æ´ï¼å³åçæºæ¨¡æPWMä¿¡å·çè¾åºï¼å¹¶ä¸è°æ´å 空æ¯ã
å½ç³»ç»ä¸åªéè¦å®ç°ä¸ä¸ªèµæºçæ§å¶ï¼éç¨çæ§å¶æ¹å¼æ¯æ¹ååçæºçä¸ä¸ªå®æ¶å¨ä¸æçåå¼ï¼å°20mså为两次ä¸ææ§è¡ï¼ä¸æ¬¡çå®æ¶ä¸æåä¸æ¬¡é¿å®æ¶ä¸æãè¿æ ·æ¢èçäºç¡¬ä»¶çµè·¯ï¼ä¹åå°äºè½¯ä»¶å¼éï¼æ§å¶ç³»ç»å·¥ä½æçåæ§å¶ç²¾åº¦é½å¾é«ã
å
·ä½ç设计è¿ç¨ï¼ä¾å¦æ³è®©èµæºè½¬åå·¦æéçè§åº¦ï¼å®çæ£èå²ä¸º2msï¼åè´èå²ä¸º20ms-2ms=18msï¼æ以å¼å§æ¶å¨æ§å¶å£åéé«çµå¹³ï¼ç¶å设置å®æ¶å¨å¨2msååçä¸æï¼ä¸æåçåï¼å¨ä¸æç¨åºéå°æ§å¶å£æ¹ä¸ºä½çµå¹³ï¼å¹¶å°ä¸ææ¶é´æ¹ä¸º18msï¼åè¿18msè¿å
¥ä¸ä¸æ¬¡å®æ¶ä¸æï¼åå°æ§å¶å£æ¹ä¸ºé«çµå¹³ï¼å¹¶å°å®æ¶å¨åå¼æ¹ä¸º2msï¼çå¾
ä¸æ¬¡ä¸æå°æ¥ï¼å¦æ¤å¾å¤å®ç°PWMä¿¡å·è¾åºå°èµæºãç¨ä¿®æ¹å®æ¶å¨ä¸æåå¼çæ¹æ³å·§å¦å½¢æäºèå²ä¿¡å·ï¼è°æ´æ¶é´æ®µç宽度便å¯ä½¿ä¼ºææºçµæ´»è¿å¨ã
为ä¿è¯è½¯ä»¶å¨å®æ¶ä¸æéééå
¶ä»ä¿¡å·ï¼å¹¶ä¸ä½¿åçPWMä¿¡å·çç¨åºä¸å½±åä¸æç¨åºçè¿è¡(å¦æè¿äºç¨åºæå ç¨æ¶é´è¿é¿ï¼æå¯è½ä¼åçä¸æç¨åºè¿æªç»æï¼ä¸æ¬¡ä¸æåå°æ¥çåæ)ï¼æ以éè¦å°ééä¿¡å·çå½æ°æ¾å¨é¿å®æ¶ä¸æè¿ç¨ä¸æ§è¡ï¼ä¹å°±æ¯è¯´æ¯ç»è¿ä¸¤æ¬¡ä¸ææ§è¡ä¸æ¬¡è¿äºç¨åºï¼æ§è¡çå¨æè¿æ¯20msã软件æµç¨å¦å¾2æ示ã
å¦å¾2 产çPWMä¿¡å·ç软件æµç¨
å¦æç³»ç»ä¸éè¦æ§å¶å 个èµæºçå确转å¨ï¼å¯ä»¥ç¨åçæºå计æ°å¨è¿è¡èå²è®¡æ°äº§çPWMä¿¡å·ã
èå²è®¡æ°å¯ä»¥å©ç¨51åçæºçå
é¨è®¡æ°å¨æ¥å®ç°ï¼ä½æ¯ä»è½¯ä»¶ç³»ç»ç稳å®æ§åç¨åºç»æçåçæ§çï¼å®ä½¿ç¨å¤é¨ç计æ°å¨ï¼è¿å¯ä»¥æé«CPUçå·¥ä½æçãå®éªåä»ç²¾åº¦ä¸èèï¼å¯¹äºFUTABAç³»åçæ¥æ¶æºï¼å½éç¨1MHzçå¤é¨æ¶æ¯æ¶ï¼å
¶æ§å¶çµåå¹
å¼çåå为0.6mVï¼èä¸ä¸ä¼åºç°è¯¯å·®ç§¯ç´¯ï¼å¯ä»¥æ»¡è¶³æ§å¶èµæºçè¦æ±ãæåèèæ°åç³»ç»ç离æ£è¯¯å·®ï¼ç»ä¼°ç®è¯¯å·®çèå´å¨Â±0.3%å
ï¼æ以éç¨åçæºå8253ã8254è¿æ ·ç计æ°å¨è¯ççPWMä¿¡å·äº§ççµè·¯æ¯å¯é çãå¾3æ¯ç¡¬ä»¶è¿æ¥å¾ã
å¾3 PWAä¿¡å·ç计æ°åè¾åºçµè·¯
åºäº8253产çPWMä¿¡å·çç¨åºä¸»è¦å
æ¬ä¸æ¹é¢å
容ï¼ä¸æ¯å®ä¹8253å¯åå¨çå°åï¼äºæ¯æ§å¶åçåå
¥ï¼ä¸æ¯æ°æ®çåå
¥ã软件æµç¨å¦å¾4æ示ï¼å
·ä½ä»£ç å¦ä¸ã
//å
³é®ç¨åºå注éï¼
//å®æ¶å¨T0ä¸æï¼å8253åéæ§å¶ååæ°æ®
void T0Int() interrupt 1
{
TH0 = 0xB1;
TL0 = 0xE0;
//20msçæ¶éåºå
//å
åå
¥æ§å¶åï¼ååå
¥è®¡æ°å¼
SERVO0 = 0x30; //éæ©è®¡æ°å¨0ï¼åå
¥æ§å¶å
PWM0 = BUF0L; //å
åä½ï¼ååé«
PWM0 = BUF0H;
SERVO1 = 0x70; //éæ©è®¡æ°å¨1ï¼åå
¥æ§å¶å
PWM1 = BUF1L;
PWM1 = BUF1H;
SERVO2 = 0xB0; //éæ©è®¡æ°å¨2ï¼åå
¥æ§å¶å
PWM2 = BUF2L;
PWM2 = BUF2H;
}
å¾4 åºäº8253产çPWAä¿¡å·ç软件æµç¨
å½ç³»ç»ç主è¦å·¥ä½ä»»å¡å°±æ¯æ§å¶å¤èµæºçå·¥ä½ï¼å¹¶ä¸ä½¿ç¨çèµæºå·¥ä½å¨æå为20msæ¶ï¼è¦æ±ç¡¬ä»¶äº§ççå¤è·¯PWMæ³¢çå¨æä¹ç¸åã使ç¨51åçæºçå
é¨å®æ¶å¨äº§çèå²è®¡æ°ï¼ä¸è¬å·¥ä½æ£èå²å®½åº¦å°äºå¨æç1/8ï¼è¿æ ·å¯ä»¥å¨1个å¨æå
åæ¶å¯å¨åè·¯PWMæ³¢çä¸å沿ï¼åå©ç¨å®æ¶å¨ä¸æT0ç¡®å®åè·¯PWMæ³¢çè¾åºå®½åº¦ï¼å®æ¶å¨ä¸æT1æ§å¶20msçåºåæ¶é´ã
第1次å®æ¶å¨ä¸æT0æ20msç 1/8设置åå¼ï¼å¹¶è®¾ç½®è¾åºI/Oå£ï¼ç¬¬1次T0å®æ¶ä¸æååºåï¼å°å½åè¾åºI/Oå£å¯¹åºçå¼èè¾åºç½®é«çµå¹³ï¼è®¾ç½®è¯¥è·¯è¾åºæ£èå²å®½åº¦ï¼å¹¶å¯å¨ç¬¬2次å®æ¶å¨ä¸æï¼è¾åºI/Oå£æåä¸ä¸ä¸ªè¾åºå£ã第2次å®æ¶å¨å®æ¶æ¶é´ç»æåï¼å°å½åè¾åºå¼èç½®ä½çµå¹³ï¼è®¾ç½®æ¤ä¸æå¨æ为20msç1/8åå»æ£èå²çæ¶é´ï¼æ¤è·¯PWMä¿¡å·å¨è¯¥å¨æä¸è¾åºå®æ¯ï¼å¾å¤è¾åºãå¨æ¯æ¬¡å¾ªç¯ç第16次(2Ã8=16)ä¸æå®è¡å
³å®æ¶ä¸æT0çæä½ï¼æåå°±å¯ä»¥å®ç°8è·¯èµæºæ§å¶ä¿¡å·çè¾åºã
ä¹å¯ä»¥éç¨å¤é¨è®¡æ°å¨è¿è¡å¤è·¯èµæºçæ§å¶ï¼ä½æ¯å 为常è§ç8253ã8254è¯çé½åªæ3个计æ°å¨ï¼æ以å½ç³»ç»éè¦äº§çå¤è·¯PWMä¿¡å·æ¶ï¼ä½¿ç¨ä¸è¿°æ¹æ³å¯ä»¥åå°çµè·¯ï¼éä½ææ¬ï¼ä¹å¯ä»¥è¾¾å°è¾é«ç精度ãè°è¯æ¶æ³¨æå°ç±äºç¨åºä¸èå²å®½åº¦çè°æ´æ¯é è°æ´å®æ¶å¨çåå¼ï¼ä¸æç¨åºä¹è¢«åæäº8个ç¶æå¨æï¼å¹¶ä¸éè¦ä¸¥æ ¼çå¨æ循ç¯ï¼èä¸è¿è¡å
¶ä»ä¸æç¨åºä»£ç çæ¶é´éè¦ä¸¥æ ¼ææ¡ã
å¨å®é
åºç¨ä¸ï¼éç¨51åçæºç®åæ¹ä¾¿å°å®ç°äºèµæºæ§å¶éè¦çPWMä¿¡å·ã对æºå¨äººèµæºæ§å¶çæµè¯è¡¨æï¼èµæºæ§å¶ç³»ç»å·¥ä½ç¨³å®ï¼PWMå ç©ºæ¯ (0.5ï½2.5ms çæ£èå²å®½åº¦)åèµæºç转è§(-90°ï½90°)线æ§åº¦è¾å¥½ã
åèæç®
1 è¡æ±æï¼åçæºåçåæ¥å£ææ¯.æ¸
å大å¦åºç社.1996
2 çæ¶è,å§å»ºå¹³.éç¨åçæºå®ç°PWMå¼D/A转æ¢ææ¯.çµåè´¨é.2004
3 åæ群.å¢äº¬æ½®.é«å»ºå½.èå°§è.ç¨åçæºäº§ç7è·¯èµæºæ§å¶PWMæ³¢çæ¹æ³.æºæ¢°ä¸çµå.2004
èµæºæ¯ä¸ç§ä½ç½®ä¼ºæç驱å¨å¨ï¼éç¨äºé£äºéè¦è§åº¦ä¸æåå并å¯ä»¥ä¿æçæ§å¶ç³»ç»ãå
¶å·¥ä½åçæ¯ï¼æ§å¶ä¿¡å·ç±æ¥æ¶æºçééè¿å
¥ä¿¡å·è°å¶è¯çï¼è·å¾ç´æµåç½®çµåãå®å
é¨æä¸ä¸ªåºåçµè·¯ï¼äº§çå¨æ为20msï¼å®½åº¦ä¸º1.5msçåºåä¿¡å·ï¼å°è·å¾çç´æµåç½®çµåä¸çµä½å¨ççµåæ¯è¾ï¼è·å¾çµåå·®è¾åºãæåï¼çµåå·®çæ£è´è¾åºå°çµæºé©±å¨è¯çå³å®çµæºçæ£å转ãå½çµæºè½¬éä¸å®æ¶ï¼éè¿çº§èåé齿轮带å¨çµä½å¨æ转ï¼ä½¿å¾çµå差为0ï¼çµæºåæ¢è½¬å¨ã
温馨提示:答案为网友推荐,仅供参考