STM32CubeMX. При запуске программы появится окно, где нам предложат создать или загрузить проект (см. рис. 7.1). Рисунок 7.1 Окно STM32CubeMX.


Чтобы посмотреть этот PDF файл с форматированием и разметкой, скачайте его и откройте на своем компьютере.


Министерство образования и науки Российской Федерации

Федеральное государственное автономное образовательное учреждение

высшего образования

«Санкт
-
Петербургский политехнический
университет Петра Великого»

Институт компьютерных наук и технологий

Высшая школа киберфизических систем и управления



Работа допущена к защите

И.о директора ВШ КФСУ

________В.П. Шкодырев

«___»__________2017 г.



ВЫПУСКНАЯ КВАЛИФИКАЦИОННАЯ РАБОТА

МАГИСТЕРСКАЯ ДИССЕРТАЦИЯ


ЛАБОРАТОРНЫЙ СТЕНД ДЛЯ ИССЛЕДОВАНИЯ АЛГОРИТМОВ УПРАВЛЕНИЕ
ДВИГАТЕЛЕМ ПЕРЕМЕННОГО ТОКА

направление 27.04.04


Управление в технических системах

магистерская программа 27.04.04_02 «Автоматизация технологических процессов
и производс
тв»

Выполнил

студент гр. 63503
/2






А.Е. Щербаков

Научный руководитель

к.т.н., доцент


&#x 4 ;&#x 4 ; 4;&#x -3;&#x 4 ;&#x 4 -; 4;&#x 4 ;&#x -3 ;&#x 4 0;


А.Л. Логинов



Санкт
-
Петербург

2017



РЕФЕРАТ

с.7
0
, рис.
43
, табл.
1
, черт.1

УСТАНОВКА НИЗКОГО НАПРЯЖЕНИЯ
,
ЛАБОРАТОРНЫЙ СТЕНД
,
STM
32,
ARM
,
ПРЕОБРАЗОВАТЕЛЬ ЧАСТОТЫ
.

Разработан
а

установк
а

низкого напряжения,
позволяющая

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

использова
на

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

Рассмотрены

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


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


Составлен и выполнен пример лабораторной работы, позволяющий
ознакомиться с установкой и средой написания програм
м, проведено тестирование
работоспособности

программы.





ABSTRACT

P
ages
7
0
,
Figures 43
, table
s

1
, blueprints

1

INSTALLATION OF LOW VOLTAGE, LABORATORY STAND, STM32, ARM,
FREQUENCY CONVERTER.

A low
-
voltage setup has been develo
ped that makes it possible to research

the
algorithms for scalar an
d vector control of an AC motor.
The installation can be used to
familiari
ze students with the modern element base of electronic components, teach
programming modern microcontrollers and build automatic control systems.

Considers advantage
s of frequency control of motor.
Studied the existing
implementation of frequency converter
s and the problems of scalar and vector control.

A functional diagram of the laboratory stand was developed, a choice of equipment
was made, a schematic diagram was drawn up, a printed circuit board trace was made,
and a connection instruction was compile
d.

An example of laboratory work has been compiled and executed, which makes it
possible to get acquainted with the installation and the environment for writing programs,
and the program was tested.


5


Содержание

1 Введение

................................
................................
................................
.........................

7

2 Обзор существующих реализаций преобразователей

................................
...............

7

2.1 Аппаратные реализации частотных преобразователей.

................................
.....

7

2.2 Методы управления электроприводом

................................
...............................

10

3 Задание

................................
................................
................................
.........................

12

4 Функциональная схема

................................
................................
...............................

13

5 Выбор оборудования

................................
................................
................................
...

15

5.1 Микр
оконтроллер

................................
................................
................................
.

15

5.2 Интерфейсы

................................
................................
................................
..........

16

5.3 Инвертор и драйверы транзисторов

................................
................................
...

16

5.4 Энкодер

................................
................................
................................
.................

16

5.5 Датчики

................................
................................
................................
..................

17

6 Разработка принципиальной схемы

................................
................................
..........

17

6.1 JTAG
-
интерфейс

................................
................................
................................
...

19

6.2 USB

................................
................................
................................
.........................

20

6.3 Интерфейс RS
-
485

................................
................................
................................
.

20

6.4 Инте
рфейс CAN

................................
................................
................................
....

21

6.5 Силовая часть

................................
................................
................................
........

22

6.6 Датчики тока

................................
................................
................................
..........

25

6.7 Дискретные входы и выходы

................................
................................
...............

26

6.8 Энкодер

................................
................................
................................
..................

27

6.9 Микроконтроллер

................................
................................
................................
.

28

6


6.10 Печ
атная плата и инструкция по подключению

................................
..............

30

7 Разработка программной части. Пример лабораторной работы.

...........................

34

7.1 Выбор среды разработки и установка программного обеспечения

.................

34

7.2 Настройка периферийного оборудования и выводов микроконтроллера

......

35

7.3 Подготовка проекта

в SW4STM32

................................
................................
......

43

7.4 Главная программа
................................
................................
................................

46

7.5 По
дпрограмма конфигурации тактового генератора

................................
........

47

7.6 Подпрограмма конфигурации АЦП

................................
................................
....

49

7.7 Подпрограмма конфигурации таймера
TIM
1

................................
....................

50

7.8 Подпрограмма конфигурации таймера
TIM
3

................................
....................

51

7.9 Подпрограмма активации каналов ШИМ

................................
..........................

52

7.10 Подпрограмма обработки прерывания таймера
TIM
3

................................
....

53

7.11 Тестирование

................................
................................
................................
.......

54

8 Заключение

................................
................................
................................
..................

56

Список литературы

................................
................................
................................
........

58

Приложение А

................................
................................
................................
................

59





7


1
Введение

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

При
менение преобразователей частоты позволяет избавиться от множества
недостатков, возникающих при регулировании скорости вращения асинхронного
двигателя с помощью введения резисторов в цепь ротора (снижение жесткости
механических характеристик с уменьшением
частоты вращения, значительные
потери энергии), с помощью изменения напряжения, подводимого к статору
(
уменьшается КПД двигателя, уменьшается критический момент, диапазон
регулирования сравнительно небольшой
).

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

2 Обзор существующих реализаций преобразователей

2.1 Аппаратные реализации частотных преобразователей.

Большинство преобразователей частоты выполнены с промежуточной цепью
постоянного тока по схеме выпрямитель
-

инвертор

(рис

1.1). Выпрямители бывают
неуправляемые, управляемые и полууправляемые.


8



Рисунок 2.1 Функциональная схема преобразователя частоты.

Трехфазные неуправляемые выпрямители выполняются в виде мостовой
схемы на диодах (рис.1.2), обладают высоким КПД,
высоким качеством
выпрямленного напряжения, простотой, надежностью и низкой ценой. Главный
недостаток
-

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


Рисунок 2.2 Схема неуправляемого трехфазного выпрямителя.

Трехфазные управляемые выпрямители выполняются так же выполняются в
виде мостовой схемы, но вмес
то диодов используются тиристоры (рис.1.3). Такие
выпрямители обладают высоким КПД, возможностью рекуперации энергии в сеть,
9


но имеют повышенные пульсации выпрямленного напряжения и меньший
коэффициент мощности. Такой тип выпрямителей дороже неуправляемых.


Рисунок 2.3. Схема управляемого трехфазного выпрямителя.

Полууправляемые выпрямители выполняются на диодах и тиристорах
(рис.1.4), таким образом позволяя регулировать напряжение на выходе
выпрямителя, но не обладают возможностью рекуперации энергии.


Рисунок 2.4 Схема полууправляемого трехфазного выпрямителя.

В цепи постоянного тока устанавливаются С
-

или LC
-
фильтр для
сглаживания и поддержания выпрямленного напряжения. Емкость конденсатора
составляет около 2000 мкФ.

Инвертор напряжения представляет со
бой три однофазных полумостовых
инвертора, выполненных на полевых транзисторах с защитным диодом для
шунтирования импульса тока, возникающего при отключении индуктивной
нагрузки(рис.1.5).

10



Рисунок 2.5. Схема трехфазного инвертора напряжения.

2.2 Методы уп
равления электроприводом

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

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

Различные скорости движения рабочего органа могут потребоваться при
разных этапах обработки детали, такое характерно, например, для технологическ
их
процессов, выполняемых роботами
-
манипуляторами.

Для решения этих задач применяют скалярное или векторное частотное
регулирование.

Асинхронный привод со скалярным управлением применяется там, где
необходимо поддерживать постоянную скорость вращения вала, например, в
приводах различных насосов, компрессоров, вентиляторных установок. При этом
используются датчики скорости. Или поддержив
ать определенный параметр,
11


например, давление в гидросистеме, при использовании соответствующего задаче
датчика.

Данный метод управления прост в реализации и нетребователен к
вычислительной мощности, но имеет недостатки. К таковым относятся
невозможность р
егулирования скорости при отсутствии датчика скорости на валу
двигателя, так как скорость зависит от нагрузки на валу, и невозможность
одновременного регулирования скорости и момента на валу даже при наличии
дорогостоящего датчика момента.

Указанные недост
атки решаются с помощью векторного управления
электроприводом. Существует два типа систем векторного регулирования: Первый
тип представляют собой системы без обратной связи по скорости (так называемые
бездатчиковые системы). В таких системах датчик скорост
и вращения вала не
устанавливается. Второй тип


системы с обратной связью по скорости. При
векторном управлении в систему используется математическая модель двигателя,
благодаря чему возможен математический расчет момента на валу двигателя и
скорость вращ
ения вала. Используются только датчики тока в фазах статора. Это
обеспечивает независимое управление моментом и скоростью с низкой
инерционностью. К недостаткам векторного управления можно отнести высокую
вычислительную сложность и колебания скорости при п
остоянной нагрузке на
валу. Данный недостаток решается введением обратной связи по скорости и
установкой датчика скорости на вал
двигателя. [
1
]



12


3 Задание

Разработать установку низкого напряжения на базе микроконтроллера ARM,
которая бы позволяла производ
ить исследования алгоритмов управления
двигателем переменного тока, а также использоваться для обучения студентов
различным аспектам программирования микроконтроллеров и построения систем
автоматического управления.

Лабораторный стенд должен иметь
следующие коммуникационные
интерфейсы:



RS
-
485



CAN



JTAG



USB

На установке должны быть расположены по 16 дискретных входов и выходов,
из них 8 входов в виде кнопок и 8 выходов в виде светодиодов.

Так же требуются универсальные клеммные контакты для подключени
я
различных типов энкодеров с напряжением питания 3.3 В и 5 В.



13


4 Функциональная схема

На рис.3.1 представлена функциональная схема лабораторного стенда для
исследования алгоритмов управления двигателем переменного тока.


Рисунок 4.1 Функциональная схема

лабораторного стенда.

На схеме обозначены:

ЛБП


лабораторный блок питания;

БП
-

блок питания;

СУ


система управления;

АД


асинхронный двигатель;

ДН
1



датчик напряжения в цепи постоянного тока;

ДТ


датчики тока в фазах
A
,
B

и
C
;

ДН
2



датчики напряжения в фазах
A
,
B

и
C
;

Э


энкодер;

DIO



дискретные входы и выходы.


14


Питание стенда осуществляется от лабораторного блока питания ЛБП
постоянного тока. Напряжение питания составляет 24 В. Блок питания БП понижает
напряжение до 5 В

для питания микросхем и микроконтроллера. В цепи
постоянного тока установлен датчик напряжения ДН
1
, который позволит
фиксировать падение или скачок напряжения и при опасности для оборудования
отключить инвертор. Инвертор представляет собой три однофазных
полумостовых
инвертора, выполненных на транзисторах. На выходных фазах А, В и С инвертора
установлены датчики тока ДТ и напряжения ДН
2
. Датчики тока необходимы для
реализации алгоритмов векторного управления двигателем переменного тока. На
валу двигателя у
станавливается энкодер Э, с помощью которого реализуется
обратная связь по скорости, а также есть возможность измерить угол поворота вала.
Система управления СУ выполнена на базе микроконтроллера ARM, оборудована
коммуникационными интерфейсами RS
-
485, USB,

CAN, 8
-
ю кнопками для ввода и
8
-
ю светодиодами. Так же выведены на отдельные контакты по 8 дискретных
входов и выходов, доступные пользователю для подключения своих периферийных
устройств, таких как кнопки, транзисторы, дисплеи, световые индикаторы и т.п.



15


5 Выбор оборудования

5.1

Микроконтроллер

Система управления выполнена на базе микроконтроллера STM32F407
фирмы STMicroelectronic в корпусе LQFP100. Данный микроконтроллер выполнен
на 32
-
разрядном ядре
ARM

Cortex
-
M
4 с
RISC
-
архитектурой команд с
максималь
ной тактовой часто
той ЦПУ до 168 МГц. Объем Flash
-
памяти для записи
программ составляет 1 МБайт, есть встроенный параллельный интерфейс (8080 и
6800) для подключения жидкокристаллического индикатора (ЖКИ), ес
ть 3
энергосберегающих режима («сон»
, останов и
ожидание), до 24 аналоговых входов
(три из которых 12
-
разрядные). ЦПУ содержит модуль операций с плавающей
точкой[
2
]. Так, перемножение двух вещественных чисел осуществляется за 1 такт,
деление выполняется за 14 машинных тактов[
3
]. Содержит 17 таймеров раз
личного
назначения, выходные контакты которых могут использоваться в качестве выводов
управляющего ШИМ
-
сигнала, а также для подключения цифровых датчиков угла
поворота вала (энкодеров). Поддерживается 140 маскируемых источников
аппаратных прерываний.

Из к
оммуникационных интерфейсов имеет два последовательных интерфейса
UART
, четыре
USART
, три
SPI
, три
I
2
C
, CAN, USB, а также интерфейс JTAG для
загрузки и отладки программ.[
4
]

Напряжение питания 3.3 В. Блок питания понижает напряжение до 5 В,
поэтому
необходимо установить стабилизатор напряжения, который понизит
напряжение до 3.3. В.

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


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

5.2 Интерфейсы

Интерфейс
RS
-
485 будет реализован с помощью микросхемы
ADM
2682
EBRIZ

фирмы
Analog

Devices
, которая в свою очередь будет подключена
к послед
овательному интерфейсу
UART

на микроконтроллере. Скорость передачи
данных 16 Мбит/с. Микросхема так же обеспечит гальваническую развязку между
микроконтроллером и сетью. Интерфейс
CAN

будет реализован через микросхему
ADM
3053
BRWZ

фирмы
Analog

Devices
, подк
люченную к выходам
CAN
-
интерфейса на микроконтроллере, и обеспечит гальваническую развязку. Скорость
передачи данных 16 Мбит/с. Данные микросхемы имеют напряжение питания 5 В.

5.3 Инвертор и драйверы транзисторов

Для инвертора были выбраны полевые транзис
торы со встроенным защитным
диодом
IRF
2907
Z
.
Так как микроконтроллер не может создать нужное напряжение
(10
-
20 В), д
ля открытия/закрытия транзисторов требуется драйвер. Выбран драйвер
ключей нижнего и верхнего уровней
IR2110, напряжение питание логики от
3.3 В
до 20 В, напряжение на выходе 10
-
20 В. Время задержки драйвера на
открытие/закрытие составляет 120

нс[
5
]. Так же драйвер обеспечивает
гальваническую развязку между системой управления и силовой частью схемы.

5.4 Энкодер

Линии передачи данных энкодер
а будут подключаться к выводам
микросхемы MC34C86 производства фирмы Motorola. Данная микросхема
-

17


четырехканальный дифференциальный приемник, предназначенный для цифровой
передачи данных. Блок
-
схема микросхемы представлена на рис 4.1[
6
].


Рисунок 5.1.
Блок
-
схема микросхемы MC34C86.

Напряжение питания микросхемы 5 В. Задержка передачи сигнала со входа
на выход 18 нс.

5.5 Датчики

Измерение напряжения в цепи постоянного тока и на выходных фазах
инвертора будет осуществляться с помощью делителя напряжения н
а резисторах.
Для измерения силы тока в фазах выбраны датчики тока на эффекте Холла GHS 10
-
SME фирмы LEM с максимальным измеряемым током 10 А. Напряжение питания
датчика 5 В.

6 Разработка принципиальной схемы

Раз
работанная принципиальная схема представлена на рис.6.1. Рассмотрим ее
подробнее.

18


Рисунок 6.1
Принципиальная схема лабораторного стенда.

19


6.1 JTAG
-
интерфейс

Принципиальная схема отладочного интерфейса
представлена на рис.6.2.


Рисунок 6.2 Интерфейс JTAG.

JP1 представляет собой
PLD
-
разъем с 2х10 контактами для подключения
шлейфа программатора к лабораторному стенду. В шлейфе имеется линия 3.3 В,
таким образом для программирования оборудования не требует
ся его запитывание
от сети. Резисторы R1


R5 номиналом 10 кОм обеспечивают изоляцию сигнальных
линий по току. Линия JNTRST служит для передачи сигнала перезагрузки
микроконтроллера от программатора. По линии JTDI передаются
последовательные данные в напра
влении микроконтроллера. Линия JTMS
обеспечивает перевод схемы в различные режимы работы. Линия JTCK
обеспечивает тактирование автомата управления. Линия JTDO служит для
передачи данных от микроконтроллера к программатору. Линия RST является
вспомогательно
й и так же, как и JNTRST может использоваться для перезапуска
микроконтроллера.


20


6.2 USB

Принципиальная схема реализации USB представлена на рис.6.3.


Рисунок 6.3 Подключение USB.

Для подключения к ПК выбран разъем USB тип B ввиду его широкой
распространен
ности, высокой надежности и долговечности. Данные передаются
дифференциально по линиям D+ и D
-
. На линии USBD+ и USBD
-

подключены
резисторы R15 и R16 номиналом 27 Ом для ограничения протекающего тока. Так
же к этим линиям подключаются керамические конденса
торы емкостью 47 пФ для
фильтрации помех.

6.3 Интерфейс RS
-
485

Схем
а реализации интерфейса RS
-
485
на микросхеме ADM2682 представлена
на рис 6.4.


21



Рисунок 6.4 Интерфейс RS
-
485.

Разъем Х4 представляет собой клеммную

колодку с тремя клеммами для
подключения линий данных А и В и земляного провода. Земляные контакты
GND2_1 и GND2_2, а
также

контакты V_ISOIN и V_ISOOUT попарно соединены.
Земляной провод с клеммы 1 подключен к линии GND2. Клеммы 2 и 3 подключены
к выходам

микросхемы В(Z) и А(Y) соответственно. Земляные контакты GND1_1 и
GND1_2 подключаются к земле лабораторного стенда. VCC1 и VCC2 служат для
питания микросхемы, на них подается питание 3.3 В. Линии UART2_RXD и
UART2_TXD предназначены для приема и передачи д
анных и подключаются к
модулю UART2 микроконтроллера. Линии RE и DE служат для разрешения приема
и передачи данных микросхемой ADM2682. Так как линия RE инвертирована, то
управлять разрешением можно с помощью одного сигнала с микроконтроллера.

6.4 Интерфей
с CAN

Схема реализации интерфейса CAN на микросхеме ADM3053M представлена
на рис 6.5.


22



Рисунок 6.5 Интерфейс CAN.

Разъем Х5 представляет собой клеммную колодку с тремя клеммами для
подключения линий данных CAN_H и CAN_L и земляного провода. Земляные
конта
кты GND2 объединены, к ним подключается земляной провод с клеммы 1.
Клеммы 2 и 3 подключены к выводам микросхемы CAN_L и CAN_H. Вывод Vcc
служит для питания логики микросхемы, на него подается питание 5 В. На вывод
V_IO подается питание 3.3 В, выполняет ф
ункцию согласования уровней. Линии
CAN_TX и CAN_RX служат для приема и передачи данных от микросхемы к
микроконтроллеру. Земляные контакты GND1 объединены и подключены к земле
лабораторного стенда.

6.5 Силовая часть

Силовая часть схемы представлена на рис.6.6.


23


Рисунок 6.6 Силовая часть.

24


Лабораторный блок питания на 24 В подключается к стенду с помощью
клеммной колодки Х1. К цепи постоянного тока подключены два преобр
азователя
напряжения DC1 и DC2. DC1 понижает напряжение с 24 В до 5 В (для питания
микросхем). DC2 повышает напряжение с 5 В до 15 В для выдачи напряжения,
необходимого для открытия и закрытия транзисторов. Стабилизатор напряжения
IC2 понижает напряжение
с 5 В до 3.3 В. К входу и выходу стабилизатора
подключены керамические конденсаторы С3 и С4 на 10 нФ для фильтрации помех.
Драйверы верхнего и нижнего ключей IR2110 служат для открытия и закрытия
транзисторов, напряжение питания логики 3.3 В (линии VDD). Д
ля каждой фазы
инвертора используется свой драйвер. Линии VSS и COM подключены к земле.
Линии PWMn_H и PWMn_L являются управляющими для драйвера. По ним
приходят команды на открытие и закрытие транзисторов с ШИМ
-
выходов таймера
микроконтроллера. Между выхо
дами VB и VCC установлен защитный

диод, между
VB и VS параллельно два конденсатора емкостями 0.1 нФ и 2.2 нФ. Линии HO и LO
подключаются к затвору соответствующих транзисторов, на линиях установлены
токоограничивающие резисторы номиналом 10 Ом. Инвертор тр
ехфазный,
выполнен на полевых транзисторах со встроенным защитным диодом. К каждой
фазе подключен делитель напряжения на резисторах. Сигналы U_BP, U_A, U_B,
U_C
-

аналоговые, подключаются к АЦП микроконтроллера. Так как максимальное
напряжение на входе АЦП

3.3 В, то делитель рассчитывается на понижение
напряжения до 3 В, так как шина силовая и при работе двигателя и инвертора могут
возникать перенапряжения и повредить вывод микроконтроллера. Формула расчета
резисторов:

,

где Uin
-

напряжение на силовой ши
не (или фазе), Uout
-

напряжение, до которог
о

нужно понизить, R1
-

первый резистор делителя (на схеме R19, R21, R23, R25), R2

25


-

второй резистор (на схеме R20, R22, R24, R26). Последние шунтируются
конденсатором на 10 мкФ для фильтрации помех.

Клеммная

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

6.6 Датчики тока

Подключение датчиков тока показано на рис 6.7.


Рисунок 6.7 Подключение датчиков тока.

Датчики тока подключены в фазы инвертора. Выход VC используется для
питания датчика. Напряжение питания 5 В, к линии подключен конденсатор
номиналом 100 нФ для фильтрации помех. В выходы IP1+ и IP2+ входит фаза
инвертора и выходит через IP1
-

и IP2
-

на клем
мную колодку Х2. Выходы TEST и

26


GND подключены к земле. На выходе VOUT установлен фильтрующий
конденсатор номиналом 10 нФ. Сигнал аналоговый, с напряжением в диапазоне от
0.1 до 0.9 напряжения питания датчика (0.5 В
-

4.5 В). Используем делитель
напряжения
на выходе датчика для согласования с 3.3В АЦП микроконтроллера.
Делитель рассчитывается аналогично делителям на участке постоянного тока и
фазах А, В и С.
Выходы I_A, I_B, I_C подключаются к АЦП микроконтроллера.

6.7 Дискретные входы и выходы


Рисунок 6.
8 Дискретные входы и выходы.

Дискретные выходы представлены 8 светодиодами, подключенными через
токоограничивающие резисторы номиналом 150 Ом к портам общего назначения
микроконтроллера, и штырьковым разъемом 2х8 без резисторов, где один ряд
подключен к
земле.

Дискретные входы представлены 8 тактовыми кнопками с
токоограничивающими резисторами номиналом 10 кОм, подключенными к портам
общего назначения микроконтроллера, и штырьковым разъемом 2х8 без
резисторов, где один ряд подключен к земле.


27


6.8 Энкодер

Подключение энкодера показано на рис 6.9


Рисунок 6.9 Подключение энкодера.

Энкодер подключается к клеммной колодке Х6. Штырьковый разъем JP3
предназначен для выбора напряжения питания энкодера (3.3 В, 5 В). Выводы А1 и
А2 предназначены для подключения си
гнальных линий энкодера А и

̅
). Выводы
B,C,D аналогично. Напряжение питания микросхемы MC34C86 VCC 5 В. Линии
ENC_A, ENC_B, ENC_C, ENC_D подключены ко входам таймера
микроконтроллера. Выводы A/C_CON и B/D_CON предназначены для включения
и выключения порто
в A, C и B, D соответственно, подтянуты к 5 В, все порты будут
включены.




28


6.9 Микроконтроллер


Рисунок 6.10 Микроконтроллер STM32F4LQFP100.

Выводы VDD1


VDD6 отвечают за питание микроконтроллера и его модулей
и подключены к 3.3 В

через фильтрующие конденсаторы. VDDA отвечает за
питание АЦП, VREF+
-

опорное напряжение для АЦП, подключены к 3.3 В. К

29


выводам PH0
-
PH1 подключается кварцевый тактирующий резонатор, задающий
частоту микроконтроллеру, с двумя керамическими конденсаторами н
а 22 пФ.
VSSA, VSS1


VSS3 подключены к земле.

Разъем JP2 предназначен для программирования микроконтроллера через
UART. В STM32 в памяти хранится программа
-
загрузчик (bootloader),
предназначенная для записи пользовательской программы по нужному адресу в
памяти микроконтроллера. Комбинацией сигналов BOOT0 и BOOT1 можно
выбрать режим загрузки контроллера при
«
холодном
»

запуске. Режимы загрузки
описаны в Таблице 1.

Таблица 1
-

Режимы загрузки STM32

Сигналы выбора

режима загрузки

Режим загрузки

BOOT1

BOOT0

x

0

Основная память

0

1

Системная память

1

1

Внутрисхемная
SRAM


Будут использоваться первые два режима. Поэтому сигнал BOOT1 подтянут
к земле (к логическому нулю). Для переключения между режимами на сигнал
BOOT0 установлена кнопка. Для входа в режим загрузки программ в память
микроконтроллера необходимо нажать и удер
живать кнопку BOOT.




30


6.10 Печатная плата и инструкция по подключению

Была произведена трассировка печатной платы. На рис. 6.11 изображен
верхний слой, на рис. 6.12
-

нижний. Размеры печатной платы
-

196

мм на
120

мм.


Рисунок 6.11 Верхний слой печатной
платы.


31



Рисунок 6.12 Нижний слой печатной платы.



32


На рис. 6.13 представлено размещение элементов платы.


Рисунок 6.1
3

Расположение элементов на печатной плате
.


33


Перед

выполнением работ необходимо:

1) При необходимости, подключить стенд к интерфейсу RS
-
485 с помощью
разъема Х4.
«
Распиновка
»

разъема следующая: Х4
-
1
-

земля, Х4
-
2
-

линия данных
В, Х4
-
3
-

линия данных А.

2) При необходимости, подключить стенд к шине CAN с помощью разъема
Х5.
«
Распиновка
»

разъема следующая: Х5
-
1
-

земля, Х5
-
2
-

линия данных CAN_L,
Х5
-
3
-

линия данных CAN_H.

3) Подключить энкодер к разъему Х6.
«
Распиновка
»

разъема следующая: Х6
-
1
-

питание энкодера (для выбора напряжения питания между 3.3 В и 5 В
воспользоваться джампером
JP3), Х6
-
2
-

сигнал А, Х6
-
3
-

сигнал не А, Х6
-
4
-

сигнал
В, Х6
-
5
-

сигнал не В, с Х6
-
6 до Х6
-
9
-

для дополнительных сигналов или сигнала
нуль
-
метки. Х6
-
10
-

земля.

4) При необходимости, подключить к разъемам JP7 и JP8 сигналы ввода и
вывода.

5) При обмене
данными с ПК, подключить стенд к ПК через разъем Х3 с
помощью кабеля USB
-
A


USB
-
B.

6) Подключить двигатель переменного тока к разъему Х2 проводами, с
сечением не менее 1.5 мм
2
.

7) Подключить плату к блоку питания на 24 В постоянного тока проводами, с
сеч
ением не менее 1.5 мм
2
, к разъему Х1.

8) Для программирования подключить программатор к разъему JP2.





34


7 Разработка программной части. Пример лабораторной работы.

Для проверки работоспособности
составим и
выполним следующую
лабораторную работу:

«Написать программу для лабораторного
стенда, которая бы на выходных
фазах лабораторного стенда генерировала трехфазный синусоидальный сигнал со
сдвигом фаз 120 градусов. Реализовать возможность изменения частоты выходного
сигнала.
»


7.1 Выбор среды разраб
отки и установка программного обеспечения

Для программирования микроконтроллеров на базе ARM существует
большое число сред разработки, как платных, так и бесплатных. К

платным

относятся

Keil MDK
-
ARM, IAR Embedded Workbench for ARM.
Бесплатные

-

Eclipse, Code Composer Studio, CooCox, SW4STM32.
Была

выбрана

среда

разработки

SW4STM32 (System Workbench for STM32),
представляющая

собой

IDE
(
интегрированную

среду

разработки
)
на

базе

Eclipse
со

всеми

необходимыми

для

программирования

и

отладки

предус
тановленными

плагинами
.
Среда
поддерживает операционные системы Windows, Linux, OS X.

Для загрузки среды необходимо посетить сайт www.openstm32.org, пройти
процедуру регистрации и выбрать вашу ОС и ее разрядность.

Так же можно загрузить и установить STM32
CubeMX, который значительно
упрощает и ускоряет конфигурирование и инициализацию различного
периферийного оборудования микроконтроллера. В соответствии с
пользовательским настройками данное ПО осуществляет генерацию программного
кода на языке Си, который з
атем можно импортировать в SW4STM32.




35


7.2 Настройка периферийного оборудования и выводов микроконтроллера

Для настройки периферии
STM
32 воспользуемся программой
STM
32
CubeMX
. При запуске программы появится окно, где нам предложат создать
или загрузить
проект (см. рис. 7.1).


Рисунок 7.1 Окно
STM
32
CubeMX
.

Создадим новый проект. В следующем окне нам предложат выбрать
микроконтроллер. Для лабораторного стенда мы выбрали
STM
32
F
407
VG
, поэтому
с помощью фильтров найдем его в
CubeMX

(рис. 7.2). Справа от филь
тров будут
отображены найденные совпадения и представлена краткая информация по
найденным моделям микроконтроллеров. В данном случае отображается один,
который нам нужен. Выберем его двойным кликом.

Откроется окно конфигурации с изображением контроллера и
его выводами
(рис.7.3).


36



Рисунок 7.2 Выбор МК в
CubeMX
.


Рисунок 7.3 Окно конфигурации.


37


Предварительно сохраним проект. Для этого необходимо в верхнем меню
выбрать пункт «
Project
»
-

«
» (рис.7.4).


Рисунок 7.4 Окно настройки проекта.

Во вкладке
Project

введем имя проекта (
lab
1) и укажем путь сохранения. В
качестве среды программирования в выпадающем списке выбираем
SW
4
STM
32. На
остальных вкладках все настройки оставляем по умолчанию. Сохраняем настройки
нажатием кнопки ОК и затем в меню «
File
» вы
бираем пункт «
Save

project
».

Далее, настроим тактирующий таймер. Для этого в окне конфигурации (рис.
7.3) откроем вкладку «
Clock

Configuration
». Откроется интерактивная
функциональная схема тактового генератора, в которой настроим делители и
множители час
тот и получим параметры, указанные на рис.7.5.


38



Рисунок 7.5 Интерактивная схема тактового генератора.


Выводы
PH
-
0
и
PH
-
1
настроим как выводы, к которым подключен кварцевый
резонатор. Сделать это можно кликнув на нужных выводах и выбрав функции
соответственно
RCC
_
OCS
_
IN

и
RCC
_
OSC
_
OUT

из выпадающего списка.

Для генерации трехфазного синусоидального напряжения необходимо
управл
ять 6
-
ю транзисторами инвертора. Для этого необходимо 6 каналов ШИМ на
таймере, которые будут через драйвер подавать сигналы на открытие и закрытие
транзистора, и таймер, задающий частоту выходного напряжения.

Продвинутый таймер
TIM
1 позволяет настроить 6

выходных каналов ШИМ.
Сконфигурируем выходы контроллера
PA
8,
PA
9,
PA
10 как выходы таймера
TIM
1_
CH
1,
TIM
1_
CH
2,
TIM
1_
CH
3. Данные выводы будут использоваться для
открытия верхних ключей инвертора. Аналогично сконфигурируем выходы
PB
13,
PB
14,
PB
15 как выходы
таймера
TIM
1_
CH
1
N
,
TIM
1_
CH
2
N
,
TIM
1_
CH
3
N
. Это

39


выводы для управления нижними ключами инвертора. После конфигурирования
выводов надо активировать таймер. Для этого в дереве слева необходимо в разделе
периферии найти таймер
TIM
1, выбрать источник тактирования и активировать
каналы 1, 2 и 3 (см. рис. 7.6). Так же активируем таймер
TIM
3, с помощью которого
будем задавать частоту выходного напряжения.



Рисунок 7.6 Включение таймера.


Вывод
PA
1
сконфигурируем как вход АЦП
ADC
1_
IN
1.
К нему мы
подключим потенциометр, с помощью которого будем задавать частоту.

Далее переходим на вкладку
Configuration

(рис. 7.7) для более тонкой
настройки таймеров и АЦП.


40



Рисунок 7.7 Вкладка
Configuration
.


Настроим АЦП

(
рис.7.8
)
. Выберем режим АЦП независимый, предделитель
частоты

равный 4, разрядность 12 бит, выравнивание данных вправо и включим
режим непрерывного преобразования.

Остальные параметры оставим по
умолчанию.


Рисунок 7.8 Окно настройки АЦП


41


Далее настроим таймер
TIM
3 (рис.7.9). Предделитель частоты введем равный
999
, режим счета таймера вверх, уставка таймера 65535 (0
xFFFF
)


максимальная
(позже мы ее будем менять в процессе выполнения программы). На вкладке
NVIC


установим галочку для разрешения прерывани
й от таймера.



Рисунок 7.9 Настройка таймера
TIM
3.


Перейдем к настройке таймера
TIM
1 (
рис.7.10
).

Предделитель 0 (выключен),
счет таймера вверх, уставка таймера 65535 (0
xFFFF
)
,
отключаем триггер
,
настройки
задержек переключения
устанавливаем 10 (120 нс
)
. Режим ШИМ выбираем прямой
(
PWM

Mode

1
)
.
Параметр
Pulse

(
скважность
)

оставляем равной нулю, позже она
будет меняться в программе. Полярность


обычная (логическая «1» равна
высокому уровню напряжения).

На вкладке
GPIO


для всех выходов устанавливаем максимальную
частоту выхода
High
, которая соответствует частоте 50 МГц.


42



Рисунок 7.10
Настройка таймера
TIM
1.


43


На этом настройка завершена. В результате контроллер в
CubeMX

должен
выглядеть, как на рис. 7.11.


Рисунок 7.11 Изображение микроконтроллера после настройки в
CubeMX
.

Далее в меню «
Project
» выбираем пункт «Generate code» и закрываем
программу.

7.3 Подготовка проекта в SW4STM32

Запускаем System Workbench for

STM32. Программа попросит указать адрес
рабочего каталога (рис. 7.12). Указываем путь, по которому мы сохранили проект в
CubeMX в предыдущем разделе.

В открывшемся
окне
в меню «
File
»

выб
ираем
пункт «
Import
»
.
Откроется окно, представленное на рис. 7.13. В

разделе

«
General
»
выбираем

пункт

«
Existing

Projects

into

Workspace
»
и

нажимаем

кнопку

Next
.
В

44


следующем окне указываем путь к папке сохраненного проекта и нажимаем кнопку
«
Finish
»
.


Рисунок 7.12 Указание пути расположения рабочего каталога.


Рисунок 7.13

Окно импортирования
.


45



Откроется рабочее окно (рис. 7.14). Слева находится дерево проекта, в
котором можно найти все файлы проекта, справа отображается открытый файл, в
котором пишется код программы. Для компиляции проекта необходимо нажать
кнопку с изобра
жение молотка, для входа в отладчик и загрузки программы в
микроконтроллер


кнопку с изображением зеленого жука.


Рисунок 7.1
4

Рабочее окно
.


4
6


7.4 Главная программа

На рис.7.
15

представлена блок
-
схема алгоритма главной программы (main.c).
Программа
написана на языке Си.


В начале, с помощью директивы #include подключаются дополните
льные
файлы: заголовочный файл «
main.h
», «adc.h», «tim.h»

и библиотека HAL для работы
и настройки перифе
рии контроллеров серии stm32f4 «stm32f4xx_hal.h»
. Далее
производится

объявление и инициализация глобальной переменной SINTABLE
являющейся двумерным массивов. Данная переменная представляет собой таблицу
с предварительно рассчитанными значениями синусов для трех фаз со сдви
гом в
120 градусов между фазами
.

Далее идет глобал
ьная функция main. Сначала вызывается функция HAL_Init,
сбрасывающая все настройки периферийных модулей микроконтроллера (во
избежание хранения случайных значений в регистрах).

Затем вызывается функция SystemClock_Config, которая служит для
настройки такт
ового генератора и частот внутренних шин. После этого вызывается
функция настройки и инициализации модуля АЦП и его входа
-

MX_ADC1_Init.

Далее, с помощью функций MX_TIM1_Init и MX_TIM3_Init
конфигурируются таймеры TIM1 и TIM3 соответственно. Активируются

каналы
ШИМ (функция PWM_Start) и включается таймер TIM3 с разрешением
прерываний.

В бесконечном цикле осуществляется включение АЦП (HAL_ADC_Start),
ожидание окончания преобразования сигнала (HAL_ADC_PollForConversion),
прием оцифрованного значения (HAL_A
DC_GetValue). АЦП 12
-
ти разрядный,
максимальное значение 4095. Так как уставка таймера TIM3 16
-
ти разрядная
(максимальное значение 65535), то необходимо значение, полученное с АЦП
промасштабировать путем умножения значения на 16. Затем происходит

47


отключени
е АЦП (HAL_ADC_Stop) и изменение уставки таймера TIM3 на новое
значение. Таким образом происходит изменение частоты выходного сигнала.


Рисунок 7.
15

Блок
-
схема программы.

7.5 Подпрограмма конфигурации тактового генератора

На рис. 7.16

представлена блок
-
схема алгоритма подпрограммы
конфигурации тактового генератора (функция SystemClock_Config).

48


Инициализируются две переменные типа структура
RCC
_
OscInitTypeDef

и
RCC
_
ClkInitTypeDef
. Данные структуры определены в библиотеке
HAL

и содержат
поля, соответствующие регистрам, отвечающим за настройку тактового генератора
и частот внутренних шин микроконтроллера.


Рисунок 7.16

Блок
-
схема подпрограммы конфигурации тактового генератора.

Все настройки соответствуют представленным на рис. 7.5 (см. ра
здел 7.2).
После присвоения элементам каждой структуры необходимых значений
вызываются библиотечный функции, записывающие данные значения в
соответствующие регистры.


49


7.6 Подпрограмма конфигурации АЦП

На рис. 7.17

представлена блок
-
схема алгоритма подпрогр
аммы
конфигурации АЦП (функция MX_ADC1_Init). Инициализируются три
переменные типа структура
ADC
_
,
ADC
_
ChannelConfTypeDef

и
GPIO
_
InitTypeDef
. Данные структуры определены в библиотеке
HAL

и содержат
поля, соответствующие регистрам, отвечающим за настройку модуля АЦП и
выводов микроконтроллера.


Рисунок 7.17

Блок
-
схема подпрограммы конфигурации АЦП.


50


Все настройки соответствуют представленным на рис. 7.8 (см. раздел 7.2).
После присвоения
элементам каждой структуры необходимых значений
вызываются библиотечный функции, записывающие данные значения в
соответствующие регистры.

7.7 Подпрограмма конфигурации таймера
TIM
1

На рис. 7.
18

представлена блок
-
схема алгоритма подпрограммы
конфигурации та
ймера
TIM
1 (функция MX_TIM1_Init).


Рис
унок 7.18

Блок
-
схема подпрограммы конфигурации таймера TIM1.


51


Инициализируются три переменные типа структура
TIM
_
,
TIM
_
OC
_
InitTypeDef

и
GPIO
_
InitTypeDef
.

Данные структуры определены в библиотеке
HAL

и содержат поля,
соответствующие регистрам, отвечающим за настройку модуля таймера и выводов
микроконтроллера.

Все настройки соответствуют представленным на рис. 7.6 и 7.10 (см. раздел
7.2). После присвоения элементам каждой структуры необходимых значени
й
вызываются библиотечный функции, записывающие данные значения в
соответствующие регистры.

7.8 Подпрограмма конфигурации таймера
TIM
3

На рис. 7.19

представлена блок
-
схема алгоритма подпрограммы
конфигурации таймера
TIM
3 (функция MX_TIM3_Init).

Инициализируются две переменные типа структура
TIM
_

и
TIM
_
ClockConfigTypeDef
.

Данные структуры определены в библиотеке
HAL

и содержат поля,
соответствующие регистрам, отвечающим за настройку модуля таймера.

Настройки соответствуют представленн
ым на рис. 7.6 и 7.9 (см. раздел 7.2).
После присвоения элементам каждой структуры необходимых значений
вызываются библиотечный функции, записывающие данные значения в
соответствующие регистры.



52



Рисунок 7.19

Блок
-
схема подпрограммы конфигурации таймера TIM3.

7.9 Подпрограмма активации каналов ШИМ

На рис. 7.
20

представлена блок
-
схема алгор
ит
ма подпрограммы активации
каналов ШИМ таймера
TIM
1 (функция
PWM
_
Start
).

В подпрограмме осуществляется вызов библиотечных

функции,
осуществляющий запуск шести каналов ШИМ.



53



Рисунок 7.20

Блок
-
схема подпрограммы активации каналов ШИМ таймера TIM1.

7.10 Подпрограмма обработки прерывания таймера
TIM
3

На рис. 7.21

представлена блок
-
схема алгоритма подпрограммы
конфигурации таймера
TIM
3 (функция
TIM
3_
IRQHandler
).



Рисунок 7.21

Блок
-
схема подпрограммы обработки прерывания таймера TIM3.

В обработчике прерываний осуществляется изменение скважности сигналов
шести каналов ШИМ в соответствии с таблицей значений синусов каждой из фаз.

54


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

7.11 Тестирование

Для проверки правильности работы программы подключим к выходам
инвертора
RC
-
нагрузку (рис.8.1). К выходу PA1, являющемуся входом 1
-
го канала
АЦП, подключается потенциометр.
Земли лабораторного стенда, потенциометра и
н
агрузки должны быть объединены.


Рисунок 8.1 Схема подключения RC
-
нагрузки.

Сигнал на нагрузке смотрим осциллографом. На рис.8.2 виден сигнал на
нагрузке в одной фазе. На рис.8.3 видно синусоидальные сигналы на нагрузке в
фазах А и В. Сдвиг между фазами составляет 120 градусов. При вращении
потенциометра частота изменяется от 1.5
Гц до 640 Гц
.


55



Рисунок 8.2 Сигнал в фазе А.


Рисунок 8.3 Сигнал в фазах А и В.


56


8 Заключение

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

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

Была разработана функциональная схема лабораторного стенда, результатом
реализации которой является гибкость применения установки, благодаря наличию
коммуникац
ионных интерфейсов RS
-
485, CAN, USB, отладочному интерфейсу
JTAG, наличию датчиков тока и напряжения, разъему для подключения энкодеров,
и свободным портам ввода
-
вывода. Установка рассчитана на напряжение 24 В, так
как данное напряжение считается относител
ьно безопасным.

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

К полученной плате составлен и выполнен пример лабораторной работы,
позволяющий ознакомится с базовыми аспектами конфигурирования различной

57


периферии микроконтроллера, таких как базовый и продвинутый таймер, АЦП,
тактовый генератор.

Лабораторный стенд мож
ет быть использован для практического освоения
студентами методов и принципов программирования частотного преобразователя,
управления и обмена информацией между устройствами по интерфейсам
RS
-
485,
USB

и шине
CAN
, обучению программированию микроконтроллера
и отладки
программы по интерфейсу
JTAG
. Возможно исследование замкнутых и
разомкнутых систем типа «преобразователь частоты


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




58


Список

литературы

1
. Карлов Б., Есин Е. Современные преобразователи частоты: методы
управления и аппаратная реализация // Силовая электроника.
2004. №1.
С
. 50
-
54.

2
. Cortex
-
M4 devices Generic User Guide, 2010

3
. Cortex
-
M4 Technical Reference Manual, Revision r0p0: [
Электронный

ресурс
]
// ARM Information Center. URL:
http://infoc
enter.arm.com/help/topic/com.arm.doc.ddi0439b/index.html


4
. DocID022152 Rev 8, STM32F407xx STM32F417xx,
STMicroelectronics,
09.2016.

5
. IR2110(
-
1
-
2)(S)PbF IR2113(
-
1
-
2)(S)PbF revU, International Rectifier

6
.
MC
34
C
86
rev

4, 1995,
Motorola
.




59


Приложение

А

Листинг файла
main
.
c

/*
Includes

------------------------------------------------------------------
*/

#
include

"
main
.
h
"

#
include

"
stm
32
f
4
xx
_
hal
.
h
"

#
include

"
adc
.
h
"

#
include

"
tim
.
h
"

#
include

"
gpio
.
h
"

/*
Private

function

prototypes

-----------------------------------------------
*/

void

SystemClock
_
Config
(
void
);

const

uint
16_
t

SINTABLE

[255][3] = {



{

32768

,

4802

,

61145

}

,



{

33575

,

4390

,

60733

}

,



{

34382

,

3995

,

60303

}

,



{

35187

,

3617

,

59858

}

,



{

35992

,

3258

,

59
395

}

,



{

36794

,

2916

,

58917

}

,



{

37594

,

2592

,

58422

}

,



{

38391

,

2286

,

57912

}

,



{

39185

,

1999

,

57387

}

,



{

39975

,

1731

,

56847

}

,



{

40760

,

1481

,

56292

}

,



{

41540

,

1251

,

55723

}

,



{

42316

,

1040

,

55139

}

,



{

43085

,

847

,

54543

}

,



{

43848

,

675

,

53933

}

,



{

44604

,

521

,

53310

}

,



{

45354

,

388

,

52675

}

,



{

46095

,

274

,

52028

}

,



{

46829

,

180

,

51369

}

,



{

47554

,

105

,

50699

}

,



{

48270

,

50

,

50017

}

,



{

48976

,

16

,

49326

}

,



{

49673

,

1

,

48624

}

,



{

50359

,

6

,

47913

}

,



{

51035

,

30

,

47192

}

,



{

51700

,

75

,

46463

}

,



{

52353

,

140

,

45725

}

,



{

52994

,

224

,

44980

}

,



{

53623

,

328

,

44227

}

,



{

54240

,

452

,

43467

}

,



{

54843

,

596

,

42701

}

,



{

55433

,

759

,

41929

}

,



{

56009

,

941

,

41151

}

,



{

56571

,

1143

,

40368

}

,



{

57118

,

1364

,

39580

}

,



{

57651

,

1604

,

38789

}

,



{

58169

,

1863

,

37993

}

,



{

58671

,

2140

,

37195

}

,



{

59158

,

2437

,

36393

}

,



{

59628

,

2751

,

35590

}

,



{

60083

,

3084

,

34785

}

,



{

60520

,

3435

,

33978

}

,



{

60941

,

3804

,

33171

}

,



{

61345

,

4190

,

32364

}

,


60




{

61731

,

4594

,

31557

}

,



{

62100

,

5015

,

30750

}

,



{

62451

,

5452

,

29945

}

,



{

62784

,

5907

,

29142

}

,



{

63098

,

6377

,

28340

}

,



{

63395

,

6864

,

27542

}

,



{

63672

,

7366

,

26746

}

,



{

63931

,

7884

,

25955

}

,



{

64171

,

8417

,

25167

}

,



{

64392

,

8964

,

24384

}

,



{

64594

,

9526

,

23606

}

,



{

64776

,

10102

,

22834

}

,



{

64939

,

10692

,

22068

}

,



{

65083

,

11295

,

21308

}

,



{

65207

,

11912

,

20555

}

,



{

65311

,

12541

,

19810

}

,



{

65395

,

13182

,

19072

}

,



{

65460

,

13835

,

18343

}

,



{

65505

,

14500

,

17622

}

,



{

65529

,

15176

,

16911

}

,



{

65534

,

15862

,

16209

}

,



{

65519

,

16559

,

15518

}

,



{

65485

,

17265

,

14836

}

,



{

65430

,

17981

,

14166

}

,



{

65355

,

18706

,

13507

}

,



{

65261

,

19440

,

12860

}

,



{

65147

,

20181

,

12225

}

,



{

65014

,

20931

,

11602

}

,



{

64860

,

21687

,

10992

}

,



{

64688

,

22450

,

10396

}

,



{

64495

,

23219

,

9812

}

,



{

64284

,

239
95

,

9243

}

,



{

64054

,

24775

,

8688

}

,



{

63804

,

25560

,

8148

}

,



{

63536

,

26350

,

7623

}

,



{

63249

,

27144

,

7113

}

,



{

62943

,

27941

,

6618

}

,



{

62619

,

28741

,

6140

}

,



{

62277

,

29543

,

5677

}

,



{

61918

,

30348

,

5232

}

,



{

61540

,

31153

,

4802

}

,



{

61145

,

31960

,

4390

}

,



{

60733

,

32768

,

3995

}

,



{

60303

,

33575

,

3617

}

,



{

59858

,

34382

,

3258

}

,



{

59395

,

35187

,

2916

}

,



{

58917

,

35992

,

2592

}

,



{

58422

,

36794

,

2286

}

,



{

57912

,

37594

,

1999

}

,



{

5
7387

,

38391

,

1731

}

,



{

56847

,

39185

,

1481

}

,



{

56292

,

39975

,

1251

}

,



{

55723

,

40760

,

1040

}

,



{

55139

,

41540

,

847

}

,



{

54543

,

42316

,

675

}

,



{

53933

,

43085

,

521

}

,



{

53310

,

43848

,

388

}

,



{

52675

,

44604

,

274

}

,


61




{

5
2028

,

45354

,

180

}

,



{

51369

,

46095

,

105

}

,



{

50699

,

46829

,

50

}

,



{

50017

,

47554

,

16

}

,



{

49326

,

48270

,

1

}

,



{

48624

,

48976

,

6

}

,



{

47913

,

49673

,

30

}

,



{

47192

,

50359

,

75

}

,



{

46463

,

51035

,

140

}

,



{

45725

,

51700

,

224

}

,



{

44980

,

52353

,

328

}

,



{

44227

,

52994

,

452

}

,



{

43467

,

53623

,

596

}

,



{

42701

,

54240

,

759

}

,



{

41929

,

54843

,

941

}

,



{

41151

,

55433

,

1143

}

,



{

40368

,

56009

,

1364

}

,



{

39580

,

56571

,

1604

}

,



{

38789

,

57118

,

1863

}

,



{

37993

,

57651

,

2140

}

,



{

37195

,

58169

,

2437

}

,



{

36393

,

58671

,

2751

}

,



{

35590

,

59158

,

3084

}

,



{

34785

,

59628

,

3435

}

,



{

33978

,

60083

,

3804

}

,



{

33171

,

60520

,

4190

}

,



{

32364

,

60941

,

4594

}

,



{

31557

,

6
1345

,

5015

}

,



{

30750

,

61731

,

5452

}

,



{

29945

,

62100

,

5907

}

,



{

29142

,

62451

,

6377

}

,



{

28340

,

62784

,

6864

}

,



{

27542

,

63098

,

7366

}

,



{

26746

,

63395

,

7884

}

,



{

25955

,

63672

,

8417

}

,



{

25167

,

63931

,

8964

}

,



{

2438
4

,

64171

,

9526

}

,



{

23606

,

64392

,

10102

}

,



{

22834

,

64594

,

10692

}

,



{

22068

,

64776

,

11295

}

,



{

21308

,

64939

,

11912

}

,



{

20555

,

65083

,

12541

}

,



{

19810

,

65207

,

13182

}

,



{

19072

,

65311

,

13835

}

,



{

18343

,

65395

,

14500

}

,



{

17622

,

65460

,

15176

}

,



{

16911

,

65505

,

15862

}

,



{

16209

,

65529

,

16559

}

,



{

15518

,

65534

,

17265

}

,



{

14836

,

65519

,

17981

}

,



{

14166

,

65485

,

18706

}

,



{

13507

,

65430

,

19440

}

,



{

12860

,

65355

,

20181

}

,



{

12225

,

65261

,

20931

}

,



{

11602

,

65147

,

21687

}

,



{

10992

,

65014

,

22450

}

,



{

10396

,

64860

,

23219

}

,



{

9812

,

64688

,

23995

}

,


62




{

9243

,

64495

,

24775

}

,



{

8688

,

64284

,

25560

}

,



{

8148

,

64054

,

26350

}

,



{

7623

,

63804

,

27144

}

,



{

7113

,

63536

,

27941

}

,



{

6618

,

63249

,

28741

}

,



{

6140

,

62943

,

29543

}

,



{

5677

,

62619

,

30348

}

,



{

5232

,

62277

,

31153

}

,



{

4802

,

61918

,

31960

}

,



{

4390

,

61540

,

32768

}

,



{

3995

,

61145

,

33575

}

,



{

3617

,

60733

,

34382

}

,



{

3258

,

60303

,

35187

}

,



{

2916

,

59858

,

35992

}

,



{

2592

,

59395

,

36794

}

,



{

2286

,

58917

,

37594

}

,



{

1999

,

58422

,

38391

}

,



{

1731

,

57912

,

39185

}

,



{

1481

,

57387

,

39975

}

,



{

1251

,

56847

,

40760

}

,



{

1040

,

56292

,

41
540

}

,



{

847

,

55723

,

42316

}

,



{

675

,

55139

,

43085

}

,



{

521

,

54543

,

43848

}

,



{

388

,

53933

,

44604

}

,



{

274

,

53310

,

45354

}

,



{

180

,

52675

,

46095

}

,



{

105

,

52028

,

46829

}

,



{

50

,

51369

,

47554

}

,



{

16

,

50699

,

48270

}

,



{

1

,

50017

,

48976

}

,



{

6

,

49326

,

49673

}

,



{

30

,

48624

,

50359

}

,



{

75

,

47913

,

51035

}

,



{

140

,

47192

,

51700

}

,



{

224

,

46463

,

52353

}

,



{

328

,

45725

,

52994

}

,



{

452

,

44980

,

53623

}

,



{

596

,

44227

,

54240

}

,



{

759

,

43467

,

54843

}

,



{

941

,

42701

,

55433

}

,



{

1143

,

41929

,

56009

}

,



{

1364

,

41151

,

56571

}

,



{

1604

,

40368

,

57118

}

,



{

1863

,

39580

,

57651

}

,



{

2140

,

38789

,

58169

}

,



{

2437

,

37993

,

58671

}

,



{

2751

,

37195

,

59158

}

,



{

3
084

,

36393

,

59628

}

,



{

3435

,

35590

,

60083

}

,



{

3804

,

34785

,

60520

}

,



{

4190

,

33978

,

60941

}

,



{

4594

,

33171

,

61345

}

,



{

5015

,

32364

,

61731

}

,



{

5452

,

31557

,

62100

}

,



{

5907

,

30750

,

62451

}

,



{

6377

,

29945

,

62784

}

,


63




{

6864

,

29142

,

63098

}

,



{

7366

,

28340

,

63395

}

,



{

7884

,

27542

,

63672

}

,



{

8417

,

26746

,

63931

}

,



{

8964

,

25955

,

64171

}

,



{

9526

,

25167

,

64392

}

,



{

10102

,

24384

,

64594

}

,



{

10692

,

23606

,

64776

}

,



{

11295

,

22834

,

64939

}

,



{

11912

,

22068

,

65083

}

,



{

12541

,

21308

,

65207

}

,



{

13182

,

20555

,

65311

}

,



{

13835

,

19810

,

65395

}

,



{

14500

,

19072

,

65460

}

,



{

15176

,

18343

,

65505

}

,



{

15862

,

17622

,

65529

}

,



{

16559

,

16911

,

65534

}

,



{

17
265

,

16209

,

65519

}

,



{

17981

,

15518

,

65485

}

,



{

18706

,

14836

,

65430

}

,



{

19440

,

14166

,

65355

}

,



{

20181

,

13507

,

65261

}

,



{

20931

,

12860

,

65147

}

,



{

21687

,

12225

,

65014

}

,



{

22450

,

11602

,

64860

}

,



{

23219

,

10992

,

64
688

}

,



{

23995

,

10396

,

64495

}

,



{

24775

,

9812

,

64284

}

,



{

25560

,

9243

,

64054

}

,



{

26350

,

8688

,

63804

}

,



{

27144

,

8148

,

63536

}

,



{

27941

,

7623

,

63249

}

,



{

28741

,

7113

,

62943

}

,



{

29543

,

6618

,

62619

}

,



{

30348

,

614
0

,

62277

}

,



{

31153

,

5677

,

61918

}

,



{

31960

,

5232

,

61540

}

,


};


int main(void)

{


uint32_t freq;



/*
MCU

Configuration
----------------------------------------------------------
*/




HAL_Init();


/* Configure the system clock */


SystemClock_Config();


/* Initialize all configured peripherals */


MX_GPIO_Init();


MX_ADC1_Init();


MX_TIM1_Init();


MX_TIM3_Init();



HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);


HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_2);


HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_3);


64



HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_1);


HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_2);


HAL_TIMEx_PWMN_S
tart(&htim1,TIM_CHANNEL_3);


HAL_TIM_Base_Start_IT(&htim3);


/* Infinite loop */



while (1)


{



HAL_ADC_Start(&hadc1);



HAL_ADC_PollForConversion(&hadc1, 100);



freq = 1
6




HAL_ADC_Stop(&hadc1);



if (freq � 12000)



{




TIM3
-
�ARR = freq;



}



else



{




TIM3
-
�ARR = 500;



}


}

}


/** System Clock Configuration

*/

void SystemClock_Config(void)

{



RCC_OscInitTypeDef RCC_OscInitStruct;


RCC_ClkInitTypeDef RCC_ClkInitStruct;



/**Configure the main internal regulator output voltage


*/


__HAL_RCC_PWR_CLK_ENABLE();



__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);



/**Initializes the CPU, AHB and APB busses clocks


*/


RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;


RCC_OscInitStruct.HSEState = RCC_HSE_ON;


RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;


RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;


RCC_OscInitStruct.PLL.PLLM = 4;


RCC_OscInitStruc
t.PLL.PLLN = 168;


RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;


RCC_OscInitStruct.PLL.PLLQ = 4;


if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)


{


_Error_Handler(__FILE__, __LINE__);


}



/**Initializes the CPU, AHB and APB busses clocks


*/


RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK


|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;


RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;


RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSC
LK_DIV1;


65



RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;


RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;



if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) !=
HAL_OK)


{


_Error_Handler(__FILE__, __LINE__);


}



/**Configure the Systick interrupt time


*/





/**Configure the Systick


*/


HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);



/* SysTick_IRQn interrupt configuration */


riority(SysTick_IRQn, 0, 0);

}




66


Листинг

файла

tim.c

#include "tim.h"



/* TIM1 init function */

void MX_TIM1_Init(void)

{


TIM_MasterConfigTypeDef sMasterConfig;


TIM_OC_InitTypeDef sConfigOC;


TIM_BreakDeadTimeConf
igTypeDef sBreakDeadTimeConfig;


htim1.Instance = TIM1;


htim1.Init.Prescaler = 0;


htim1.Init.CounterMode = TIM_COUNTERMODE_UP;


htim1.Init.Period = 65535;


//htim1.Init.Period = 10000;


htim1.Init.ClockDivision

= TIM_CLOCKDIVISION_DIV1;




if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)


{


_Error_Handler(__FILE__, __LINE__);


}




sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVE
MODE_DISABLE;


if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)


{


_Error_Handler(__FILE__, __LINE__);


}


sConfigOC.OCMode = TIM_OCMODE_PWM1;


sConfigOC.Pulse = 0;


sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;


sConfi
gOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;


sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;






if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != H
AL_OK)


{


_Error_Handler(__FILE__, __LINE__);


}


if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)


{


_Error_Handler(__FILE__, __LINE__);


}


if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) !=
HAL_OK)


{


_Error_Handler(__FILE__, __LINE__);


}


sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;


sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;


sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;


sBreakDeadTimeConfig.DeadTime = 0;


sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;


sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;


sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;


if (HAL_TIMEx_ConfigBreakDeadTi
me(&htim1, &sBreakDeadTimeConfig) != HAL_OK)


{


_Error_Handler(__FILE__, __LINE__);


67



}


HAL_TIM_MspPostInit(&htim1);

}

void MX_TIM1_Init2(void)

{

TIM_ClockConfigTypeDef sClockSourceConfig;


TIM_MasterConfigTypeDef sMasterConfig;


TIM_OC_InitTypeDe
f sConfigOC;


TIM_BreakDeadTimeConf
igTypeDef sBreakDeadTimeConfig;


htim1.Instance = TIM1;


htim1.Init.Prescaler = 0;


htim1.Init.CounterMode = TIM_COUNTERMODE_UP;


htim1.Init.Period = 65535;


htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;


htim


if (HAL_TIM_Base_Init(&htim1) != HAL_OK)


{


_Error_Handler(__FILE__, __LINE__);


}


sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;


if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK)


{


_Error_Handler(__FILE__, __LINE__);


}


if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)


{


_Error_Handler(__FILE__, __LINE__);


}




sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;


if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)


{


_Error_Handler(__FILE__, __LINE__);


}


sConfigOC.OCMode = TIM_OCMODE_PWM1;


sConfigOC.Pulse = 0;


sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;


sConfigOC.OCNPolarit
y = TIM_OCNPOLARITY_HIGH;


sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;






if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)


{



_Error_Handler(__FILE__, __LINE__);


}


if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)


{


_Error_Handler(__FILE__, __LINE__);


}


if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)


{


_
Error_Handler(__FILE__, __LINE__);


}


sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_
ENABLE
;


sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_
ENA
BLE;


sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;


sBreakDeadTimeConfig.DeadTime =
10
;


sBreakDeadTimeConfig.BreakState = TIM_BREAK_
ENA
BLE;


68



sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;


sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;


if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != H
AL_OK)


{


_Error_Handler(__FILE__, __LINE__);


}


HAL_TIM_MspPostInit(&htim1);


}



/* TIM3 init function */

void MX_TIM3_Init(void)

{


TIM_ClockConfigTypeDef sClockSourceConfig;


TIM_Mas
terConfigTypeDef sMasterConfig;


htim3.Instance = TIM3;


htim3.Init.Prescaler = 0;


htim3.Init.CounterMode = TIM_COUNTERMODE_UP;


htim3.Init.Period = 65535;


htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;


if (HAL_TIM_Base_Init(&htim3) != HAL_OK)


{


_Error_Handler(__FILE__, __LINE__);


}


sClockSo
urceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;


if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK)


{


_Error_Handler(__FILE__, __LINE__);


}




sMasterConfig.MasterSlaveMode

= TIM_MASTERSLAVEMODE_DISABLE;


if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)


{


_Error_Handler(__FILE__, __LINE__);


}

}


{


if(tim_pwmHandle
-
�Instance==TIM1)


{


/* Peripheral clock enable */



__HAL_RCC_TIM1_CLK_ENABLE();


}

}


{


if(tim_baseHandle
-
�Instance==TIM3)


{


/* Peripheral clock enable */



__HAL_RCC_TIM3_CLK_
ENABLE();


/* TIM3 interrupt Init */





HAL_NVIC_EnableIRQ(TIM3_IRQn);


}

}


{


GPIO_InitTypeDef GPIO_InitStruct;


69



if(timHandle
-
�Instance==TIM1)


{



/**TIM1 GPIO Configuration


PB13
------
� TIM1_CH1N


PB14
------
� TIM1_CH2N


PB15
------
� TIM1_CH3N


PA8
------
� TIM1_CH1


PA9
------
� TIM1_CH2


PA10
------
� TIM1_CH3


*/


GPIO_InitStruct.Pin = GPIO_PIN_
13|GPIO_PIN_14|GPIO_PIN_15;


GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;


GPIO_InitStruct.Pull = GPIO_NOPULL;


GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;


GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;


HAL_GPIO
_Init(GPIOB, &GPIO_InitStruct);


GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10;


GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;


GPIO_InitStruct.Pull = GPIO_NOPULL;


GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;


GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;


HAL_GPIO
_I
nit(GPIOA, &GPIO_InitStruct);


}

}


{


if(tim_pwmHandle
-
�Instance==TIM1)


{


/* Peripheral clock disable */



__HAL_RCC_TIM1_CLK_DISABLE();


}

}

void HAL_TIM_Base_MspDeInit(TIM_HandleType
Def* tim_baseHandle)

{


if(tim_baseHandle
-
�Instance==TIM3)


{


/* Peripheral clock disable */


__HAL_RCC_TIM3_CLK_DISABLE();



/* TIM3 interrupt Deinit */


HAL_NVIC_DisableIRQ(TIM3_IRQn);


}

}




70


Листинг

файла

adc.c

#include "adc.h"


/* ADC1 init function */

void MX_ADC1_Init(void)

{


ADC_ChannelConfTypeDef sCon
fig;


hadc1.Instance = ADC1;


hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;


hadc1.Init.Resolution = ADC_RESOLUTION_12B;


hadc1.Init.ScanCo
nvMode = DISABLE;


hadc1.Init.ContinuousConvMode = ENABLE;


hadc1.Init.DiscontinuousConvMode = DISABLE;


hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;


hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;


hadc1.Init.DataAlign = ADC_DA
TAALIGN_RIGHT;


hadc1.Init.NbrOfConversion = 1;


hadc1.Init.DMAContinuousRequests = DISABLE;


hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;


if (HAL_ADC_Init(&hadc1) != HAL_OK)


{


_Error_Handler(__FILE__, __LINE__);


}


/**Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.


*/


sConfig.Channel = ADC_CHANNEL_1;


sConfig.Rank = 1;


sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;


if (HAL_ADC_ConfigChannel(
&hadc1, &sConfig) != HAL_OK)


{


_Error_Handler(__FILE__, __LINE__);


}

}


{


GPIO_InitTypeDef GPIO_InitStruct;


if(adcHandle
-
�Instance==ADC1)


{


/* Peripheral clock enable */


__HAL_RCC_AD
C1_CLK_ENABLE();




/**ADC1 GPIO Configuration


PA1
------
� ADC1_IN1


*/


GPIO_InitStruct.Pin = GPIO_PIN_1;


GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;


GPIO_InitStruct.Pull = GPIO_NOPULL;


HAL_GPIO_Init(GPIOA,
&GPIO_InitStruct
);


}

}


{


if(adcHandle
-
�Instance==ADC1)


{


/* Peripheral clock disable */



__HAL_RCC_ADC1_CLK_DISABLE();


71



HAL_
GPIO_DeInit(GPIOA, GPIO_PIN_1);

}}

Листинг

файла

stm32f4xx_it.c

/*
Includes
------------------------------------------------------------------
*/

#include "stm32f4xx_hal.h"

#include "stm32f4xx.h"

#include "stm32f4xx_it.h"

/* External variables
--------------------------------------------------------
*/

Def htim3;

extern const uint16_t SINTABLE [255][3];

int i;

void NMI_Handler(void)

{}

void HardFault_Handler(void)

{ while (1) { } }

void MemManage_Handler(void)

{ while (1) { }}

void BusFault_Handler(void)

{ while (1) {}}

void UsageFault_Handler(void)

{w
hile (1) { } }

void SVC_Handler(void)

{}

void DebugMon_Handler(void)

{}

void PendSV_Handler(void)

{}

void SysTick_Handler(void)

{


HAL_IncTick();


HAL_SYSTICK_IRQHandler();

}


void TIM3_IRQHandler(void)

{


HAL_TIM_IRQHandler(&htim3);


TIM1
-
�CCR1 = SINTABLE [i][1];


TIM1
-
�CCR2 = SINTABLE [i][2];


TIM1
-
�CCR3 = SINTABLE [i][3];


i++;


if (�i 255)


{


i = 0;


}

}



Приложенные файлы

  • pdf 9563132
    Размер файла: 3 MB Загрузок: 0

Добавить комментарий