Как начертить диск энкодера (или черчение кодом)
В машиностроении есть такие детали, которые очень утомительно чертить вручную. Это, например, шестерни или диск оптического энкодера. Не всякий бесплатный софт способен сгенерировать симметричный и предсказуемый паттерн по кругу.
Для решение такие проблем существуют текстовые языки построения чертежей: 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 файл с вот таким рисунком диска
Причем для того чтобы начертить эту деталь в теории даже мышка не нужна. Вот такой путь проходит файл исходник *.asy перед тем как стать файлом чертежа *.svg.
Вот простейший скрипт сборки
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 количество черточек.
При этом зарегистрировать эти перемены в пропускании света можно светодиодом и фоторезистором между которыми 2 муаровых диска.
Если наложить 2 диска 500 штрихов и 510 штрихов, то на суммарной картинке формируется 10 муаровых полос. Прям как разница между количествами штрихов 510–500 = 10.
два диска 500 и 510 полос образуют 10 муаровых полос
Если количество полос отличается на 5 полосок, то образуется 5 муаровых секторов.
диск 500+ диск 505 штрихов
Если количество полос отличается на 4 полосок, то образуется 4 муаровых сектора.
диск 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