simulink代码生成(二)——ADC采样模块

发布时间:2023年12月24日

这一节梳理如何使用C2000库中的ADC模块,从而实现采样;

先预留几个问题,逐步进行解决。

(1)在simulink中C2000的ADC采样模块设置是怎么样的?各个选项卡代表什么?

(2)ADC采样是如何被启动的?

(3)ADC采样回来的值是什么值?是浮点数还是12位AD代表的4096?

1 ADC采样模块的设置

在库中搜索ADC采样模块,添加到模型中,其模块如下图所示:

双击后设置面板(1)如下图所示:

(1)Module采样单元

该选项指定要使用的DSP模块:

A——显示模块A中的ADC通道(ADCINA0到ADCINA7)。

B——显示模块B中的ADC通道(ADCINB0到ADCINB7)。

A和B——显示模块A和B中的ADC通道(ADCINA0到ADCINA7和ADCINB0到ADCINB7)。

(2)Conversion mode 转换模式选择

用于信号的采样类型:

Sequential— 顺序采样:0-7或者0-15都是同一时间只转换一路信号?

simultaneous ——同步采样:0-7的一个通道和9-15的一个通道同时转换信号,但是必须要有相同的偏移量,比如ADCINA4和ADCINB4就可以,但是ADCINA7和ADCINB6就不能同一时刻转换

具体的可以参照我以前的ADC底层的博客;

F28335 ADC配置代码模块及其排序方式介绍-CSDN博客

(3)Start of conversion 启动转换的方式

触发转换开始的信号类型:

Software? ——来自软件的信号。转换值在每个采样时间更新。

ePWM#A/ePWM#B/ePWM#A_ePWM#B——? 转换的开始由用户定义的PWM事件控制。(必须配合ePWM模块同时使用,并且ePWM模块需要输出触发的事件

XINT2_ADCSOC —— 转换的开始由XINT2_ADDCSOC外部信号引脚控制。

(4)Sample time 采样时间

设置ADC采样时间。这是从结果寄存器中读取值的速率。

当选择该项为-1时,为异步模式;
值得注意的是:如果想要为不同组的ADC通道设置不同的采样时间,必须向模型中添加单独的ADC块,并为每个块设置所需的采样时间。

(5)Data type 输出的数据类型

设置输出数据的类型,可以被设置的类为?auto,?double,?single,?int8,?uint8,?int16,?uint16,?int32, or?uint32.?

对于DSP28335,其内置的ADC采样是12位的,但是实际数据是无符号16位的即uint16,在单片机编程时需要左移4位后再进行使用;simulink代码生成时会自动处理;

双击后设置面板(2)如下图所示,这个部分就比较简单,设置需要转换的通道数,并且配置第一个第二个或者更多对应的采样管脚;

值得注意的是:在过采样模式中,给定ADC通道处的信号可以在单个转换序列期间被采样多次。若要过采样,请为多个转换指定同一通道。转换后的样本将作为单个向量输出。也就是把多个通道配置为一个引脚;

还可以使用多个输出端口,如果使用多个ADC通道进行转换,则可以为每个输出使用单独的端口,并在块上显示输出端口。如果使用多个通道而不使用多个输出端口,则数据将以单个矢量输出。

2? ADC采样是如何被启动的?

这个点需要被重点关注,软件启动和外部触发启动都比较好理解,但是这种一般不常用,电机控制中最常用的还是ePWM模块的事情触发ADC采样,例如在载波的顶点或者在载波的0点;这个需要配合ePWM模块中的事件触发使用,这里提前先设置一下ePWM模块有关的地方,

如下图所示,则配置的是CTR = PRD即载波的顶点时输出事件,勾选Enable ADC start of conversion for module A 后即可在每次CTR = PRD时进行采样;一般选择在载波顶点采样,因此此时电压矢量为零矢量,采样所得电流基本为基波电流;

3 ADC采样回来的值是什么值?是浮点数还是12位AD代表的4096?

按照上面的阐述以及文件的说明,DSP28335,其内置的ADC采样是12位的,但是实际数据是无符号16位的即uint16,在单片机编程时需要左移4位后再进行使用;simulink代码生成时会自动处理;但是我觉得还是值得测试一下的;搭建一个这样的模型;设置ePWM1的TRPD = 8192。

假如确实采样模块的输出是以4096为最大值的12位无符号数,那么可以得到一个可预想的结果:假如供电电压是1.65V左右的值,那么此时输出应该是2048左右的值。如下所示,示波器的就不放了,CMPA已经与采样值同步了。

那么就得出结论,simulink代码生成中ADC输出的值即为12位ADC采样后结果寄存器中的值,并且已经完成了左移4位的操作;即 0 - 0 , 1.65 - 2048 , 3.3 - 3096?

上面仅为1路采样结果,配置3路后;结果如下所示;

附录:模型截图即设置截图

文章来源:https://blog.csdn.net/sy243772901/article/details/135182591
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。