How can I equally space mounting holes for circular PCB

Greetings. I’m noob at KiCad and have been checking out a number of YouTube videos about KiCad. Here’s the issue: I’m in the process of retrofitting a MetOne Instruments wind vane with a Hall-effect angle sensor IC (a Melexis MLX90316) since the original sensor, a “precision” 360-degree potentiometer, apparently now reads OPEN measuring with a DVM. So, I’m designing a circular PCB utilizing this IC, and there are 3 mounting holes equally spaced (see attached pic). How do I specify in KiCad that I want these holes 120 degrees apart? I tried placing them and using the measurement tool to measure between hole centers but that was driving me NUTS. Ideas?

If you select your hole (or whatever you need to place in a circle) and do a right click under Special tools → Create Array → Circular array you can define how many object you want to have and the angle separation between them.

I hope this helps.

I have the PCB like that with 3 holes (made with KiCad V5).
I placed that pcb (as all my PCBs) with top left sheet corner in its center to have absolute 0,0 at sensible position.
I just placed my holes at counted positions:
H2 is at X=0, Y=-24.
H3 is at X=20.78 (24*sin 60), Y=12 (24*cos 60).
H1 is at X=-20.78, Y=12.

My workflow for this task:

  • create round board-outline around 0,0 coordinate
  • place first mounting hole (either a simple circle on edge.cuts or a footprint from mounting-holes-library) with desired distance to the board-center
  • place second+third mounting hole directly on top of first monting hole (snapping will help this task)
  • select on of the 3 mounting-holes and use Move Exactly tool (RMB-click–>context-menu–>special tools–>move exactly). Set parameters x=0, y=0, angle=120°, “Rotate around local coordinate system”.
  • repeat with second hole, with angle==-120° set.
  • ready

It’s helpful to give the “Move exactly”-tool a shortcut - this tool is very simple to use, very easy to understand and at the same time can solve 95% of all positioning-tasks.


I have created similar device while ago for amateur radio antenna positioning.
My one is base on AS5047D and ATmega328p.
I can share whole project: Drobox link
Feel free to use it and modify if needed.
Pawel Ei9HEB/SP9DR

1 Like

The various solutions above work in this case, but in general, for complex and precise geometry, it can be better to work in FreeCAD and import into KiCad


Thanks Pawel. I’ll check it out. Haven’t been able to do much KiCad’ing lately, but I’ll see how this works. Thanks for sharing your project! - Bruce

Hi, thanks for the procedure. Using KiCad 6.0.4, I made the origin in the center of the sheet (canvas?) and created the edge.cut circle around that origin, placed the mounting holes as you said on top of one another, and used ‘Move exactly’ as you said. but the second hole winds up WAY OUTSIDE the edge.cut circle. What am I doing wrong? OK, I AM a KiCad newbie, for sure.

If you have mounting holes also in schematics there is a Place Footprints action plugin available in PCM (Plugin and Contents Manager)

What am I doing wrong?

without example-project or video of your working-steps I could only guess:

  • have you set the option " Rotate around local coordinate system" ?
  • and is the origin-point of the “local coordinate system” set to the middle of your board-outline-circle?
    • normally the origin of the local coordinate-system is set to global 0,0-coordinate (directly after kicad-startup
    • you can set the local-coordinatesystem to every point you wish - hotkey is space
    • so before executing the rotating-operation: set the local coordinate system to the center of the board-outline-circle:
      • set grid to some coarse value (1mm works)
      • LMB-click to select board-otline-circle: circle is “marked” with a center-point and one point on the radius
      • move mouse-pointer towards the center-point - if the mouse-pointer approaches the center-point the pointer switches to a cross.
      • if the mouse-pointer is directly above the center-point → hit “SPACE”-key → now the origin-point of the local coordinate-system is in the middle of the circle and the rotation should occur around this point

All this steps are simple geometry - you could try to reproduce with pen&paper to understand the geometric operations.

Thanks again, for the reply. So, I hope the attachment is clear. I tried to set the origin to in the canvas (?) and drew the Edge.cut circle around it with a 23.5MM radius. The mounting holes are 3MM from the edge of the board. I put the three mounting holes, labeled 1,2, and 3, on the board with hole 1 at the top and the others directly on top of #1. I then tried to: select hole #2, then right click and select “special tools” → “Move exactly” and chose “Rotate around local coordinates origin”, and the result is in the image. What’s going on? I must have set the origin wrong; I used “Grid origin” under the “Place” drop down menu. This is sorta driving me nuts. Clearly, I need to sit down and RTFM, I suppose. :slight_smile:

It is not me who told you to use this method, but I suppose:

  • rotation against local origin probably was also available in V5,
  • there were no way to set the absolute coordinate origin that I suppose you set (I didn’t tried, don’t have V6 here).

Because of this I suppose that rotation you did is against origin that you didn’t set. Use [Space] hot-key to set it.

When I started to use KiCad (V 4.0.7 those time) I wanted to have 0,0 point in the middle of my PCBs. Because of this I edited the frame deleting from it all lines except the small cross at 0,0 position (top left corner of sheet). I wanted to delete all lines from frame, but if it becomed empty then default frame was used (like at your screen-shot) so I left small cross.
Since then I have all my PCBs placed there (around top left sheet corner). When printing I just select to print PCB itself and not the whole sheet.
I know V6 allows to move the origin but I don’t see any advantage in it over my solution I use since V4.

Clearly, I need to sit down and RTFM, I suppose.

Thats always a good idea, but it’s enough to follow my steps from above exactly. You have omitted the section “set the local coordinate system to the center of the board-outline-circle”. So the local-coordinate-origin remained unchanged == global coordinate origin == top left edge of the drawing sheet border.

The coordinate system inside of Kicad contains different origin points for different use-cases. I just saw this FAQ-article: Coordinate system, grid and origins in the PCB Editor
Look especially at the last section (local coordinates)

I also use the method mentioned described by @Piotr : deleting the whole pcb-drawing-sheet, using only a simple cross at global position 0,0 and then build the pcb-board around that global origin (for symmetriccal boards) or in the upper-right quadrant of this 0,0-origin. example worksheet attached.

Zeichnungsblatt_A3_kreuz_cross.kicad_wks (328 Bytes)

Refer to my posts in this Link.

Because I’m a Portland, Oregon, Harley guy (since 1969), I’ll make it easy for you with a Video to help in conjunction with the Link…

FYI - Aside from the Dimension Tools, the bottom of the PCB panel shows Position Info and the SpaceBar will reset the positions to 0,0

Note: Don’t enter an Angle (the default is full circle. Angle applies to angle between placed items - you don’t want that for your holes…


This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.