Visits: 1492
Принцип построения управления аналоговым сервоприводом от PIC-контроллера.
Подключение аналогового сервопривода выполняется по трем проводам:
- черный (коричневый) – общий.
- красный – питание (4,8-6,0 Вольт).
- белый (желтый) – управление.
Сервопривод позволяет поворачивать вал до 180 градусов. Для управления необходимо на белом проводе сформировать управляющие импульсы длительностью от 1 до 2 миллисекунд с периодом 20 миллисекунд. Длительность импульса управления от 1 до 2 мс – это стандартные параметры и реально могут отличаться для выполнения полного вращения вала (на 180º), но на практике для управления исполнительными механизмами применяется меньшие углы. Период тоже понятие относительное и от может быть как меньше так и больше, все зависит от параметров системы управления и самого выбранного привода.
Удобно для управления использовать CCP модули микроконтроллера. В новых современных моделях (например, PIC16F1936) их количество достигает 6. Это количество модулей достаточно для создания полноценных устройств управления моделями, роботами…
CCP-модуль позволяет создавать независимые ШИМ которые могут с успехом управлять аналоговыми (и цифровыми) приводами.
При настройке CCP модуля в режиме ШИМ нам доступно 10 бит управления длительностью. Для управления длительностью необходимо загружать числовое значение в регистр CCPRxL (8 бит) и младшие биты (0-1) в регистр CCPxCON. В режиме ШИМ CCP модуль работает совместно с таймерами TMP2/4/6. Эти таймеры формируют период ШИМ. Формируемая длительность тесно завязана с тактовой частотой микроконтроллера и для аналогового привода придется задавать более низкую тактовую частоту что не всегда приемлемо для быстродействия системы управления.
Таймер имеет следующую структуру:
На вход поступает тактовая частота деленная на 4, после этого идет предделитель и сам таймер, с регистром периода. Нам необходимо сформировать период с длительностью близко к 20 мс. 20 мс – это частота на 50 Гц. Высчитаем приемлемую тактовую частоту: как это сделать? Необходимо
- требуемую частоту (50 Гц) умножить на величину делителя таймера (256, значение берем максимальные, для получения максимальность тактовой часты).
- далее умножаем на максимальное значение предделителя 64.
- потом на 4 (входная тактовая от частоты задающего генератора контроллера)
50*256*64*4=3276800
Мы получили тактовую больше трех мегагерц, выберем 4 (из стандартного ряда внутреннего генератора)
Проверим при заданной тактовой какая у нас будет длительность периода
Период = 1/(4000000/4/64/256) = 1/60 = 16 мс.
Получаем 60 герц на выходе это где то 16 мс. Для нашего привода S3003 это в приемлемом допуске.
Настройка тактового генератора в программе
// настройка генератора 4мГц OSCCON=0b01101000; // |||||||| // ||||| ++-- SCS<1:0> основной генератор (работа через PLL) // |++++----- IRCF<3:0> 1101 = 4 MHz HF // +--------- SPLLEN умножитель 0-отключен, 1-включен
Настройка модуля CCP и таймера TMP2 в режиме ШИМ.
CCP1CON=0b00001100; // настройка модуля в режиме шим T2CON=0b00000111; // настройка таймера PR2=255; // задание периода ШИМ CCPR1L=0; // очистка регистра длительности =0
Теперь для управления сервоприводом необходимо определиться со значениями загружаемыми в CCP модуль для формирования длительности импульса в пределах 1-2 мс.
Дискретность длительности формируемого ШИМ рассчитать просто. Если период 16 мс, то 16/1024 (10 разрядный ШИМ) получаем 0,016 мс. Для формирования длительности импульса в 1 мс необходимо загрузить число 1/0,016=62, а для формирования длительности 2 мс = 125. Но это все теоретические выкладки (но они конечно тоже будут работать и формировать вращение вала на угол в 90%). Но если необходимо будет подобрать больший угол поворота, то необходим экспериментальный подход. В моем приводе максимальный угол поворота близкий к 180 градусам формируется при подаче длительностей в диапазоне от 0,63 мс до 2,23 мс.
При этом максимальное и минимально значение записываемое в ШИМ составляет 40 – 140.
Для удобство управления, проще вводить (как мне кажется) данные в процентах. Т.е. привод в крайнем “левом” положении 0%, посредине – 50%, кране “правое” – 100%.
В программе введем константы
#define max_p 140; // масимальный параметр в шим соответствующий 2 мС #define min_p 40; // минимаотный параметр соответствующий 1 мС
они нам дадут возможность более гибко подходить к настройке привода. а также две переменные коэффициент для пересчета и управляющий параметр в процентах:
char koef; //коэффициент преобразования char polog; // положение в процентах от 0-100%
вычисление коэффициента сделаем при инициализации программы один раз
koef=max_p; // koef=koef - min_p; // koef=(koef*10)/100; //
а для загрузки значения в ШИМ для формирования управляющих импульсов
//преобразование процентов в значение для загрузки в ШИМ pwm_reg=((koef*polog)/10)+min_p; pwm_reg2=pwm_reg<<6; // pwm_reg2=pwm_reg2>>2; // CCP1CON &= 0b11001111; // CCP1CON |= pwm_reg2; // CCPR1L=pwm_reg>>2; //
Для тестирования возьмем плату ILLISSI-B4-03-primum с контроллером PIC16F1936. А для управления и индикации плату ILLISSI-4С-01-secundo.
Подключение сервопривода к плате ИЛЛИССИ-4В
Фото демопроекта
Видео работы демонстрации работы сервопривода.
Файлы проекта
[box title=”Файлы для загрузки” color=”#521BDE”]Компилятор HI-TECH C Compiler for PIC10/12/16 MCUs (PRO Mode) V9.83, MPLAB 8.88.[wpdm_file id=72][/box]
Это может быть интересно
- Акриловый корпус для платы ch-4000Visits: 638 Плата ch-4000 подходит для монтажа в корпуса на дин рейку, но для домашней автоматики необходимо что-то другое, поэтому был разработан корпус из акрила который позволит создавать настольные и настенные устройства. Корпус …
- Униполярный шаговый двигатель – часть 2Visits: 766 В этой части только итог и версия 2.0 универсальной, которая позволяет управлять шаговым двигателем во всех трех режимах и 3.0 специальной библиотеки только для одного полушагового режима. В …
- Проблемы классической светомузыкиVisits: 2021 Светомузыка – что это такое? Определение: Светомузыка (жаргонное: цветомузыка) — вид искусства, основанный на способности человека ассоциировать звуковые ощущения со световыми восприятиями. Такое явление в неврологии получило название …
- MCC – K42 – настройка модуля DMAVisits: 724 MCC – в версии v.3.95.0 и начиная ядра 4.85.0 конфигуратор предоставляет графический интерфейс для настройки модуля DMA. Для начала: Посмотреть какая версия МСС можно в закладке версии, если …
- УКВ – радиоприем, часть 2Visits: 6170 Пришло свободное время решил вторую часть проекта реализовать (правда есть мысль и третью с использование цветного OLED и функцией ch-светомузыки, но это только задумка… Для понимания функций интегрального …
- My libraries for Altium DesignerVisits: 3779 Attention, this version of the database is outdated today. See updates in articles https://catcatcat.d-lan.dp.ua/altium-designer-my-setup-system-and-project-structure and https://catcatcat.d-lan.dp.ua/altium-designer-my-setup-system-and-project-structure-v23-2/ My libraries for Altium designer (Updated V – 29/05/2022) (c) 2021 …
- Просто о внешних переменныхVisits: 754 Часто возникает задача когда необходимо предавать данные между модулями программы. Например, передать данные между файлами, или управлять работой модулей. Для этого создаем заголовочный файл и описываем наши переменные как …
- Проект с использованием MCC часть 02Visits: 2236 Когда мы запустили конфигуратор, самое главное понять, что с этим делать и как проверить, то что мы делаем работает или нет. Для начала настроим регистры конфигурации микроконтроллера и настроем …
- Просто о структурах и объединениях в СиVisits: 2133 Какие задачи нам позволяют решать структуры и объединения? Для разработчика встроенных систем эффективность и компактность кода всегда на первом месте. Если программировании на Ассемблере ты сам определяешь как …
- CAN – Controller Area NetworkVisits: 1054 Controller Area Network (CAN) первоначально был создан немецким поставщиком автомобильных систем Робертом Бош в середины 1980-х для автомобильной промышленности как метод для обеспечения возможности надежной последовательной связи. Целью было сделать автомобили более надежными, …