Главная » Arduino
Призовой фонд
на декабрь 2020 г.
1. 250 руб.
От пользователей


Мультиметр ZOYI ZT-300AB с Bluetooth

Управление сервоприводом с помощью HMI LCD экрана и STM32

В данной статье мы рассмотрим процесс создания графического интерфейса для HMI дисплея STONE, который управляется посредством последовательного интерфейса (UART), что позволяет существенно экономить время и силы при разработке пользовательского интерфейса для вашего устройства. По сути, вы скорее рисуете интерфейс, а не пишите код.

Итак, насколько прост данный экран в использовании? Давайте разработаем интерфейс дисплея для управления углом поворота сервопривода.

Используемое оборудование:

Начнем с разработки интерфейса HMI дисплея, для этого создадим два изображения. Необходимо сделать идентичные картинки, со всеми элементами в одинаковых позициях. На втором изображении я добавил эффекты нажатия для кнопок.

Рисунок 1. Изображения дисплея без взаимодействия с кнопками (слева) и эффекта нажатия без масштабирования (справа)

Таким образом, при нажатии позиций «+» или «-» будет отображаться второе изображение в соответствующей позиции.

А теперь давайте детально рассмотрим процесс создания проекта.

Создание нового проекта

Для начала, давайте загрузим и установим бесплатное программное обеспечение для проектирования графического интерфейса для дисплеев STONE: https://www.stoneitech.com/support/download

Создаем новый проект, в первую очередь необходимо выбрать разрешение используемого экрана. Я выставляю разрешение 480x272, кроме того, если вы, как и я, используете экран в горизонтальной ориентации, то остальные настройки остаются неизменными. Здесь же вы можете изменить место для сохранения файла.

Рисунок 2. Создание нового проекта

Второй этап – добавляем изображения

Изображения, необходимые для проекта добавляем в папку «Picture file». Имя изображения должно начинаться с цифры, но никаких особых требований к номеру нет. Размер изображения должен соответствовать разрешению вашего экрана, иначе появится сообщение об ошибке.

Я добавил два изображения, по умолчанию отображается изображение с номером 2, поэтому мне необходимо изменить настройки экрана внутри заставки, отображаемой в соответствии с номером изображения (см. Рисунок 4).

Рисунок 3. Добавление изображений

Рисунок 4. Настройка параметров экрана

В-третьих, давайте добавим изображения значков

Если в вашем проекте есть разные типы файлов изображений, нам нужно создать несколько папок .ico для хранения различных типов изображений значков.

Рисунок 5. Добавление значков

В-четвертых, добавляем область сенсорной кнопки

В правой части интерфейса отображаются параметры, здесь настраиваем области нажатия клавиш, соответствующие изображениям нашего интерфейса. Настраиваем отдельно для позиции «-», затем для позиции «+».

Рисунок 6. Добавление области нажатия клавиш

Далее добавляем элемент управления скользящей шкалой

В раскрывающемся меню панели инструментов выберите масштаб ползунка, в столбце справа выбираем изображения для ползунка и настраиваем свойства. Если вы хотите отобразить значок ползунка, отрегулируйте размер элемента управления масштабом ползунка, чтобы он соответствовал вашему значению шкалы. Стоит отметить, что значок может выходить за нижнюю границу шкалы при полном масштабе, вы можете управлять ползунком масштабирования, регулируя размер ползунка. Также можно отрегулировать смещение координаты X, чтобы выровнять её.

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

Рисунок 7. Добавление скользящей шкалы

Следующий шаг – добавление области регулировки перетаскиванием

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

Рисунок 8. Добавление области перетаскивания

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

Рисунок 9. Готовый графический интерфейс

 

Написание кода для STM32

Я использовал STM32Cube для генерации проекта. Настраиваем ШИМ на выходе канала tim2 ch1, минимальная регулировка составляет 1 мкс, это для точности, регулировка сервопривода составляет 0-270°, что соответствует импульсу 0.5-2.5 мс. Выходная частота ШИМ составляет 100 кГц.

Откройте USART1, здесь я использовал DMA, в основном потому, что мне так удобней и привычней. На рисунке 10 показаны снимки экрана с информацией о конфигурации, после завершения настройки генерируем код проекта.

 

Рисунок 10. Настройка генератора проекта STM32Cube

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

Добавляем функции инициализации перед бесконечным циклом while(1):

HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
HAL_UART_Receive_DMA(&huart1,buff,20);
__HAL_UART_ENABLE_IT(&huart1,UART_IT_IDLE);

Если флаг приема данных выставляется, то обрабатываем это событие.

if(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE)==SET)
{
	__HAL_UART_CLEAR_IDLEFLAG(&huart1);
	UART_CLEAR_IDLEFLAG(&huart1); HAL_UART_DMAStop(&huart1);
	//HAL_UART_Transmit_DMA(&huart1,rx_buff,temp);
	HAL_UART_Receive_DMA(&huart1,buff,20); //HAL_UART_Receive_DMA(&huart1,buff,20);
	USART1_RX_STA=1;//receive completion flag
}

Ну и так как у нас довольно простая задача, то решаем её в лоб. Смотрим на принятый проект и выставляем в соответствии с ним скважность выходного ШИМ сигнала.

if(USART1_RX_STA==1)
{
	USART1_RX_STA=0;
	if ((buff[0]==0xa5)&&(buff[1]==0x5a))
	{
		data=(uint16_t)(buff[7]<<8|buff[8])*15/2+500;  __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,data);//Modify the PWM duty cycle.
	}
	memset(buff,0,20);
}

Теперь мы можем скомпилировать проект и прошить экран. Следует отметить, что моя плата напрямую подключена к порту ввода-вывода, здесь на экране паяные соединения J17, которые необходимо пропаять.

Рисунок 11. Паяные соединения

Как только все будет подключено, мы сможем все включить и наконец попробовать протестировать работу устройства. Я сделал несколько фото, для демонстрации того, как все работает!

    

Рисунок 12. Демонстрации работы устройства

Итак, при помощи кнопок «+» и «-» или посредством перетаскивания ползунка, вы можете управлять изменением угла поворота сервопривода. Несмотря на отсутствие видео по данному проекту, все заинтересовавшиеся могут самостоятельно проверить работоспособность проекта, выполнив представленные в статье действия. Благодаря тому, что в основе дизайна пользовательского интерфейса лежат обычные изображения, процесс разработки устройства относительно прост.

Теги:

Опубликована: 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (1) | Я собрал (0) | Подписаться

0
Публикатор #
На форуме автоматически создана тема для обсуждения статьи.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическое сопротивление?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Arduino UNO
Arduino UNO
Raspberry Pi 2 Мини гравер 125 Ватт
вверх