Browse Source

Аналоговые модули.

TelenkovDmitry 5 months ago
parent
commit
76599a14a1

+ 36 - 26
fw/modules/io/analog_input.c

@@ -17,6 +17,11 @@
 
 #if defined (MAI_12)  
 
+#define VOLTAGE_FACTOR  0.182382
+
+#define CURRENT_FACTOR  0.00091191
+
+
 //uint16_t ai_state_bit;
 
 uint8_t ai_mux;     // выход сдвигового регистра U1010 (управляет MUX 301, 401)
@@ -32,9 +37,9 @@ uint16_t ai_alarm;  // слово аварий входов
 uint16_t ai_gain[AI_COMMON_NUMBER]; // массив коэффициентов усиленя (modbus)
 
 uint16_t adc_com_raw_data[AI_COMMON_NUMBER]; // сырые данные
-float adc_com_data[AI_COMMON_NUMBER];   // пересчитанные, фильтрованные данные
+float adc_com_data[AI_COMMON_NUMBER];        // пересчитанные, фильтрованные данные
 
-uint16_t adc_com_fil_data[AI_COMMON_NUMBER];
+uint16_t adc_com_fil_data[AI_COMMON_NUMBER]; // Фильтрованные данные (только для отладки)
 
 uint16_t adc_add_raw_data[AI_ADD_NUMBER];
 
@@ -205,30 +210,30 @@ void ai_processing(void)
     adc_com_fil_data[0 + 6] = average_int(&average_filter[0 + 6], adc_com_raw_data[0 + 6]);
 #endif
     
-#if 1  
+
     // 12 основных каналов 
     for (uint8_t i = 0; i < AI_COMMON_NUMBER/2; i++)
     {
         adc_meas_two_channels(&settings.ai[i], &settings.ai[i + 6], 
                               &adc_com_raw_data[i], &adc_com_raw_data[i + 6]);
         
-        // Фильтрация
+        adc_com_data[i]     = 
+        adc_com_data[i + 6] = 
+        
+        // Фильтрация. Скользящее среднее. Только для отладки.
         adc_com_fil_data[i]     = average_int(&average_filter[i], adc_com_raw_data[i]);
         adc_com_fil_data[i + 6] = average_int(&average_filter[i + 6], adc_com_raw_data[i + 6]);
     }
-#endif
-    
-    
-#if 1    
+
     // 4 дополнительных канала
     for (uint8_t i = 0; i < AI_ADD_NUMBER/2; i++)
     {
         adc_meas_two_channels(&settings.ai_add[i], &settings.ai_add[i + 2], 
                               &adc_add_raw_data[i], &adc_add_raw_data[i + 2]);
     }
-#endif    
     
-#if 0    
+    
+#if 1    
     printf("end\r\n");
     adc_print_data();
     //adc_print_data_extend();
@@ -301,23 +306,28 @@ void adc_print_data(void)
     printf("\033[2J"); 
     printf("\033[H");  
     
-    printf("AN_INP_1: 0x%X, %.3f\r\n", adc_com_raw_data[0], (double)adc_com_raw_data[0]*0.00001785305/0.0961538);
-    printf("AN_INP_2: 0x%X, %f\r\n", adc_com_raw_data[1], (double)adc_com_raw_data[1]*0.00001785305/0.0961538);
-    printf("AN_INP_3: 0x%X, %f\r\n", adc_com_raw_data[2], (double)adc_com_raw_data[2]*0.00001785305/0.0961538);
-    printf("AN_INP_4: 0x%X, %f\r\n", adc_com_raw_data[3], (double)adc_com_raw_data[3]*0.00001785305/0.0961538);
-    printf("AN_INP_5: 0x%X, %f\r\n", adc_com_raw_data[4], (double)adc_com_raw_data[4]*0.00001785305/0.0961538);
-    printf("AN_INP_6: 0x%X, %f\r\n", adc_com_raw_data[5], (double)adc_com_raw_data[5]*0.00001785305/0.0961538);
-    printf("AN_INP_7: 0x%X, %f\r\n", adc_com_raw_data[6], (double)adc_com_raw_data[6]*0.00001785305/0.0961538);
-    printf("AN_INP_8: 0x%X, %f\r\n", adc_com_raw_data[7], (double)adc_com_raw_data[7]*0.00001785305/0.0961538);
-    printf("AN_INP_9: 0x%X, %f\r\n", adc_com_raw_data[8], (double)adc_com_raw_data[8]*0.00001785305/0.0961538);
-    printf("AN_INP_10: 0x%X, %f\r\n",adc_com_raw_data[9], (double)adc_com_raw_data[9]*0.00001785305/0.0961538);
-    printf("AN_INP_11: 0x%X, %f\r\n",adc_com_raw_data[10],(double)adc_com_raw_data[10]*0.00001785305/0.0961538);
-    printf("AN_INP_12: 0x%X, %f\r\n",adc_com_raw_data[11],(double)adc_com_raw_data[11]*0.00001785305/0.0961538);
     
-    printf("V_ISO_CL: 0x%X, %f\r\n", adc_add_raw_data[0], (double)adc_add_raw_data[0]*0.00001785305/0.0961538);
-    printf("V_ISO: 0x%X, %f\r\n",    adc_add_raw_data[1], (double)adc_add_raw_data[1]*0.00001785305/0.0961538);
-    printf("CRNT_LIM_U_BFR_R: 0x%X, %f\r\n", adc_add_raw_data[2],(double)adc_add_raw_data[2]*0.00001785305/0.0961538);
-    printf("CRNT_LIM_U_ABFR_R: 0x%X, %f\r\n",adc_add_raw_data[3],(double)adc_add_raw_data[3]*0.00001785305/0.0961538);
+    printf("AN_INP_1: 0x%X, %.3f\r\n", adc_com_raw_data[0], (double)adc_com_raw_data[0]*VOLTAGE_FACTOR);
+            
+#if 0    
+    printf("AN_INP_1: 0x%X, %.3f\r\n", adc_com_raw_data[0], (double)adc_com_raw_data[0]*VOLTAGE_FACTOR);
+    printf("AN_INP_2: 0x%X, %f\r\n", adc_com_raw_data[1], (double)adc_com_raw_data[1]*VOLTAGE_FACTOR);
+    printf("AN_INP_3: 0x%X, %f\r\n", adc_com_raw_data[2], (double)adc_com_raw_data[2]*VOLTAGE_FACTOR);
+    printf("AN_INP_4: 0x%X, %f\r\n", adc_com_raw_data[3], (double)adc_com_raw_data[3]*VOLTAGE_FACTOR);
+    printf("AN_INP_5: 0x%X, %f\r\n", adc_com_raw_data[4], (double)adc_com_raw_data[4]*VOLTAGE_FACTOR);
+    printf("AN_INP_6: 0x%X, %f\r\n", adc_com_raw_data[5], (double)adc_com_raw_data[5]*VOLTAGE_FACTOR);
+    printf("AN_INP_7: 0x%X, %f\r\n", adc_com_raw_data[6], (double)adc_com_raw_data[6]*VOLTAGE_FACTOR);
+    printf("AN_INP_8: 0x%X, %f\r\n", adc_com_raw_data[7], (double)adc_com_raw_data[7]*VOLTAGE_FACTOR);
+    printf("AN_INP_9: 0x%X, %f\r\n", adc_com_raw_data[8], (double)adc_com_raw_data[8]*VOLTAGE_FACTOR);
+    printf("AN_INP_10: 0x%X, %f\r\n",adc_com_raw_data[9], (double)adc_com_raw_data[9]*VOLTAGE_FACTOR);
+    printf("AN_INP_11: 0x%X, %f\r\n",adc_com_raw_data[10],(double)adc_com_raw_data[10]*VOLTAGE_FACTOR);
+    printf("AN_INP_12: 0x%X, %f\r\n",adc_com_raw_data[11],(double)adc_com_raw_data[11]*VOLTAGE_FACTOR);
+    
+    printf("V_ISO_CL: 0x%X, %f\r\n", adc_add_raw_data[0], (double)adc_add_raw_data[0]*VOLTAGE_FACTOR);
+    printf("V_ISO: 0x%X, %f\r\n",    adc_add_raw_data[1], (double)adc_add_raw_data[1]*VOLTAGE_FACTOR);
+    printf("CRNT_LIM_U_BFR_R: 0x%X, %f\r\n", adc_add_raw_data[2],(double)adc_add_raw_data[2]*VOLTAGE_FACTOR);
+    printf("CRNT_LIM_U_ABFR_R: 0x%X, %f\r\n",adc_add_raw_data[3],(double)adc_add_raw_data[3]*VOLTAGE_FACTOR);
+#endif
 }
 
 //

+ 2 - 2
fw/modules/modbus/modbus_ai_params.c

@@ -137,7 +137,7 @@ uint16_t mb_init_ai_params(uint16_t i)
     for (int i = 0; i < AI_COMMON_NUMBER; i++)
     {
         mb_param[index].reg = addr;
-        mb_param[index].size = 1;
+        mb_param[index].size = 2;
         mb_param[index].param = (uint8_t*)&adc_com_data[i];
         mb_param[index].set = NULL;
         mb_param[index].get = NULL;
@@ -148,7 +148,7 @@ uint16_t mb_init_ai_params(uint16_t i)
     }
     
     // ---------------------------------------------------------------------- //
-    // Фильтрованные значения 12-и основных каналов
+    // Фильтрованные значения 12-и основных каналов. Вывод для отладки.
     addr = 0x03A0;
     for (int i = 0; i < AI_COMMON_NUMBER; i++)
     {

+ 4 - 2
fw/modules/settings/settings_ai.c

@@ -30,8 +30,8 @@ void settings_ai_def(settings_t *settings)
         settings->ai[i].state = 0;  // вход выключен
         settings->ai[i].mode = 0;   // режим измерения напряжения
         settings->ai[i].gain_factor = 1;    // коэф-т усиления внешнего ADC
-        settings->ai[i].k_factor = i + 1.1;
-        settings->ai[i].b_factor = i + 10.1;
+        settings->ai[i].k_factor = 1.0;
+        settings->ai[i].b_factor = 0.0;
     }
     
     settings->ai[0].name = AN_INP_1;
@@ -53,6 +53,8 @@ void settings_ai_def(settings_t *settings)
         settings->ai_add[i].state = 1;  // вход включен
         settings->ai_add[i].mode = 0;   // режим измерения напряжения
         settings->ai_add[i].gain_factor = 1; // коэф-т усиления внешнего ADC
+        settings->ai_add[i].k_factor = 1.0;
+        settings->ai_add[i].b_factor = 0.0;
     }
     
     settings->ai_add[0].name = V_ISO_CL;

BIN
output/fw.bin


File diff suppressed because it is too large
+ 408 - 390
project/ewarm/iap/iap.dep


File diff suppressed because it is too large
+ 664 - 665
project/ewarm/module_universal_io.dep


BIN
tools/__pycache__/mb_registers.cpython-312.pyc


+ 14 - 18
tools/analog_in.py

@@ -203,18 +203,19 @@ def main():
     '''Режим работы аналоговых входов'''
     # ai.print_inputs()
 
-    '''Установка коэффициентов усиления. Тесты'''
-    '''
-    for i in range(1, 13):
-        ai.set_input_gain(i, i + 20)
+    '''Установка коэффициентов усиления. Канал, коэффициент'''
     '''
+    for channel in range(1, 13):
+        ai.set_input_gain(channel, 8)
 
-    '''Установка коэффициентов усиления. Канал, коэффициент'''
-    # ai.set_input_gain(11, 1)
+    for channel in range(1, 13):
+        print(ai.get_input_gain(channel))
+    '''
 
-    # for i in range(1000):
-    #     ai.print_inputs()
-    #     sleep(1)
+    '''Коэффициенты K и B'''
+    # for i in range(1, 13):
+    #     ai.set_k_factor(i, i + 100)
+    #     ai.set_b_factor(i, i + 1000)
 
     '''Последовательное включение входов по одному.'''
     '''
@@ -233,17 +234,12 @@ def main():
             sleep(1)
     '''
 
-    '''Коэффициенты K и B'''
-    # for i in range(1, 13):
-    #     ai.set_k_factor(i, i + 100)
-    #     ai.set_b_factor(i, i + 1000)
-
 
     # ai.sys.get_system_vars()     
     
     # print(ai.get_inputs_state())
     # ai.set_inputs_state(0b1111_1111_1111)
-    # ai.set_inputs_state(0b0000_0000_0000)
+    ai.set_inputs_state(0b0000_0000_1111)
     # ai.set_inputs_state(0b1111_1111_1111)
     # print(ai.get_inputs_state())
     
@@ -272,9 +268,9 @@ def main():
     # ai.print_raw_inputs()
 
     '''Сырые данные'''
-    while True:
-        print(ai.get_raw_input(12))
-        sleep(1)
+    # while True:
+    #     print(ai.get_raw_input(12))
+    #     sleep(1)
 
     '''Вывод на график. Сырые данные'''
     # ai.show_graph(ai.get_raw_inputs,  'AIN_7')

+ 1 - 0
tools/mb_registers.py

@@ -37,6 +37,7 @@ class AiReg(Enum):
     IN_K_FACTOR     = 0x0320 # Коэффициент пересчета K
     IN_B_FACTOR     = 0x0340 # Коэффициент пересчета B
     IN_RAW          = 0x0360 # Канал AN_INP_1 (сырые данные)
+    IN_FILTER       = 0x0
 
 
 class AoReg(Enum):

Some files were not shown because too many files changed in this diff