AnyMath 文档
Notebook

TI C2000(调光器)代码生成

本演示讨论了由德州仪器TMS320F28379D*微控制器控制的三端双向可控硅调光器Engee模型的开发。

导言

此示例的目的是在Engee中实现可控硅调光器模型,然后在Texas Instruments TMS320F28379D微控制器上生成和执行代码。 该装置再现脉冲相位控制系统(SIFU)的操作,该系统接收主电压过零点和输出电压模拟值的信号。 SIFU的输出信号是双向可控硅的控制脉冲,偏移双向可控硅的开启角。

硬件部分

在本例中物理再现模型操作的器件是LAUNCHXL-F28379D调试板,该板基于Texas InstrumentsC2000系列的TMS320F28379D微控制器。 此示例使用调试板的以下输入/输出:
连接器J5,引脚41"3v3"-3.3V电源。
连接器J7,引脚61"5v"-5V电源。
连接器J3,引脚22"GND"-通用。
连接器J4,引脚40-数字输入GPIO0
过零信号中断。
连接器J3,引脚30-模拟输入ADCIN A0
电压设置。
连接器J1,引脚2-数字输出GPIO32
虹吸脉冲。

除控制功能外,调试板还为下图所示的电子电路提供电能。

dimmer.png

使用来自10kOhm电位器的模拟"Alpha"信号设置电压,该电位器也从调试板接收3.3v电源。
过零信号"ZX"由光电晶体管4N25基于来自电阻分压器的整流市电电压信号产生。 单相二极管桥用于整流市电电压。
SIFU"Pulses"的脉冲信号进入光电晶体管MOC3023的输入,其产生用于打开功率可控硅BT136-800E的信号。 这种三端双向可控硅用于调节负载上的电压,这是一种功率为60瓦的白炽灯。
电阻为39欧姆,容量为1nF的保护RC电路连接在双向可控硅的功率输出之间。
Hantek DSO数字示波器用于监控控制过程。

要组装本示例中描述的硬件我们强烈建议遵循职业健康与安全、电气安全和消防安全领域的法规要求。 如果缺乏必要的能力,个人防护装备,可维修和安全的组件,我们强烈建议联系相关领域的专家。

模型描述

在本例的模型中 dimmer_model.engee 两个反向并联晶闸管(块)用作双向可控硅。 Thyristor (Piecewise Linear)),使用电阻为1kOhm的电阻作为负载。 有效值为220V、频率为50Hz的市电电压以稳压电压源单元的触点为模型。 在电路中测量电压降 V_load 而电流 I_load.

image_2.png

通过比较市电电压的半周期计数器的电流值和晶闸管的开启角α来开启双向可控硅。 在这种情况下,控制信号必须从逻辑电平转换到控制输入的电压电平。 晶闸管的开启角由脉冲相位控制系统设定。 Firing_angle_controller. 此外,出于仿真目的,从该子系统输出给定工作电压U的信号。

脉冲相位控制子系统

子系统 Firing_angle_controller 它不仅用于调光器控制系统的建模,还用于代码生成。 微控制器及其外围设备的操作由块中写入的代码决定 C Function:

  • CPU_Init -初始化控制器的中央处理器和外围中断模块。
  • XINT1 -配置和激活硬件中断模块,包括确定中断信号通道、激活事件和中断处理程序。
  • ADC_A0 -配置和初始化ADC通道A0和转换启动触发器(SOC),轮询ADC通道以获得新的设定电压值。
  • GPIO_32U_Output -将GPIO32引脚配置为数字输出,生成具有预设延迟的输出信号。
image.png

除了用于与控制器外围设备交互的模块外,子系统还包含用于转换给定电压信号的模块 adcA0Result.
12位ADC的输出信号为预设电压 adcA0Result 在[0,4095]的范围内。 在这种情况下,控制信号是晶闸管的开口角。 Alpha 用对应的取值范围[4375,0],由函数确定:

一般来说,管理系统的工作原理如下。 启动后,微控制器配置并启动使用过的外设。 然后,在无休止的循环中,期望并读取设定电压的新值。 adcA0Result. 在中断事件的情况下 INT_XINT1 (市电电压过零)处理器调用设置中断标志的中断服务过程 XINT1State. 之后中断停止,主程序执行中断标志条件循环。 当满足条件周期时,形成等于双向可控硅开启角的延迟,以确保中断时设定的电压。 延迟过去后,在控制器的数字输出端产生控制脉冲,双向可控硅打开,中断标志复位,处理器返回等待新的设定电压值。

在代码的相应注释中给出了外围交互单元的操作原理的详细描述。 接下来,我们将重点讨论管理系统的一些具体问题。

可插拔文件

为了正确的代码生成和生成的文件的进一步正确编译,需要连接主程序中使用的文件来初始化微控制器的外围设备。
这些是文件 device.hdriverlib.h 从文件夹中 device 这个项目的。 它们不用于建模,只需要在生成的文件中连接它们。

它们在块设置中连接。 XINT1,标签 Build options:

image_2.png

中断处理

在街区里 XINT1 正在配置中断模块。 这里最感兴趣的是标签的内容 </> StartCode</> TerminateCode.

在标签中 </> StartCode 硬件中断模块进行配置并使能。 中断服务过程(ISR)也连接在这里。 这通过调用函数发生:

Interrupt_register(INT_XINT1, dimmer_model_Firing_angle_controller_term);

函数的第二个参数 - dimmer_model_Firing_angle_controller_term 并执行ISR的作用。 是子系统终止功能。 Firing_angle_controller 代码生成所产生的开发模型。 在此模型中,所有选项卡都是块终止 C Function,除了块 XINT1,都是空的。

在标签中 </> TerminateCode 述中断服务过程。
它包括改变中断标志的值。 XINT1State 并清除中断累加器。

三端双向可控硅开启角度

主程序周期中中断标志的当前值传递给块 GPIO_32U_Output,其中在具有给定延迟的条件周期中形成双向可控硅开启脉冲。
脉冲生成由选项卡中提供的代码描述 </> OutputCode 街区:

    //
    // Проверка флага прерывания
    //
    if(XINT1Flag){
           //
           // Установка отсчёта в точку естественной коммутации
           //
           DEVICE_DELAY_US(500);
           //
           // Формирование задержки на величину угла открытия
           //
           DEVICE_DELAY_US(dimmer_model_Firing_angle_controller_Y.Alpha);
           //
           // Управляющий импульс
           //
           GPIO_writePin(32U, 1);
           DEVICE_DELAY_US(15);
           GPIO_writePin(32U, 0);
           //
           // Сброс флага прерывания
           //
           XINT1State=!XINT1State;
           }

如果有中断标志 XINT1Flag 条件在此块中满足。 首先,在此形成延迟,以将双向可控硅开启角转移到自然切换点。 这是必要的,因为4n25光耦合器对过零点的硬件检测大约在自然开关点的实际过零点之前1毫秒发生。
这之后是双向可控硅开启角的延迟。 与此同时,延迟量 dimmer_model_Firing_angle_controller_Y.Alpha -这是子系统的输出变量 Firing_angle_controller,作为代码生成的结果获得。
经过延迟后,产生一个控制脉冲,中断标志的状态被反转。 XINT1State.

模拟结果

来模拟单元中输出电压的三端双向可控硅调节 ADC_A0 形成给定工作电压的线性增加的输出值。
为了模拟监管过程,我们将加载并运行模型 dimmer_model:

In [ ]:
if "dimmer_model" in [m.name for m in engee.get_all_models()]
    m = engee.open( "dimmer_model" );
else
    m = engee.load( "$(@__DIR__)/dimmer_model.engee" );
end

data = engee.run(m);

从获得的仿真数据中,我们将绘制常规单元中晶闸管的设定工作电压和产生的开口角的曲线图。:

In [ ]:
using Plots
gr( format=:png )
plot(data["设定工作电压U,pu"].time,
     data["设定工作电压U,pu"].value,
     label="设定电压U,pu", size=(900,300),
     lw=2, legend=:right)
plot!(data["晶闸管的开角α、pu"].time,
      data["晶闸管的开角α、pu"].value,
      label="张角α,pu", lw=2)
Out[0]:
No description has been provided for this image

让我们绘制负载两端的电压降:

In [ ]:
plot(data["V_load"].time, data["V_load"].value,
     label="电压U,pu", size=(900,300),
     lw=2, legend=:topleft)
Out[0]:
No description has been provided for this image

从得到的曲线图中可以看出,根据工作电压的设定,发生双向可控硅开启角的正确形成。

代码生成

我们将使用脉冲相位控制算法从子系统生成代码。 Firing_angle_controller:

In [ ]:
engee.generate_code( "$(@__DIR__)/dimmer_model.engee",
                     "$(@__DIR__)/TI_dimmer_code";
                     subsystem_name="Firing_angle_controller" )
[ Info: Generated code and artifacts: /user/start/examples/codegen/ti_28379d_dimmer/TI_dimmer_code

为了使SIFU正常工作,必须在生成的Si falas中进行以下调整:

在头文件中 dimmer_model_Firing_angle_controller.h:
让我们替换关键字 extern 对于函数原型 extern void dimmer_model_Firing_angle_controller_term();
在关键字上 interrupt 使得该函数被编译器感知为ISR。

在文件中 dimmer_model_Firing_angle_controller.c:
在代码的开头添加指令行。 #define LAUNCHXL_F28379D 定义宏 LAUNCHXL_F28379D. 此宏是执行指令限制在生成的文件中的条件编译所必需的。 #ifdef...#else...#endif.

主要计划及项目

主程序代码显示在文件中 dimmer.h. 它连接项目所需的头文件(包括生成的头文件),声明全局变量,并调用模型的初始化和计算函数。

为了对控制器进行编程,使用来自Texas InstrumentsCode Composer Studio12.7.1开发环境(以下称为CCStudio)。

要开始使用开发的程序和控制器,您需要遵循设置环境,连接和项目的步骤,即:
*选择项目工作区;
*调试板、处理器及其特性的选择;
*连接选择;
*创建一个空项目 dimmer.

将主程序文件和生成的文件添加到CCStudio环境中创建的空项目中。 项目树将如下所示:

image.png

在微控制器上执行代码

将文件添加到项目后,请按照以下步骤操作:
通过USB将调试板连接到计算机;
为选定的处理器和内存区域在CCStudio
(Build)中运行项目的构建-此项目为CPU1_RAM;
*运行项目的调试(Debug),因此,除其他事项外,代码将被加载到处理器中;
*启动程序(运行)。

启动程序后,您可以观察到白炽灯亮度的变化,triac inCCStudio的可变开口角的调整以及灯两端电压降的示波图。 调光器操作的记录呈现在文件中 dimmer.gif 这个例子。

要在CCStudio中绘制三端双向可控硅开角,请添加一个变量 FiringAngle 转到变量视口"Expressions"并为此变量选择plotting("Graph")。 在"单次-0"绘图窗口中,您可以启用连续更新,调整轮询值的频率和值缓冲区的大小。

DSO控制器程序用于将Hantek dso数字示波器采集的波形传输到计算机。

结论

在本演示中,开发了triac调光器模型,并为TMS320F28379D微控制器生成了脉冲相位控制系统代码。 控制系统的结果显示在使用物理建模单元的Engee模型中,并显示在具有白炽灯负载的triac调光器上。