Разработка встроенного ПО для Микроконтроллера stm32f030

Поскольку данный источник питания согласно ТЗ должен был иметь множество защит, возможность автоматического аварийного отключения и модуль индикации выходного напряжения и тока, в нём был задействован микроконтроллер stm32f030c8t6, для которого был написан код на языке Си
в среде IAR Embedded Workbench 7.40 for ARM.

На этапе проектирования источника был создан проект в программе STM32CubeMX, которая была использована для выбора и настройки источника тактирования, GPIO, периферии:

Рис. 1. Окно Pinout программы STM32Cube MX

Микроконтроллер был запущен на максимально возможной для него частоте 48 МГц с использованием внешнего кварцевого резонатора и встроенного ФАПЧ-умножителя частоты.

Рис.2. Окно Clock Configuration

 

Для общения с внешним АЦП и управления модулем индикации были задействованы шины SPI1 и SPI2 соответственно.

Для получения данных о температуре был использован 1-wire интерфейс, представляющий собой UART, работающий в half-duplex режиме.

Обмен данными с зарядным устройством для литий-полимерных аккумуляторов реализован по шине SMBus (модифицированный I2C).


 

Рис.3. Окно конфигурации периферии

 

Программный код был написан на языке Си.

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

Рис.4. Фрагмент файла main.c

В бесконечном цикле находятся процедуры вывода информации о напряжении и токе, измерения температуры и проверки температуры на соответствие допустимым значениям.

Рис.5. Фрагмент файла main.c

 

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

Рис.6. Обработчики внешних прерываний.

 

Во время отладки возникли проблемы с измерением значений напряжения и тока, обусловленные нелинейностью АЦП и измерительного шунта, сопротивление которого менялось из-за разогрева, вызванного протеканием через него тока. Было принято решение применить аппроксимацию степенной функцией в среде MathCad (рис. 7).

После аппроксимации удалось добиться погрешности измерения 5%, что в 2 раза превосходит максимально допустимую погрешность согласно требованиям ТЗ.

Рис.7. Нелинейность данных АЦП (сверху)
и результат аппроксимации (снизу).

 


 

Заключение

 

За время прохождения производственно-технологической практики в
НОЦ «ЦМИД» я освоил на базовом уровне САПРы, используемые для разработки электронных устройств, такие как Altium Desigher и IAR Embedded Workbench; получил новые теоретические и практические знания в области схемотехники и силовой электроники. Так же был успешно завершен проект источника питания для генератора субнаносекундных импульсов.