Physics Theory

The sterling cycle uses 2 isothermal processes and two isovolumetric processes. Because no work is done during isovolumetric processes the work out is the work done in the isothermal process. The definition of work done by a gas is:

using the ideal gas law to replace P the equation becomes:

Because n R and T are constants they can be pulled out of the integral and the equation becomes:

The work done on the gas is simpily the negative of the work done by it. Using properties of logarithms the equation becomes:

Work is done by the gas when it expands isothermally and work is done by it when it is isothermally compressed, so the total work done is the difference between the work done by the gas when it expands and the work done on it when it contracts:

Heat is added by increasing the pressure isovolumetrically and expanding isothermally. For an isovolumetric process:

For an isothermal process the heat transfered is equal to the work done by the gas. So the heat added is:

The total heat added in one cycle is:

and similarly the heat rejected to the cold reservoir in the rest of the cycle is:

the efficiency of any process is the useful stuff over the energy input. In this case that is the work out over the heat in:

The Carnot engine is a theoretical heat engine that is the most efficent a heat engine that operates on the same temperature difference can be. The Carnot efficiency as given by Serway in chapter 22.4 is:

The percentage of the Carnot efficiency that a sterling engine gets is then defined by:

The compression ratio for any engine is simply defined as the minimum volume over the maximum volume. a better discription of compression ratio is provided by Wikipedia

Description of Javasript Code

Only the javascript code that runs the PV diagram will be described here. To see the full source right click on a blank part of the P-V page and select view page source. The diagram is drawn in a canvas element. Unfortunately canvas elements can not draw text due to variations in text size so the scale can not be shown.
		// get the canvas element using the DOM
		var canvas = document.getElementById('diagram');
		// Make sure we don't execute when canvas isn't supported
		var ctx=null;
		if (canvas.getContext){
			ctx = canvas.getContext('2d');
			ctx.clearRect(0,0,canvas.width,canvas.height);
			// use getContext to use the canvas for drawing
		}
	

The canvas element is used to draw the PV diagram. So the first thing that has to be done is to get the element, figure out if the canvas element is supported and clear the canvas. If the canvas element is not supported the only thing that should be skipped is drawing to the canvas.
		window.status="";
		var outputErr=document.getElementById("error");
		outputErr.value="";
		var v1=Number(document.getElementById("v1").value);
		if(v1<=0){
			outputErr.value=window.status="Minimum volume must be greater than zero";
			return;
		}
		var v2=Number(document.getElementById("v2").value);
		if(v2<=v1){
			outputErr.value=window.status="Maximum volume must be larger then minimum volume";
			return;
		}
		var tc=Number(document.getElementById("tc").value);
		if(tc<0){
			outputErr.value=window.status="Cold temp must be greater then zero";
			return;
		}
		var th=Number(document.getElementById("th").value);
		if(th<=tc){
			outputErr.value=window.status="hot temp must be greater then cold temp";
			return;
		}
		var n=Number(document.getElementById("n").value);
		if(n<=0){
			outputErr.value=window.status="the amount of working fluid must be greater then zero";
			return;
		}
	

Next the error outputs (a text output and the status line) are cleared and values are parsed from the input text boxes if an illegal value is found then an error is shown and the function returns
		document.getElementById("w-out").value=""+(n*R*Math.log(v2/v1)*(th-tc)).toPrecision(3)+" J";
		document.getElementById("q-hot").value=""+(n*R*(th*(2/3+Math.log(v2/v1))-2/3*tc)).toPrecision(3)+" J";
		document.getElementById("q-cold").value=""+(n*R*(2/3*th+tc*(Math.log(v2/v1)-2/3))).toPrecision(3)+" J";
		document.getElementById("eff").value=""+(100*Math.log(v2/v1)*(1-tc/th)/((2/3+Math.log(v2/v1))-2*tc/(3*th))).toPrecision(3)+"%";
		document.getElementById("c-eff").value=""+(100*(1-tc/th)).toPrecision(3)+"%";
		document.getElementById("pc-eff").value=""+(100*Math.log(v2/v1)/((2/3+Math.log(v2/v1))-2*tc/(3*th))).toPrecision(3)+"%";
		document.getElementById("cr").value=""+(v2/v1);

	

next the output text boxes are set according to the equations developed in the physics theory above. toPrecision is a function that forces the number to have the specified number of significant figures.
		if(canvas.getContext){
			var vScale=(canvas.width-10)/v2,pScale=(canvas.height-10)/((n*R*th)/v1);
			ctx.clearRect(0,0,canvas.width,canvas.height);
			//draw the center
			ctx.beginPath();
			ctx.moveTo(v1*vScale,canvas.height-pScale*(n*R*tc)/v1);
			ctx.lineTo(v1*vScale,10);
			isotherm(th,v1,v2,n,pScale,vScale,ctx,canvas.height);
			ctx.lineTo(canvas.width-10,canvas.height-pScale*(n*R*tc)/v2);
			isotherm(tc,v2,v1,n,pScale,vScale,ctx,canvas.height);
			ctx.fillStyle = "orange";
			ctx.fill();
			//now draw the lines
			ctx.lineWidth = 4;
			ctx.lineCap = "round";
			ctx.lineJoin = "round";
			ctx.beginPath();
			ctx.moveTo(v1*vScale,canvas.height-pScale*(n*R*tc)/v1);
			ctx.lineTo(v1*vScale,10);
			isotherm(th,v1,v2,n,pScale,vScale,ctx,canvas.height);
			ctx.strokeStyle = "red";
			ctx.stroke();
			ctx.beginPath();
			ctx.strokeStyle = "blue";
			ctx.moveTo(canvas.width-10,canvas.height-pScale*(n*R*th)/v2);
			ctx.lineTo(canvas.width-10,canvas.height-pScale*(n*R*tc)/v2);
			isotherm(tc,v2,v1,n,pScale,vScale,ctx,canvas.height);
			ctx.stroke();
		}else if(!errorShown){
			alert('Your browser does not seem to suport the canvas element. Try using Firefox 1.5 or greater or Safari');
			errorShown=true;
		}
	

finally the PV diagram is drawn to the canvas. The diagram is auto scaled so that maximum pressure point is 10 pixel's from the top and the maximum volume point is 10 pixel's from the right. If the canvas element is not supported then an error is shown when the page is first loaded and not shown again so that the text outputs can still be used. The processes that add heat are shown in red and the processes that reject heat are shown in blue.
		function isotherm(t,vi,vf,n,pScale,vScale,ctx,h){
			const num=1000;
			for(var i=0,v=vi;i<=num;i++,v+=(vf-vi)/num){
				ctx.lineTo(v*vScale,h-pScale*(n*R*t)/v);
			}
		}
	

This function is used to draw isotherms on the P-V diagram. Originally an attempt was made to use Bézier curves but that failed so this function was created which uses lots of little lines to approximate a curve.

Back to Sterling Cycle P-V diagram