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

Проект был внедрён в сверлильный станок 05/06/2017,
12/07/2017 был исправлен глюк с наводками на клаву/усреднением/подавлением дребезга/наводок.
За 6+ месяцев каждодневной эксплуатации - было 2 подвисания мозга, без дыма, просто перезапуск.
При отладке и тестировании удалось ничего не спалить - потери деталей = 0.
Модули IRAMX оказались достаточно живучими и без школьных ошибок в силовой части.

Настройка параметров в меню примерно такая:

1.	Для каждого мотора есть номинальная частота и напряжение, на которое намотаны обмотки мотора.
Наклон V/F прямой обусловлен именно этим базовым соотношением.
2.	Действующее значение тока в обмотках двигла должно быть примерно 
одинаковое во всём диапазоне оборотов.
	Начальное смещение - это компенсация активного сопротивления обмоток, наклон - компенсация реактивного. 
3.	Начальное смещение прямой V/F - примерно половина от диапазона регулировки. Наклон - примерно половина диапазона регулировки.
В итоге модуляция 100% должна достигаться примерно на 2/3 оборотов, далее разгон с падением крут момента.
4.	Первой определяем настройку верхней границы диапазона оборотов.
	С включённым мотором при средних оборотах настройкой параметра MaxSpdIndx устанавливаем
	потребляемый ток примерно соответствующий номиналу мотора. 
	Первые 4 значения MaxSpdIndx подключают таблицы 100, 200, 400, 800 Гц максимальных соответственно,
	далее MaxSpdIndx плавно указывает максимум оборотов, если MaxSpdIndx=0xFF то макс обороты 65К.
5.	Выставляем минимальные рабочие обороты, запуск двигла. Начальным смещением добиваемся макс крут момента
и соответствия потр тока на малых оборотах номинальному току двигла.
6.	Выбираем параметр "ускорение" (величина задержки между приращениями скорости) мотора,
	при редактировании "ускорения" начинает работать бесконечный цикл Пуск-Разгон до указанных оборотов -Стоп - Реверс - Цикл.
Регулируем "ускорение" до уверенных старт/стопов мотора без пропусков поля и без потери сцепления с полем при торможении.
При достаточном начальном подмагничивании - потери сцепления с полем не будет, но можно настроить чутьё программной защиты на отключение.
7.	Настройка опорного напряжения компараторов защиты IRAMX - делается по контрольному светодиоду,
	примерно на макс рабочий ток модуля IRAMX.
	Быстродействие компараторов высокое, наводки и прочее - СД начинает излучать раньше реального успевания драйверов IRAMX отключаться.

Схемы в готовом виде не существует, основа в текстовом виде ниже.
Подключение энкодера управления долго менял варианты из-за экономии ног и мультиплексирования
енкодера/клавы с ЛЦД, на фото могут различаться, подробности в коде.
Подключение компараторов защиты 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  и скомпилироваться, без ошибок и предупреждений.
Если существует файл паковщика %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 в нём руками явно перечислены имена каталогов подсистем для сборки итоговых файлов перед каждой компиляцией.

Использованы абсолютные пути для преодоления глюков отладчика 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 скомпилирован с опцией:
   #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 градусов: