Разработанный и собранный Экземпляр №1 был внедрён в сверлильный станок 05/06/2017,
12/07/2017 был исправлен глюк с наводками на клаву/усреднением/подавлением дребезга/наводок.
За 36+ месяцев каждодневной эксплуатации - было несколько подвисаний экрана, без дыма, просто перезапуск.
При отладке и тестировании удалось ничего не спалить - потери деталей = 0.
Модули IRAMX оказались достаточно живучими и без школьных ошибок в силовой части.
Разработанный и собранный Экземпляр №2 был внедрён в станок ЧПУ 03/10/2018.
За 20+ месяцев каждодневной эксплуатации (привод шпинделя 2.2 КВт 400 Гц) - только подвисания LCD экрана от ЭМИ,
обходятся ежеминутными/ежесекундными сбросами LCD в рабочем/служебном экране.
Экземпляр №2А при тестировании в апреле 2019 взорвалась керамика около силового модуля,
после ремонта пробитые тормозные транзисторы сожгли второй силовой модуль.
В качестве обходной меры - добавлен внешний тормозной резистор 100-1000 Вт и удалены резисторы в истоках тормозных ключей IRFP460,
добавлен мощный ограничитель 15 вольт на IRFP460 и стабилитроне, добавлены стабилитроны-ограничители 16 вольт плавающего питания,
 добавлены стабилитроны-ограничители 5 вольт питания мелкопроца, добавлен стабилитрон-ограничитель
 16 вольт шунтирования входа измерения напруги DC шины,
 позволяющий разрядить силовые конденсаторы при отсоединённой плате мозга через резистор 5 Вт 47К.
Экземпляр №2А был внедрён в станок ИТ-1М 07/02/2020. Через ~5 месяцев эксплуатации
 обострилась глюка со сработкой триггера защиты КЗ сразу после старта 3 КВт мотора АИР100S4 - 
20/07/2020 шлифанул процедуру стартовой зарядки конденсаторов плавающего питания и
 сглаживающего конденсатора термистора - глюка затаилась/пропала без замены компонент.

Настройка проекта под конкретику.

Для настройки амплитуды синуса весьма желателен измеритель переменного тока в одной из фаз двигателя.
Использован 8 разрядов микроконтроллер, все настроечные параметры - 8 бит: 
(диапазон -127 : +127 или 0 : 255 или 0x00 : 0xFF - различное представление 8 бит чисел ).
Настройка параметров в меню примерно такая:
0.	Реализованы несколько (20/07/2020=16 но придётся уменьшать количество) именованных наборов настроек
 параметров двигателя с быстрым переключением (параметр №1 "Номер Мотора").
В некоторые из них занесены параметры реальных моторов, например тестового 1.5 КВт 4 полюса на вид
ео до 100 Гц.
При смене номера мотора - состояние привода (остановлен или работает) определяет либо смену набора
 настроек мотора с перезапуском частотника (при остановленном приводе) 
либо копирование имеющихся настроек в указанный при смене номера набор (при работающем приводе).
1.	Для каждого мотора есть номинальная частота и напряжение, на которое намотаны обмотки мотора.
Смещение от 0 и подъём=наклон V/F прямой обусловлен величинами активного и реактивного сопротивления обмоток.
2.	Действующее значение тока в обмотках двигла должно быть примерно 
одинаковое во всём диапазоне оборотов.
Начальное смещение (параметр №6 "Нач. Модуляц.") - это компенсация активного сопротивления обмоток,
наклон/усиление (параметр №7 "Усил.Модуляц.") - компенсация реактивного. 
Для настройки/подстройки синтезатора под конкретику мотора и сети - требуется подбор этих коэффициентов.
2а.	Примерно 22/03/2020 добавлен параметр №19 "Номинал DC", старший байт регулируется в меню, шаг настройки ~2 вольта.
При уменьшении напруги DC от номинала например вдвое - выходная модуляция синтезатора возрастёт вдвое, наоборот тоже верно.
Это позволяет компенсировать изменения DC и например крутить мотор HDD от ЛБП 30 вольт и от розетки 220 вольт
почти без изменения коэффициентов смещения и наклона прямой U/F.
3.	Ориентировочные значения параметров: Начальное смещение прямой V/F - примерно половина от диапазона регулировки.
Наклон - примерно половина диапазона регулировки, окончательный подбор по току фазы и нагреву привода.
Один из вариантов настройки прямой U/F для привода макс 100 Гц:
 модуляция 100% (0xCC) должна достигаться примерно на 1/2 оборотов (номинал 50 Гц), на 2/3 модуляция 120% (0xFF),
 далее разгон с падением крут момента.
4.	Долгим ~5 сек нажатием на кнопу энкодера - переходим в служебный интерфейс настройки параметров. 
Первой определяем настройку верхней границы диапазона оборотов, исходя из конкретики проекта и свойств мотора.
Параметр MaxSpdIndx значение от 0 до 3 - это готовые таблицы для максимальных частот
 100-200-400-800 Гц (21/07/2020 осталась лишь 0 таблица до 100 Гц, на 17/11/2020 места под таблицы не хватает - удалены все).
Значения от 0х04 до 0xFF - это указание максимальной частоты настройки синтезатора
 от ~25 Гц до ~1090 Гц с шагом ~4.23 Гц.
5.	Имеющегося постоянного напряжения шины DC достаточно для поддержания номинального фазного тока 
лишь до ограниченных/определённых оборотов двигателя.
При разгоне выше этой частоты - будет снижение фазного тока двигателя с падением крутящего момента.
Если имеющегося крутящего момента не хватает для преодоления трения потерь и нагрузки - ротор остановится.
Если номинальная частота и напряжение и фазный ток двигателя известны - это упрощает задачу выбора коэффициентов модуляции.
Например для двигателя 220 вольт 50 Гц - можно указать MaxSpdIndx=0,
при котором "скорость поля" = 0xFF означает 100 Гц синтезатора.
Соответственно при "скорости поля"=0x80 будет 50 Гц и необходима 100% модуляция (~0xCC для 8 бит или 0xCCC для 12 бит амплитуды).
При этом фазный ток двигателя будет близким к номинальному.
6.	Наличие ограничителей синусоиды (примерно 1/5) позволяет указывать модуляцию выше 100% - примерно 120% соответствует значению 0xFF или 0xFFF  
7.	Выставляем минимальные рабочие обороты (скорость поля = 1), запуск двигла.
 Начальным смещением добиваемся соответствия фазного тока на малых оборотах номинальному фазному току двигла.
8.	Увеличиваем обороты до ~10 Гц = 600 об/мин. Ток фазы может немного возрасти (на ~1/10).
9.	Увеличиваем обороты до модуляции 100%. (0xСС) или до номинальных для двигла (если они известны). 
 Ток фазы приводим к номинальному регулировкой параметра "усиление", при этом модуляция будет изменяться.
10.	Финальную подстройку коэффициентов модуляции - надо делать по 2 точкам эксплуатации -
 с нагрузкой двигла его типичной нагрузкой на типичных оборотах (поиск компромисса потребляемой приводом мощности сети),
 и на малых оборотах (поиск компромисса между перегревом и достаточностью крутящего момента).
11.	Выбираем параметр "ускорение" (величина времени задержки между единичными приращениями скорости) мотора,
	при редактировании "ускорения" начинает работать бесконечный цикл Пуск-Разгон до указанных оборотов -Стоп - Реверс - Цикл.
Регулируем "ускорение" до уверенных старт/стопов мотора без пропусков поля и без потери сцепления с полем при торможении.
При достаточном начальном подмагничивании - потери сцепления с полем не будет, но можно настроить/проверить чутьё программной защиты по току.
12.	Настройка в №1 опорного напряжения компараторов защиты IRAMX - делается по контрольному светодиоду,
	примерно на макс рабочий ток модуля IRAMX.
	Быстродействие компараторов высокое, наводки и прочее - СД начинает излучать раньше реального успевания драйверов IRAMX отключаться.

Схема нарисована только для №3, основа схем №1 и №2 в текстовом виде ниже.
Подключение энкодера управления долго менял варианты из-за экономии ног и мультиплексирования
енкодера/клавы с ЛЦД, на фото могут различаться, подробности в коде.
Подключение компараторов защиты IRAMX LM339 и ОУ тока/выключения реле зарядки LM324 можно увидеть на фото платы и модуля.
Напряжение токовых шунтов 0.05 Ом в ногах IRAMX 12,13,14 сдвигается на 2.5 вольта вверх и делится на 2 резисторным делителем 200 Ом- 200 Ом - к 5 вольт.
Напряжение после делителя сравнивается 3/4 компараторами LM339 с опорным от подстроечного резистора 2.5-5 вольт.  
Выходы ОК 3/4 компараторов параллельно открывают PNP транзистор, который подтягивает 21 вывод IRAMX
к 16 вольтам через контрольный светодиод и резистор 12КОм.
Цепь резисторов измерения температуры IRAMX взята из документации на IRAMX.
Избыток напряжения на шине от рекуперации рассеивается в тепло парой IRFP460, открываемыми компаратором на ОУ 1/4 LM324,
сравнивающим напряжение на выводе 4=AN2 c 5 вольтами.
Выход ОУ подаётся через резистор 1.2 КОм на затворы двух IRFP460, имеющих в цепи истока резисторы
47 Ома 5W и шунтирующий исток-затвор резистор 1.2 КОм, а в цепи стока плавкие предохранители 1 Ампер.
 При питании ОУ 16 вольт - каждый IRFP460 будет рассеивать около 57 Вт при токе стока около 127 мА и напряжении на стоке 450 вольт.
Реле закорачивания зарядного резистора управляется 1/4 ОУ LM324, сравнивающим напряжение на выводе 3=AN1 c опорным 4.7-4.8 вольта.
По ссылкам из  можно загрузить одну из опубликованных полных копий прожекта.
Если её разместить по абсолютному пути C:\Microchip\_Prg\RTOS_3F_4431
то файл C:\Microchip\_Prg\RTOS_3F_4431\RTOS_3F_4431.mcp
должен открыться в MPLAB 8.80  и скомпилироваться, без ошибок и предупреждений:

Executing: C:\Microchip\_Prg\RTOS_3F_4431\AddIncludeFiles.bat
Executing: "C:\Microchip\MPLABX_410\mpasmx\mpasmx.exe" /q /p18F2431 "C:\Microchip\_Prg\RTOS_3F_4431\Main\Main_3F.asm" /l"C:\Microchip\_Prg\RTOS_3F_4431\_Out\Main_3F.lst" /e"C:\Microchip\_Prg\RTOS_3F_4431\_Out\Main_3F.err" /o"C:\Microchip\_Prg\RTOS_3F_4431\_Out\Main_3F.o" /x"C:\Microchip\_Prg\RTOS_3F_4431\_Out\Main_3F.xrf"
Warning[212] C:\MICROCHIP\_PRG\RTOS_3F_4431\MAIN\MAIN_3F.ASM 262 : Expected (ENDIF)
Executing: "C:\Microchip\MPLABX_410\mpasmx\mpasmx.exe" /q /p18F2431 "C:\Microchip\_Prg\RTOS_3F_4431\RTK\RealTimeKeep.asm" /l"C:\Microchip\_Prg\RTOS_3F_4431\_Out\RealTimeKeep.lst" /e"C:\Microchip\_Prg\RTOS_3F_4431\_Out\RealTimeKeep.err" /o"C:\Microchip\_Prg\RTOS_3F_4431\_Out\RealTimeKeep.o" /x"C:\Microchip\_Prg\RTOS_3F_4431\_Out\RealTimeKeep.xrf"
Warning[212] C:\MICROCHIP\_PRG\RTOS_3F_4431\RTK\REALTIMEKEEP.ASM 340 : Expected (ENDIF).

(Warning[212] : Expected (ENDIF) ложный - какой-то глюк MpLab, найти НЕ соответствие начал и концов блоков условной компиляции не удалось)

Если существует файл паковщика %SystemRoot%\_7z\7z.exe - то после успешной компиляции
в каталоге C:\Microchip\_Prg\RTOS_3F_4431\_Arh\_EC будет создана резервная копия файлов проекта.
С целью увеличения структурирования универсальная заготовка разбита на подсистемы.
Все имеющие отношение к подсистеме файлы размещены в отдельном подкаталоге (например SubDir) проекта.
В подсистему могут входить файлы:
1. ASM - главный файл, с определениями для подсистемы, подпрограммами и прочим. Добавляется к списку исходных файлов в MpLab руками.
2. Включаемые файлы с заранее определёнными именами:
    2_1) Описания переменных  с разбивкой на банки DefVar0_SubDir.inc - DefVar3_SubDir.inc - DefVarAcs_SubDir.inc и определения констант Define_SubDir.inc модуля.
Эти файлы перед каждой компиляцией копируются/собираются AddIncludeFiles.bat в итоговые _Out\  DefVar0_All.inc - DefVarAcs_All.inc и Define_All.inc,
которые указаны как включаемые в Define.inc, добавляемый к каждому ASM. Это расширяет область видимости определений и переменных на все модули-подсистемы.
Для каждой подсистемы определён её основной банк памяти в файле Define_SubDir.inc, например: #define PCPWM_Page movlb 0x1 ; BSR на Bank-1 for PCPWM 
Перенос переменных подсистемы между банками (при недостатке места в одном банке для нескольких подсистем) производится изменением этого определения.
В цикле опроса дружественной многозадачности после опроса флага запроса процессора перед вызовом кода подсистемы - BSR присваивается основной банк подсистемы.
Внутри кода подсистемы при необходимости переключения банков - возврат к основному банку так же через ранее определённую строковую константу.
Столь ручная организация распределения памяти - показалась наиболее эффективной и не самой обременительной в реализации.  
    2_2) MLTask_SubDir.inc - код для цикла опроса дружественной многозадачности. Собираются в _Out\MLTask_All.inc перед компиляцией,
    включаются в Main_.asm подсистемы "Main".
    2_3) Init_SubDir.inc - код инициализации подсистемы. Собираются в _Out\Init_All.inc перед компиляцией, включаются в Main_.asm подсистемы "Main"
    после сброса перед запуском цикла опроса задач.
3. Код для включения в обработчики прерываний, например Int_PCPWM_3F_4431.inc. Добавляется к обработчикам Hi и Low веток прерываний 
    в файле подсистемы Interrupt\RTOS_Interrupt.asm руками.
4. Любые другие файлы и подкаталоги, имеющие отношение к подсистеме.
Для корректного выполнения AddIncludeFiles.bat в нём руками явно перечислены имена каталогов подсистем для сборки итоговых файлов перед каждой компиляцией.
Для временного отключения добавленной подсистемы (например 1-Ware) достаточно закоментировать 1 строку в AddIncludeFiles.bat.

Использованы абсолютные пути для преодоления глюков отладчика MPLAB.
При изменении абсолютного расположения файлов -
 поправить как минимум 
AddIncludeFiles.bat
Define.inc
При добавлении АСМ файлов в прожект - 
использовать абсолютный путь 
иначе отладчик не видит исходники.

Для большей информации - читать текстовые файлы внутри проекта, например
Descr.txt
3F_Version.txt
3F_Descr.txt
3F_Algo.txt

В качестве примера распределения ног и ресурсов использована реализация 3Ф синтезатора частоты с опросом датчиков 1-Ware,
текстовым LCD на HD44780, кнопами и енкодером на выводах LCD, 8 каналов АЦП, бипер, несколько отладочных светодиодов,
запас ног/таймеров/ОЗУ/ПЗУ для внешних коммуникаций.


Этапы проектирования и конфигурирования конструктора:
1. Выбрать мелкопроц Микрочип-18 в зависимости от необходимого количества ног, памяти и периферии
	 (с учётом что ног и памяти и быстродействия обычно не хватает в итоге).
2. Выбрать подсистемы которые нужны для задачи
3. Минимальный перечень подсистем - Main как начало начал, АЦП (как источник времени) и УчётРеальногоВремени
	(без которого не функционируют задержки) например.
	АЦП может сэмплировать 1 канал с буфером 4х чисто для проформы/для учёта времени.
4. Добавить АСМ файлы в прожект, закоментировать не нужные подсистемы в AddIncludeFiles.bat.
5. Указать абсолютный путь к проекту в Define.Inc
6. Отредактировать Init_Task в подсистемах в соответствии с планом на использование ног.
7. Распределить включаемые файлы обработчиков прерываний подсистем между Hi или Low ветками.
	Помнить исключать обработку/сброс флага в одной ветке при переносе обработчика в другую.

Распределение ног 18F4431 с учётом хотелок/потребностей:
1	Стандартный	каб-	Резерв для	RE3	Сброс/Только Вход	Стартовая кнопа или 2 кнопы (мультиплекс через ЛЦД R/W-En)
							или вход аварийного сброса по сверхтоку от 3х компараторов LM339
39	ель внутрисхемного	будущих		RB7	динамик отключаемый в разъём ICSP в будущем
40	программирования	применений	RB6	1-Wire нога в разъём ICSP в будущем

АЦП сконфигурирован для выборки из 8 входов, но в программе обрабатываются лишь 3 входа, остальные значения накапливаются но игнорируются:

2	Аналог Вход 0 Термистор/оптрон дополнительный темп мотора/Регулировка переменник ?
3	Аналог Вход 1 Термистор IRAMX вход 0-5 вольт/управление реле зарядки конденсаторов через ОУ 1/4 LM324
4	Аналог Вход 2 Делённое на 90 напряжение шины постоянки 450 вольт
5	Аналог Вход 3 Общий ток шины 450 вольт между кондёрами шунт 0.01 Ом/усилитель около 70 раз
6	Захватчик QEI -3 датчика оборотов двигла - не используется пока
7	Аналог Вход 5 Нижний Ток фаза-1 быстрый - не используется пока
8	Аналог Вход 6 Нижний ток фаза-2 быстрый - не используется пока
9	Аналог Вход 7 Нижний ток фаза-3 быстрый - не используется пока
10	Аналог Вход 8 Напряжение шины постоянки 450-500 вольт быстрое для ШИМ/ПИД - не используется пока

11 AVDD = 5V
12 AVSS = 0V

13	CLC Вход	12 MHz кварец
14	CLC Выход	12 MHz кварец

16	CCP1 выход (корректор мощности) - не используется пока
17	CCP2 выход (ШИМ яркости дисплея) RED LED временно
18	INT0 вход прерывания перехода сети через 0 от компаратора - GRN LED временно

 Тетрада шины обмена с ЛЦД/Клавой/енкодером, подтянута через 11 КОм на +2.5 вольта:
19 RD0 = 11 LCD_4 	Допустимый	= 11К = +2.5V - от дополнительного
20 RD1 = 12 LCD_5 	выходной	= 11К = +2.5V - делителя 330 Ом + 330 Ом
21 RD2 = 13 LCD_6 	ток HD44780	= 11К = +2.5V - и шунтирующего конденсатора
22 RD3 = 14 LCD_7 	IOL = 1.2 mA 	= 11К = +2.5V - керамика 7 мкФ.

 и параллельно шине LCD к ногам 4431 припаяны выходы от строк кнопок/енкодера:
19 RD0 = | = 4К7 =ЕнкВых+кнопы	
20 RD1 = | = 4К7 =Кнопы		
21 RD2 = | = 4К7 =ЕнкВых+кнопы	
22 RD3 = | = 4К7 =Кнопы		


 Управление ЛЦД/клавой/енкодером:
28 RD5 = 06 LCD_Enable=ничего более без внешнего дешифратора
29 RD6 = 05 LCD_R/W = K51 = Кнопы 1 строка 
30 RD7 = 04 LCD_R/S = K51 = Кнопы 2 строка = енкодер  вход 

Три кнопки на лицевой панели - присоединены между выводами 4431:
Старт/стоп/память №1 = 29 х 20 одинаково в обоих платах
Старт/стоп/память №2 = 29 х 21 учебная или  30 х  22 боевая
Реверс = 29 х 22 одинаково в обоих платах
Кнопа енкодера = 30 х 20 одинаково в обоих платах
Датчик енкодера общий вход = 30, парафазные выходы = 19 и 21

15	RC0 CS SPI DAC или 1-W временно, позже на RB6
23	DAC SPI SCK	- не используется пока
24	DAC SPI SDI - не используется пока
25	TX USART to Host Comp или светодиод отладка
26	RX USART from Host Comp или светодиод отладка
27	FLTA вход внешнего отключения PWM - Beeper временно, позже на RB7

31 VSS= 0V= 01 LCD_VSS = 23 IRAMX16UP60A = 07_Dip14
32 VDD= 5V= 02 LCD_VDD <= 7805 <= +16V 22 IRAMX16UP60A = 08_Dip14

33 PWM #0 = К20 = LIN1 = 18 IRAMX16UP60A = 12_Dip14
34 PWM #1 = К20 = HIN1 = 15 IRAMX16UP60A = 01_Dip14
35 PWM #2 = К20 = LIN2 = 19 IRAMX16UP60A = 04_Dip14
36 PWM #3 = К20 = HIN2 = 16 IRAMX16UP60A = 14_Dip14
37 PWM #5 = К20 = HIN3 = 17 IRAMX16UP60A = 02_Dip14 ; Почему-то микрочип поменял выходы
38 PWM #4 = К20 = LIN3 = 20 IRAMX16UP60A = 11_Dip14 ; местами, и это не опечатка - проверено. 

Для проверки качества генерации синуса прошивкой - минимально достаточно припаять к PIC18F4431 кварц 12 МГц, питание с шунтирующей керамикой,
   подтянуть 19 RD0, 20 RD1, 21 RD2, 22 RD3 к логической 1 резисторами 8-12 КОм.
   Опубликованный HEX экземпляра №1 скомпилирован с опцией:
   #define PCPWM_Board Yes ; Плата настольная без периферии (файл Define_PCPWM_3F.inc строка ~2)
   отключающей контроль тока и напряжения перед автостартом синтезатора. Если отключить эту опцию - то надо подать 5 вольт на вывод 4=AN2 и 0 вольт на вывод 5=AN3 и примерно 2-3 вольта резисторным делителем 5-10К на вывод 3=AN1 для соблюдения условий автозапуска синтезатора при подаче питания.

Синтезатор начинает генерировать комплементарный центрально-симметричный ШИМ частотой 5 859 Гц на выводах 33-38 для управления 6 шт. ключей с защитным интервалом ~1 мкСек, частота огибающей после фильтрующей RC цепи 1 КОм + 1 мкФ = 50 Гц, сдвиг фаз 120 градусов: