Как начертить диск энкодера (или черчение кодом)

eea12dca323a1059dcc604d6bed7885d.JPG

В машиностроении есть такие детали, которые очень утомительно чертить вручную. Это, например, шестерни или диск оптического энкодера. Не всякий бесплатный софт способен сгенерировать симметричный и предсказуемый паттерн по кругу.

Для решение такие проблем существуют текстовые языки построения чертежей: Graphviz, Asymptote и др.

Сначала я смотрел в сторону Graphviz, однако Graphviz при повороте искажает форму фигур. Пришлось искать альтернативу Graphviz.

Существует ещё язык программирования для черчения Asymptote: The Vector Graphics Language отличный вариант для авто генерации чертежей.

Постановка задачи.

Надо начертить диск оптического энкодера по параметрам.

Параметр

Переменная

1

Количество черточек

N

2

Скважность

T

3

внешний диаметр

D

4

внутренний диаметр

d

Понятное дело, что чертить вручную каждое окно такого диска можно замучиться уже на 8 м окне, а надо обычно 500–800 окон. Тут на помощь приходит интерпретируемый язык разметки точной графики Asymptote: The Vector Graphics Language. Установить его можно тут https://asymptote.sourceforge.io/

После установку Asymptote появляется папка
C:\Program Files\Asymptote
Также для работы этого интерпретатора нужна утилита GPL Ghostscript
C:\Program Files\gs\gs10.01.2

По умолчанию утилита asy генерирует *.eps файл. Но можно и принудительно заставить сгенерировать *.pdf.

settings.outformat = "pdf";
unitsize(1mm);

real in_radius = 50.0;
real out_radius = 100.0;
real number_of_strips=365.0;
real belt = 10.0;

real step_deg=360.0/number_of_strips;

//draw((0,0)--(8,8),0.2bp+red);
dot((0.0,0.0));



draw(circle((0.0,0.0), out_radius+belt), 0.1bp+ black);
fill(circle((0.0,0.0), out_radius+belt),black);

fill(circle((0.0,0.0), out_radius),white);

draw(circle((0.0,0.0), in_radius), 0.1bp+ black);

fill(circle((0.0,0.0), in_radius),black);

fill(circle((0.0,0.0), 3),white);
   
draw(circle((0.0,0.0), out_radius), 0.1bp+ black);
real phi_deg;
real phi_rad;

real phi_deg1;
real phi_rad1;
real phi_deg2;
real phi_rad2;

real phi_mid_deg;
real phi_mid_rad;
real N;

for( N=0.0; N

Код запуска интерпретатора

cls
"C:\Program Files\Asymptote\asy.exe" -V -f pdf EncoderDisk.asy

Получился такой *.pdf файл с вот таким рисунком диска

bada66d1cd7e3fc9c9814317e0a9886b.png

Причем для того чтобы начертить эту деталь в теории даже мышка не нужна. Вот такой путь проходит файл исходник *.asy перед тем как стать файлом чертежа *.svg.

2e1132356d0eaab3f558af7748a2815a.png

Вот простейший скрипт сборки

cls
"C:\Program Files\Asymptote\asy.exe" -V -f pdf drawing.asy
inkscape.exe --without-gui --file=drawing.pdf --export-plain-svg=drawing.svg
start chrome -open %cd%/drawing.svg

Этот диск с черточками — это не просто абстрактная задачка. Это основа прецезионных датчиков угла основанных на муаровом эффекте. Суть проста. Если взять 2 прозрачных диска (например из оргстекла), нарисовать на них этот узор, насадить 2 диска с узорами на одну ось и начать вращать диск 2 по отношению к диску 1, то при перемещении на угол 1/N свет изменится с максимальной яркости до минимальной. За один оборот диска яркость будет меняться N раз, где N- количество черточке. Значит можно увеличивать точность просто увеличивая N количество черточек.

02c492e473253c7391e11e963dfd5b42.png

При этом зарегистрировать эти перемены в пропускании света можно светодиодом и фоторезистором между которыми 2 муаровых диска.

Если наложить 2 диска 500 штрихов и 510 штрихов, то на суммарной картинке формируется 10 муаровых полос. Прям как разница между количествами штрихов 510–500 = 10.

два диска 500 и 510 полос образуют 10 муаровых полос

два диска 500 и 510 полос образуют 10 муаровых полос

Если количество полос отличается на 5 полосок, то образуется 5 муаровых секторов.

диск 500+ диск 505 штрихов

диск 500+ диск 505 штрихов

Если количество полос отличается на 4 полосок, то образуется 4 муаровых сектора.

диск 500 штрихов наложенный на диск 504 штриха

диск 500 штрихов наложенный на диск 504 штриха

Если установить 2 LEDа и фоторезисторы то получится датчик угла.

Достоинства датчиков угла на муаровом эффекте:

++1 можно добиться очень высокой точности измерения углов. Чем больше штрихов на оборот, тем выше точность.

++2 не имеет особого значения место установки и размер источника света и датчика яркости. Площадь возможного места установки можно выбирать по желанию конструктива.

++3 Если сделать разное количество штрихов на дисках, то можно определять не только угловую скорость вращения, но и направление вращения. Понадобится еще одна пара светодиод и датчик освещенности. Получится инкрементный энкодер на муаровом эффекте.

++4 не требуется точного источника освещения. Подойдет обычны светодиод с линзой и фоторезистор с быстрым откликом.

Недостатки датчиков на муаровом эффекте:

--1 надо очень аккуратно изготавливать диски с черточками

--2 Нет возможности делать измерение абсолютного значения угла. Приходится как в маховиках автомобиля делать на диске ключ. Энкодер получается инкрементным.

--3 Если между LED и датчиком света окажется пыль или песок, то датчик перестанет работать. Нужен конструктив с изоляцией от пыли.

Вывод

Чтобы быть чертежником надо быть программистом и ориентироваться в тригонометрии.

Акроним

Расшифровка

ССW

counterclockwise

CW

clockwise

GPIO

general-purpose input/output

ADC

analog-to-digital converter

MCU

MicroController Unit

LED

light-emitting diode

Links

https://convertio.co/ru/pdf-svg/

https://habr.com/ru/articles/466863/

https://bstudy.net/847709/estestvoznanie/datchiki_osnovannye_muarovom_affekte

https://en.wikipedia.org/wiki/Moiré_pattern

https://habr.com/ru/articles/505190/

https://www.youtube.com/watch? v=46FTKEdsFPs&lc=Ugym_bJ-jQ5ncP_aBTV4AaABAg

https://www.youtube.com/watch? v=TBu9EZhWAeM

https://www.youtube.com/watch? v=17_-DeitsJU

© Habrahabr.ru