»ùÓÚFPGA µÄ΢²¨Â¯¿ØÖÆÆ÷Éè¼Æ
4.2.4. ζȿØÖÆ
ζȿØÖÆ×ÓÄ£¿é£¬Ö÷񻃾¼°µ½Î¶ȵIJⶨºÍ¿ØÖÆ¡£±¾Éè¼Æ²ÉÓÃÄ£Äâζȴ«¸ÐÆ÷AD590ºÍÄ£Êýת»»Æ÷ADC0809ʵÏÖ¶Ôζȵļì²â¡£
AD590ÓÃÓÚÄ£Äâ΢²¨Â¯ÄÚʳƷµÄζȣ¬AD590ζȴ«¸ÐÆ÷µÄ¸Ð²âÄÜÁ¦ÊÇζÈÿÉý¸ß1K¾ÍÔö¼Ó1¦ÌAµÄµçÁ¿£¬¸ÃµçÁ÷Á÷Èë10k¦¸µç×èºó£¬½«²úÉú10mV(0.01V)µÄµçѹ¡£¶ø0¡æ(µÈÓÚ273K)ʱ£¬Êä³öµçÁ÷273 ¦ÌA£¬¾I£¯Vת»»ºó£¬½«²úÉú2.73 VµÄµçѹ¡£Èç¹û²âµ½µÄµçѹΪx Vʱ£¬Ôò¿ÉÓÉ( x-2.73)¡Â0.01µÃµ½Òª²âÁ¿µÄζȡ£Î¶ȴ«¸ÐÆ÷AD590µÄÊä³ö¾¹ý·Å´óÆ÷ºó£¬½«µçѹÒýÈëADC0809µÄVin (+) ¹Ü½Å£¬ÓÉADC0809½øÐÐÄ£Êýת»»¡£
ADC0809ÊÇ8λģÊýת»»Æ÷£¬²âÁ¿¾«¶ÈΪ0.02 V£¬µ±ADC0809µÄת»»ÖµÎªx ʱ£¬Ëù²âζÈΪ£ºT=(x ¡Á0.02-2.73)¡Â0.01=x ¡Á2-273¡£ADC0809½«µ±Ç°Î¶Èת»»³ÉÊý×ÖÁ¿ºóËÍÈëFPGA¿ØÖÆÐ¾Æ¬£¬¿ØÖÆÐ¾Æ¬¶ÔÓɼüÅÌÊäÈëµÄ¼ÓÈÈ×î¸ßζȸø¶¨Öµ½øÐбȽϣ¬¼´Í¨¹ýÖ±½Ó±È½ÏÉ趨ֵºÍ²âµÃÖµµÄBCD±àÂ룬µ±Â¯ÄÚζȸßÓÚ¸ø¶¨Î¶Èʱ£¬Á¢¼´Í£Ö¹¼ÓÈÈ£¬²¢Êä³ö¿ØÖÆÐźÅÌáʾ±¨¾¯µÆÁÁ£¬´Ó¶øÊµÏÖ¶ÔζȵĿØÖÆ¡£
¾ßÌåÉè¼Æ¹ý³ÌÖУ¬Éæ¼°µ½Êý¾ÝµÄ²É¼¯¡¢Ê±ÖÓ¶¨Ê±ºÍζȿØÖÆ¡£Êý¾Ý²É¼¯Ö÷ÒªÍê³ÉζȵĴ¦Àí£¬Ê±ÖÓ¶¨Ê±Ö÷Òª¶ÔÎÂ¶ÈÆð¶¨Ê±×÷Óã¬Î¶ȿØÖƲ¿·ÖµÄÊäÈëÐźÅÀ´×ÔÊý¾Ý´¦ÀíºÍʱÖÓ¶¨Ê±ºóµÄÊä³ö£¬µ±Êµ¼ÊÊä³öζÈСÓÚÔ¤Êä³öζÈֵʱ£¬Êä³öÐźſØÖÆÎ¢²¨Â¯¼ÌÐø¼ÓÈÈ¡£
ÒÔÏÂÊǸÃÉè¼ÆµÄÁ÷³Ìͼ£¬Èçͼ4.16Ëùʾ£º
- 25 -
Î÷ÄÏʯÓÍ´óѧ±¾¿Æ±ÏÒµÉè¼Æ£¨ÂÛÎÄ£©
ͼ4.16 ζȿØÖƲ¿·ÖÁ÷³Ìͼ
Êý¾Ý²É¼¯Ö÷ÒªÍê³ÉζȵĴ¦Àí£¬ÊµÏÖT=(x¡Á0.02-2.73)¡Â0.01µÄÔËË㣬Êý¾Ýµ÷ÕûΪ¶ÔÓ¦µÄÊý×ÖÐźţ¬ÔÚ¶ÁÈ¡ADC0809µÄÊý¾Ýºó£¬ÏȽ«×ª»»Êý¾Ý×óÒÆ1λ(Ï൱ÓÚ³ËÒÔ2)£¬È»ºó¼õÈ¥273£¬µ±Î¶ȴﵽijһÊýֵʱ£¬Ê¹ÄÜÐźźÍÇåÁãÐźÅΪ?1?£¬´ËʱʱÖÓ¿ªÊ¼¼ÆÊ±¡£
¸ù¾ÝÉÏÊö·ÖÎö£¬±àд¸ÃζȿØÖÆÆ÷µÄVHDL³ÌÐò£¬ÆäÖ÷Òª³ÌÐòÈçÏ£º --Êý¾Ý²É¼¯²¿·Ö
PROCESS (CLK,DATA) BEGIN
IF (CLK'EVENT AND CLK=1) THEN
IF (tout>=(cout-6) AND tout<=(cout+5)) THEN --É趨ֵÉÏÏÂ5¶ÈµÄ·¶Î§ÄÚ¿ªÊ¼¼ÆÊ±
enout<=1; ELSE enout<=0; END IF;
- 26 -
»ùÓÚFPGA µÄ΢²¨Â¯¿ØÖÆÆ÷Éè¼Æ
-- ʱÖÓ¶¨Ê±²¿·Ö
PROCESS (CLK ,clearing , enin )
VARIABLE s , m : INTEGER RANGE 0 TO 60; VARIABLE e : INTEGER RANGE 0 TO 24; VARIABLE d : BIT; BEGIN
d:=clearing XOR enin; IF (d=0) THEN s:=0; m:=0' e:=0;
ELSIF (CLK'EVENT AND CLK=1) THEN s:=s+1; IF (s=10) THEN s:=0;m:=m+1; IF (m=10) THEN m:=0;e:=e+1; IF (e=24) THEN e:=0; ¡ hourout <= e; --¿ØÖƲ¿·Ö BEGIN
IF (tin<(cin+5)) THEN --cinÊDzÎÊýÉ趨ֵ temp<=1; ELSE temp<=0; END IF;
IF (CLK'EVENT AND CLK=1) THEN control_bcd<=temp; END IF;
- 27 -
Î÷ÄÏʯÓÍ´óѧ±¾¿Æ±ÏÒµÉè¼Æ£¨ÂÛÎÄ£©
IF (hour>hourin) THEN ALARM<=1; ELSE ALARM<=0; END IF;
½«¸÷²¿·Ö½øÐÐÔª¼þÀý»¯£¬Éú³ÉÏàÓ¦µÄµç··ûºÅ£¬Á¬½Ó³É¸ÃζȿØÖÆÆ÷µÄÄÚ²¿ÔÀíͼ£¬Èçͼ4.17Ëùʾ£º
clockCLKeninclearininst1ddataCLKINPUTVCCINPUTVCChourout[3..0]ccontrolCLKDATA[7..0]enoutclearouttout[7..0]cout[7..0]data[7..0]CLKtin[7..0]cin[7..0]hourin[3..0]COOKLOADRESETinst7control_bcd[15..0]ALARMOUTPUTOUTPUTcontrol_bcd[15..0]ALARMinstCOOKINPUTVCCINPUTVCCINPUTVCCLOADRESET ͼ4.17 ζȿØÖÆÆ÷ÄÚ²¿×é³ÉÔÀíͼ
ÆäÖУ¬ÊäÈëÐźÅCLKΪϵͳʱÖÓÂö³å£¬DATAΪÊäÈëÊý¾Ý£¬Êä³öÐźÅcontrol_bcdΪÊä³ö¿ØÖÆÐźţ¬Íâ½ÓÒëÂëµç·£¬ALARMΪ·äÃùÌáʾ¡£
4.2.5. ¿ØÖÆÄ£¿éµÄʵÏÖ
×ÛºÏÉÏÊö·ÖÎö£¬¶Ô¸Ã¿ØÖÆÄ£¿é½øÐÐÍêÕûÉè¼Æ£¬ÒÔÏÂÊǸÃÄ£¿é¶¥²ãÎļþ¹Ø¼ü´úÂë¡£ U1:KZQ PORT MAP
(RESET,SET_T,START,TEST,CLK,DONE,COOK_TMP,TEST_TMP,CLK_TMP,DONE_TMP,ALARM); U2:ZZQ PORT MAP
(DATA1,TEST_TMP,CLK_TMP,DONE_TMP,DATA_TMP,LOAD_TMP,ALARM); U3:KWQ PORT MAP
(CLK,DATA_TMP,COOK_TMP,LOAD_TMP,RESET_TMP,control,ALARM); U4:JSQ PORT MAP
(COOK_TMP,LOAD_TMP,CLK,DATA_TMP,SEC_L,SEC_H,MIN_L,MIN_H,DONE,ALARM);
- 28 -
Ïà¹ØÍÆ¼ö£º