Устранена зависимость дискретов СИФУ от основного цикла в 166
Фронты START/STOP обрабатываются при принятии командного слова CAN/RS, а окончание импульса обслуживается таймером. STOP имеет приоритет, перекрытие выходов исключено, сохранена защита от самопуска при включении. Загрузка параметров больше не подменяет живые команды нагрузки. Добавлены подробные русские комментарии во все собственные C-модули и основные заголовки, описание поведения и host-тест автомата. Обновлены файлы прошивки. Полная сборка TI 22.6.1.LTS и тесты пройдены; проверка на физической плате не выполнялась.
This commit is contained in:
+24
-2
@@ -1,3 +1,10 @@
|
||||
/* ЦАП нагрузки и аппаратная обёртка импульсов СИФУ. Load_runner
|
||||
* вызывается таймером 1 кГц, расчёт ЦАП делится до DAC_FREQ.
|
||||
* Формула 166 задаёт фиксированный разгон 6..16 мА. DAC_min/max
|
||||
* переводят положение в код, cCalibrDac выбирает ручной код.
|
||||
* WAKEpowse относится к ЦАП, не является разрешением дискрета запуска.
|
||||
* Автомат СИФУ подключён в конце файла через ump_control_impl.h.
|
||||
*/
|
||||
#include "DSP2833x_Device.h" // DSP281x Headerfile Include File
|
||||
#include "DSP2833x_SWPrioritizedIsrLevels.h"
|
||||
#include "filter_bat2.h"
|
||||
@@ -11,6 +18,7 @@
|
||||
|
||||
#include "peripher.h"
|
||||
#include "log_to_mem.h"
|
||||
#include "ump_pulse.h"
|
||||
|
||||
#define dCLK_1() GpioDataRegs.GPBSET.bit.GPIO63=1
|
||||
#define dCLK_0() GpioDataRegs.GPBCLEAR.bit.GPIO63=1
|
||||
@@ -18,9 +26,12 @@
|
||||
#define dCS_0() GpioDataRegs.GPBCLEAR.bit.GPIO59=1
|
||||
|
||||
unsigned long WAKEpowse;
|
||||
unsigned long IMPowse;
|
||||
volatile unsigned long IMPowse;
|
||||
unsigned int period_dac, time_dac;
|
||||
|
||||
/* Инициализация, не обработка каждого START. 601 отсчёт при 200 Гц
|
||||
* дают около 3 секунд до рабочего расчёта ЦАП после включения.
|
||||
*/
|
||||
void Setup_DAC_time(void)
|
||||
{
|
||||
WAKEpowse = 3L * DAC_FREQ +1;
|
||||
@@ -65,6 +76,10 @@ void Init_DAC(void)
|
||||
dSEND(0x9002|0x0000); toggle_RES_OUT_1();
|
||||
}
|
||||
|
||||
/* vrot/maxx — доля диапазона между кодами 4 и 20 мА. Маска 0xFFF
|
||||
* сохраняет 12 бит, но не является насыщением. modbus[0x1C] содержит
|
||||
* расчётное задание, не измеренный ток на выходных клеммах.
|
||||
*/
|
||||
void Anal_output(long vrot, long maxx)
|
||||
{
|
||||
long out;
|
||||
@@ -101,13 +116,17 @@ Log_to_mem(modbus[0x1D]);
|
||||
|
||||
}
|
||||
|
||||
/* После половины time_dac счётчик растёт дважды за вызов. Поэтому
|
||||
* LOAD_TIME=30 даёт примерно 22.5 с до конца разгона при 200 Гц.
|
||||
* Существующий профиль 166 исправление импульса СИФУ не меняет.
|
||||
*/
|
||||
void Load_runner()
|
||||
{
|
||||
static unsigned int count_dac=0, count_load=0, x=1;
|
||||
float sinus=0;
|
||||
int kod;
|
||||
|
||||
if(IMPowse) IMPowse--;
|
||||
/* IMPowse обновляется UMP_pulse_tick(), а не алгоритмом ЦАП. */
|
||||
if(++count_dac >= period_dac)
|
||||
{
|
||||
count_dac=0;
|
||||
@@ -158,3 +177,6 @@ void Load_runner()
|
||||
|
||||
Anal_output(kod, time_dac);
|
||||
} } } }
|
||||
|
||||
|
||||
#include "ump_control_impl.h"
|
||||
|
||||
Reference in New Issue
Block a user