555 timer - large inaccuracies with precision components
The 555 timer uses an analog RC as its timebase, but that's never going to be very stable. Even with high precision resistor (0.01%) and capacitor (10%), there is poor initial accuracy and significant drift with temperature.
There are improvements such as Analog Devices LTC6900CS5#TRMPBF, which can generate 20kHz using a single 100k resistor to determine the frequency. But this kind of device is still only about 0.1% stability, it may be ok depending on your requirements, but this kind of thing is usually targeted at very cost-sensitive high-volume applications.
Improve the timing accuracy by using a quartz crystal based timebase instead. Either a quartz crystal driven by an oscillator circuit, or a whole &quot;crystal oscillator&quot; component which includes everything.
For example, one solution for generating 20kHz with good stability is to use a 10MHz crystal oscillator (ECS-2200BX-100, Mouser Part # 520-2200BX-100 is +/-50ppm, 0C ~ 70C), then divide by 500 using a 74HC4040 12-bit binary counter (clear at code 0001_1111_0011). Use a bunch of 74HC86 XOR gates to drive the 74HC4040 CLR clear input when when the 74HC4040 output code matches the target code.
Each of the 74HC chips as well as the 10MHz crystal oscillator requires a local 0.1uF ceramic capacitor, within 5mm, to act as a power supply bypass. This is a commonly known construction technique that usually isn't stated in the datasheet, but is required for reliable operation.