Pull to refresh

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

Level of difficultyMedium
Reading time5 min
Views2.5K

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

Как начертить N=500 трапециевидных окон по периметру окружности? Причем так, чтобы всё было симметрично. Как нарисовать детское Солнышко только ровно с 600 лучами?

Для решение таких проблем существуют текстовые языки построения чертежей: 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 = 25.0;
real out_radius = 50.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<number_of_strips; N += 1){
    phi_deg = step_deg*N;
    phi_deg1 = phi_deg;
    phi_deg2 = phi_deg+step_deg/2;
    phi_mid_deg = (phi_deg1+phi_deg2)/2.0;
    phi_mid_rad = phi_mid_deg*3.14159/180.0;
    phi_rad1 = phi_deg1*3.14159/180.0;
    phi_rad2 = phi_deg2*3.14159/180.0;
    path req  =(in_radius*cos(phi_rad1),in_radius*sin(phi_rad1))--(out_radius*cos(phi_rad1),out_radius*sin(phi_rad1))--(out_radius*cos(phi_mid_rad),out_radius*sin(phi_mid_rad))--(out_radius*cos(phi_rad2),out_radius*sin(phi_rad2))--(in_radius*cos(phi_rad2),in_radius*sin(phi_rad2))--cycle;
    //draw(req,0.05bp+black);
    fill(req,black);
    //draw((4.0*cos(phi_rad),4.0*sin(phi_rad))--(8.0*cos(phi_rad),8.0*sin(phi_rad)),0.05bp+black);
}


fill(circle((out_radius+belt/2.0,0.0), 3),white);

Минимальный скрипт запуска интерпретатора Asymptote

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

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


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

Схема ToolChain(а)
Схема ToolChain(а)

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

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 муаровых полос
два диска 500 и 510 полос образуют 10 муаровых полос

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

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

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

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

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

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

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

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

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

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

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

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

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

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

--4 Может быть очень высокая частота следования квадратурного сигнала на высоких оборотах выше, чем частота тактирования микроконтроллера.

Вывод

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

Акроним

Расшифровка

СС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

учебник "Схемотехника Аналого-Цифровых Преобразователей", В.Б. Топильский, Мир Элкектроники, 2014

https://www.youtube.com/watch?v=7Asox-ypoC0

Only registered users can participate in poll. Log in, please.
Вы чертили кодом?
62.96% да17
37.04% нет10
27 users voted. 5 users abstained.
Only registered users can participate in poll. Log in, please.
Вы пользовались языком черчения Graphviz?
18.52% да5
81.48% нет22
27 users voted. 4 users abstained.
Only registered users can participate in poll. Log in, please.
Вы пользовались языком черчения Asymptote?
7.41% да2
92.59% нет25
27 users voted. 4 users abstained.
Tags:
Hubs:
Total votes 14: ↑14 and ↓0+14
Comments13

Articles