
£¨×¢Ò⣬ÎÒÕâÀïÌÖÂÛµÄǰÌáÊÇÊä³ö¿ØÖƵÄÊǵçѹ£¬²»ÊÇPWM·½²¨¡£PWMÊä³öºóÒª¾¹ýÂ˲¨ÕûÐÎÔÙÊä³ö¿ØÖÆ¡££© ǰÌáÌõ¼þ£º
Êä³öµçѹ¿ØÖƵçѹ·¶Î§ÊÇ0-10V¡£
¸ø¶¨¡¢·´À¡¡¢Êä³öµçѹ²ÉÑùÊäÈëµçѹ·¶Î§ÊÇ0-5V£¨¾¹ýÔË·Å£©¡£ ʹÓõ¥Æ¬»úADΪ10λADоƬ¡£
ÄÇô10λADоƬµçѹ²É¼¯µÃµ½µÄÊý¾Ý·¶Î§¾ÍÊÇ0-1024¡£
PWMΪ 8λ¿Éµ÷Õ¼¿Õ±È·½²¨£¬0¶ÔÓ¦Êä³öÕ¼¿Õ±ÈΪ0µÄ·½²¨£¬255¶ÔÓ¦Êä³öÕ¼¿Õ±È100%µÄ·½²¨£¬127¶ÔÓ¦Êä³ö50%µÄ·½²¨¡£
±ÈÈ統ǰ¸ø¶¨ÊÇ2.5V£¬·´À¡µçѹÊÇ1V¡££¨KP,KI,KDµÈϵÊýÂÔ£¬¹ØÓÚPIDËã·¨µÄÕûÊýʵÏÖÎÒÔÚǰÎÄÖÐÓÐÂÛÊöÈçºÎʵÏÖ£©¡£ ÄÇô¾¹ýAD²ÉÑù 1¡¢¸ø¶¨2.5V¶ÔӦΪ 512 2¡¢·´À¡1V¶ÔӦΪ 205
¼Ù¶¨¾¹ýPID¼ÆËãµÃµ½µÄUKΪ400
Ò²¾ÍÒâζ×ÅÊä³öµçѹӦµ±Îª£¨400*£¨UPWM·åÖµµçѹ£©£©/1024 ÄÇôUK¶ÔÓ¦µÄPWMÕ¼¿Õ±ÈÊǶàÉÙÄØ£¿
ÎÒÃÇÖªµÀ£¬UK=1024¶ÔÓ¦Õ¼¿Õ±ÈΪ100£¬Ò²¾ÍÊÇPWMµÄÕ¼¿Õ±ÈϵÊýΪ255¡£¿ÉÖª£¬PWMϵÊý = UK/4;
ÄÇô400¾ÍÓ¦µ±¶ÔӦϵÊý 400/4=100¡£ Ò²¾ÍÊÇÊä³öµçѹ=400*10/1024=3.9V
ͬʱ£¬ÓÉÓÚ²ÉÑù¾«¶ÈÒÔ¼°PWMÊä³öÕ¼¿Õ±È¾«¶È¿ØÖƵÄÎÊÌ⣬½«µ¼ÖÂÊä³öµçѹºÍÆÚÍûÖµ²»ÊÇÄÇôÏßÐÔ£¬ËùÒÔ£¬ÎÒÔÚÏîÄ¿ÄÚ¼ÓÈëÁËÊä³öµçѹ²ÉÑùµÄ¿ØÖÆ¡£ ²ÉÑùADÊäÈëΪ0-5V£¬ËùÒÔ£¬¶ÔÓÚÊä³ö0-10VÓÐÒ»¸öËõСµÄ±ÈÀý¡£ Êä³ö10VÔò²ÉÑùÖµ¶ÔӦΪ255 Êä³ö5VÔò²ÉÑùÖ®¶ÔÓ¦127 ¿ÉÖª£¬3.9V¶ÔÓ¦AD½á¹ûΪ97
²ÉÑùÊä³öµçѹֵ£¬¿ÉÒÔÕë¶ÔÐԵĵ÷ÕûÒ»ÏÂÕ¼¿Õ±ÈÊä³ö£¬´Ó¶øµÃµ½Îó²îÔÊÐí·¶Î§ÄÚµÄÒ»¸ö¿ØÖÆÊä³öµçѹ¡£
ͬʱ£¬¾¹ýһЩ¼ÓËÙ¿ØÖƵÄÊֶΡ£¿ÉÒԱȽÏѸËٵĴﵽ¿ØÖƵÄÄ¿µÄ¡£
ÏÂÎÄÖеÄUK¿ØÖÆ·½·¨ÊÇÕë¶ÔÔöÁ¿Ê½PID¿ØÖƶøÀ´×öµÄ¡£ /****************************************************/ void PWMProcess(void) {
uint16 idata temp; uint16 idata UKTemp; temp = 0; UKTemp = 0;
if( Pwm.ChangeFlag_Uint8 != 0 ) //ÅжÏÊÇ·ñÐèÒª¸Ä±äÕ¼¿Õ±È { //ÊÇ·ñÐèÒª¸Ä±äÕ¼¿Õ±ÈºÍÄãµÄ±»¿ØÏµÍ³ÌØÐÔÓÐ¹Ø Pwm.ChangeFlag_Uint8 = 0;
UKTemp = PID.Uk_Uint16 + SwIn.AddValue_Uint16; //¼ÆËãUK¿ØÖÆÁ¿
//¿ØÖÆÁ¿ºÍ¼ÆËãÖµÒÔ¼°Ò»¸ö¿ª¹ØÁ¿Óйأ¬ÎÒÕâÀïµÄ¿ª¹ØÁ¿ÊÇϵͳÐèÒªµÄʱºòµþ¼ÓÔÚ¿ØÖÆÁ¿ÉϵÄÒ»¸ö±äÁ¿¡£ if(UKTemp>999) {
UKTemp = 999; }
//ÕâÀïÖ»ËùÒÔÊÇ999·â¶¥¶ø²»ÊÇ1024ÊÇÒòΪÎÒµÄϵͳPWMµÄ·åÖµµçѹÊÇ12Vµ¼Ö¡£
while(1) //Èç¹ûÊä³öµçѹºÍÆÚÍûµçѹÏà²î Delta£¬Ôò¼ÌÐøµ÷ÕûÕ¼¿Õ±È£¬Ö±µ½ÔÚÎó²îÒÔÄÚ {
ADChPro(UPWMADCH); //²âÁ¿Êä³öµçѹ if( ADPool.Value_Uint16[UPWMADCH] == UKTemp) {
return;
}
if( ADPool.Value_Uint16[UPWMADCH] > UKTemp) //Èç¹ûµ±Ç°µçѹ´óÓÚÊä³öµçѹ£¬¼õСռ¿Õ±È {
if( ( ADPool.Value_Uint16[UPWMADCH] - UKTemp ) > UDELTA ) {
temp = ADPool.Value_Uint16[UPWMADCH] - UKTemp; // temp = temp / 2; //Ͻµ¿ÉÒÔ¼ÓËÙϽµ£¬ËùÒÔϽµ²ÎÊý¼Ó±¶ if( Pwm.DutyCycle_Uint8 > temp ) {
Pwm.DutyCycle_Uint8 = Pwm.DutyCycle_Uint8 - temp; } else {
Pwm.DutyCycle_Uint8 = 0; } } else {
return; } }
else //Èç¹ûµ±Ç°µçѹСÓÚÊä³öµçѹ {
if( ( UKTemp - ADPool.Value_Uint16[UPWMADCH] ) > UDELTA ) {
temp = UKTemp - ADPool.Value_Uint16[UPWMADCH];
temp = temp / 4; //ÉÏÉý´¦Àí²»Òª³¬µ÷£¬ËùÒÔÿ´ÎÖ»+Ò»°ë if( (255-Pwm.DutyCycle_Uint8) > temp ) {
Pwm.DutyCycle_Uint8 += (temp/2); } else {
Pwm.DutyCycle_Uint8 = 255; } } else {
return; } }
DisPlayVoltage();
PWMChangeDuty(Pwm.DutyCycle_Uint8); //¸Ä±äÕ¼¿Õ±È Delay(10,10);
} } }
/*****************************************************/ ¸½Â¼2
Ö±Á÷µç»úPWMµ÷ËÙϵͳÖпØÖƵçѹ·ÇÏßÐÔÑо¿
ÒýÑÔ
ÓÉÓÚÏßÐÔ·Å´óÇý¶¯·½Ê½Ð§ÂʺÍÉ¢ÈÈÎÊÌâÑÏÖØ£¬Ä¿Ç°¾ø´ó¶àÊýÖ±Á÷µç¶¯»ú²ÉÓÿª¹ØÇý¶¯·½Ê½¡£¿ª¹ØÇý¶¯·½Ê½Êǰ뵼Ì幦ÂÊÆ÷¼þ¹¤×÷ÔÚ¿ª¹Ø×´Ì¬£¬Í¨¹ýÂö¿íµ÷ÖÆPWM¿ØÖƵ綯»úµçÊàµçѹ£¬ÊµÏÖµ÷ËÙ¡£Ä¿Ç°ÒÑÓÐÐí¶àÎÄÏ×½éÉÜÖ±Á÷µç»úµ÷ËÙ£¬ËÎÎÀ¹úµÈÓÃ89C51µ¥Æ¬»úʵÏÖÁËÖ±Á÷µç»ú±Õ»·µ÷ËÙ£»ÕÅÁ¢Ñ«µÈÓÃAVRµ¥Æ¬»úʵÏÖÁËÖ±Á÷µç»úPWMµ÷ËÙ£»¹ù³ç¾üµÈÓÃC8051ʵÏÖÁËÎÞË¢Ö±Á÷µç»ú¿ØÖÆ£»Õźì¾êµÈÓÃPICµ¥Æ¬»úʵÏÖÁËÖ±Á÷µç»úPWMµ÷ËÙ£»Íõ³¿ÑôµÈÓÃDSPʵÏÖÁËÎÞË¢Ö±Á÷µç»ú¿ØÖÆ¡£ÉÏÊöÎÄÏ×¶ÔʵÏÖµ÷ËÙµÄÓ²¼þµç·ºÍÈí¼þÁ÷³ÌµÄÉè¼ÆÓнÏÏêϸµÄÃèÊö£¬µ«Ã»ÓÐ˵Ã÷¾ßÌåµÄµ÷ѹµ÷ËÙ·½·¨£¬Ò²Ã»ÓÐÌá¼°Õ¼¿Õ±ÈÓëµç»ú¶Ëµçѹƽ¾ùÖµÖ®¼äµÄ¹ØÏµ¡£ÔÚÀîά¾üµÈ»ùÓÚµ¥Æ¬»úÓÃÈí¼þʵÏÖÖ±Á÷µç»úPWMµ÷ËÙϵͳÖÐÌᵽƽ¾ùËÙ¶ÈÓëÕ¼¿Õ±È²¢²»ÊÇÑϸñµÄÏßÐÔ¹ØÏµ£¬ÔÚÒ»°ãµÄÓ¦ÓÃÖУ¬¿ÉÒÔ½«Æä½üËÆµØ¿´×÷ÏßÐÔ¹ØÏµ¡£µ«Ã»ÓÐ×öÉîÈëµÄÑо¿¡£±¾ÎÄͨ¹ýʵÑéÑéÖ¤£¬ÔÚ²»´øµç»úÇé¿öÏ£¬PWM²¨Õ¼¿Õ±ÈÓë¿ØÖÆÊä³ö¶Ëµçѹƽ¾ùÖµÖ®¼ä³ÊÏßÐÔ¹ØÏµ£»ÔÚ´øµç»úÇé¿öÏ£¬Õ¼¿Õ±ÈÓëµç»ú¶Ëµçѹƽ¾ùÖµÂú×ãÅ×ÎïÏß·½³Ì£¬ÄÜÈ¡µÃ¾«È·µÄ¿ØÖÆ¡£±¾Îĵĵç»ú±Õ»·µ÷ËÙÊÇÔËÓÃMatlabÄâºÏµÄ¹ØÏµÊ½Í¨¹ýPID¿ØÖÆË㷨ʵÏÖ¡£ 1 ϵͳӲ¼þÉè¼Æ
±¾ÏµÍ³ÊÇ»ùÓÚTX-1CʵÑé°åÉϵÄAT89C52µ¥Æ¬»ú£¬µ÷ËÙϵͳµÄÓ²¼þÔÀíͼÈçͼ1Ëùʾ£¬Ö÷ÒªÓÉAT89C52µ¥Æ¬»ú¡¢555Õñµ´µç·¡¢L298Çý¶¯µç·¡¢¹âµç¸ôÀë¡¢»ô¶ûÔª¼þ²âËٵ緡¢MAX 232µçƽת»»µç·µÈ×é³É¡£
ͼ1 ±Õ»·¿ØÖÆÏµÍ³Ê¾Òâͼ
2 ϵͳÈí¼þÉè¼Æ
ϵͳ²ÉÓÃÄ£¿é»¯Éè¼Æ£¬Èí¼þÓÉ1¸öÖ÷³ÌÐò£¬3¸öÖжÏ×Ó³ÌÐò£¬¼´ÍⲿÖжÏ0¡¢ÍⲿÖжÏ1£¬¶¨Ê±Æ÷0×Ó³ÌÐò£¬PIDËã·¨×Ó³ÌÐò£¬²âËÙ×Ó³ÌÐò¼°·¢ËÍÊý¾Ýµ½´®¿ÚÏÔʾ×Ó³ÌÐò×é³É£¬Ö÷³ÌÐòÁ÷³ÌͼÈçͼ2Ëùʾ¡£ÍⲿÖжÏ0ͨ¹ý±È½ÏÖ±Á÷µçƽÓë¾â³Ý²¨ÐźŲúÉúPWM²¨£¬ÍⲿÖжÏ1ÓÃÓÚ¶Ô´«¸ÐÆ÷µÄÂö³å¼ÆÊý¡£¶¨Ê±Æ÷0ÓÃÓÚ¶Ô¼ÆÊýÂö³å¶¨Ê±¡£²âµÃµÄתËÙͨ¹ý´®¿Ú·¢Ë͵½ÉÏλ»úÏÔʾ£¬Í¨¹ýPIDÄ£¿éµ÷ÕûתËÙµ½É趨ֵ¡£±¾ÊµÑé²ÉÓÃM£¯T·¨²âËÙ£¬ËüÊÇͬʱ²âÁ¿¼ì²âʱ¼äºÍÔڴ˼ì²âʱ¼äÄÚ»ô¶û´«¸ÐÆ÷Ëù²úÉúµÄתËÙÂö³åÐźŵĸöÊýÀ´È·¶¨×ªËÙ¡£ÓÉÍⲿÖжÏ1¶Ô»ô¶û´«¸ÐÆ÷Âö³å¼ÆÊý£¬Í¬Ê±Æð¶¯¶¨Ê±Æ÷0£¬µ±¼ÆÊý¸öÊýµ½Ô¤¶¨Öµ2 000ºó£¬¹Ø¶¨Ê±Æ÷0£¬¿ÉµÃµ½¼Æ2 000¸öÂö³åµÄ¼ÆÊýʱ¼ä£¬ÓÉʽ¼ÆËã³öתËÙ£º
n=60f£¯K=60N£¯(KT) (1)
ʽÖУºnΪֱÁ÷µç»úµÄתËÙ£»KΪ»ô¶û´«¸ÐÆ÷תÅÌÉϴŸÖÊý£»fΪÂö³åƵÂÊ£»NΪÂö³å¸öÊý£»TΪ²ÉÑùÖÜÆÚ¡£
°Ù¶ÈËÑË÷¡°77cn¡±»ò¡°Ãâ·Ñ·¶ÎÄÍø¡±¼´¿ÉÕÒµ½±¾Õ¾Ãâ·ÑÔĶÁÈ«²¿·¶ÎÄ¡£Êղر¾Õ¾·½±ãÏ´ÎÔĶÁ£¬Ãâ·Ñ·¶ÎÄÍø£¬Ìṩ¾µäС˵×ÛºÏÎÄ¿âPID¿ØÖÆËã·¨µÄCÓïÑÔʵÏÖ(ÍêÕû°æ)(8)ÔÚÏßÈ«ÎÄÔĶÁ¡£
Ïà¹ØÍÆ¼ö£º
