打印
[DSP]

TMS320F2818双框架陀螺仪控制系统

[复制链接]
楼主: 東南博士
手机看帖
扫描二维码
随时随地手机跟帖
21
東南博士|  楼主 | 2020-2-24 11:24 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
goodluck09876 发表于 2020-2-24 11:23
DSP的串口和STM32的串口,基本上都差不多吧?

都是大同小异吧。常规应用。

使用特权

评论回复
22
東南博士|  楼主 | 2020-2-24 11:24 | 只看该作者
DSP2812 AD介绍

使用特权

评论回复
23
東南博士|  楼主 | 2020-2-24 11:25 | 只看该作者
要使角位变送器输出从数字模式转化为模拟模式, 首先必须对其进行设
置, 整个设置的过程是采用 FB900C 系列编程软件操作的, 设置图如图 2-9 所
示。

使用特权

评论回复
24
東南博士|  楼主 | 2020-2-24 11:25 | 只看该作者
该部分主要作用为将角位变送器的输出从最高 5V 转化为最高 2.5V, 这样
就可以保证输入到 DSP 引脚的电压小于 3V, 确保安全, 具体实现是采用双电
源供电 LM324N 实现, 在转化结束时候加入了普通 RC 滤波电路。
角位变送器模拟输出经过降压和正负号变换, 以及 RC 滤波进而接到
DSP2812 AD 输入引脚, 开始 AD 转换。 具体电压转化从 5V 转化为-2V, 然后
进行正负变换。
因为 LM324N 是一款双电源运放电路, 需要接正负 12V 电压, 并且有一
个引脚需要接模拟地。 在电路滤波上, 采用了 普通的 RC 滤波, 电阻为 1K,
电容 0.1uF。 实验证明效果良好, 可以有效滤除部分干扰。

使用特权

评论回复
25
東南博士|  楼主 | 2020-2-24 11:25 | 只看该作者

使用特权

评论回复
26
god9987| | 2020-2-24 11:28 | 只看该作者
这个ADC采集序列是什么?类似于DMA?

使用特权

评论回复
27
東南博士|  楼主 | 2020-2-24 11:33 | 只看该作者
god9987 发表于 2020-2-24 11:28
这个ADC采集序列是什么?类似于DMA?

DSP2812的ADC排序器工作模式
按照一次转换通道个数分为:同步工作模式(Simultaneous sampling)、顺寻工作模式(sequential sampling),


同步顺寻

同步工作模式:对AB两组中相同偏移量的2个通道同时转换。

顺寻工作模式:转换器对AB两组中的通道按照排序器中定义的排列顺寻转换。

同步工作模式:SEQ1或者SEQ2或者SEQ在对通道转换时,一次转换两个。
顺序工作模式:SEQ1或者SEQ2或者SEQ在对通道转换时,一次只能转换一个通道。



双排序器、级联排序器

双排序器:SEQ1、SEQ2是两个排序器。SEQ1、SEQ2独立工作。可以让SEQ1工作在同步模式下,也可以让SEQ1工作在顺序模式下。SEQ2同样如此。SEQ1工作在同步模式下,对ADCINA和ADCNIB相同偏移通道同步采样,结果放在Result0,Result1中。

排序器SEQ1:

union ADCCHSELSEQ1_REG ADCCHSELSEQ1; // Channel select sequencing control 1
union ADCCHSELSEQ2_REG ADCCHSELSEQ2;

ADCCHSELSEQ1、ADCCHSELSEQ2都是16bit的寄存器。

每个寄存器器变量分4section,2个分了8section

排序器2:

union ADCCHSELSEQ3_REG ADCCHSELSEQ3; // Channel select sequencing control 3
union ADCCHSELSEQ4_REG ADCCHSELSEQ4; // Channel select sequencing control 4

ADCCHSELSEQ3、ADCCHSELSEQ4都是16bit的寄存器变量。

每个寄存器器变量有4个section。

使用特权

评论回复
28
東南博士|  楼主 | 2020-2-24 11:33 | 只看该作者
god9987 发表于 2020-2-24 11:28
这个ADC采集序列是什么?类似于DMA?

排序器SEQ1有8个section,排序器SEQ2有8个section

section中数字含义:每个section中填写的是模拟输入通道的编号。最大的通道编号是:16,所以每个section需要4bit。

struct ADCCHSELSEQ1_BITS { // bits description
Uint16 CONV00:4; // 3:0 Conversion selection 00
Uint16 CONV01:4; // 7:4 Conversion selection 01
Uint16 CONV02:4; // 11:8 Conversion selection 02
Uint16 CONV03:4; // 15:12 Conversion selection 03
};

struct ADCCHSELSEQ2_BITS { // bits description
Uint16 CONV04:4; // 3:0 Conversion selection 04
Uint16 CONV05:4; // 7:4 Conversion selection 05
Uint16 CONV06:4; // 11:8 Conversion selection 06
Uint16 CONV07:4; // 15:12 Conversion selection 07
};

struct ADCCHSELSEQ3_BITS { // bits description
Uint16 CONV08:4; // 3:0 Conversion selection 08
Uint16 CONV09:4; // 7:4 Conversion selection 09
Uint16 CONV10:4; // 11:8 Conversion selection 10
Uint16 CONV11:4; // 15:12 Conversion selection 11
};
struct ADCCHSELSEQ4_BITS { // bits description
Uint16 CONV12:4; // 3:0 Conversion selection 12
Uint16 CONV13:4; // 7:4 Conversion selection 13
Uint16 CONV14:4; // 11:8 Conversion selection 14
Uint16 CONV15:4; // 15:12 Conversion selection 15
};

使用特权

评论回复
29
東南博士|  楼主 | 2020-2-24 11:34 | 只看该作者
god9987 发表于 2020-2-24 11:28
这个ADC采集序列是什么?类似于DMA?

级联排序器:两个排序器合二为一,组成一个排序器,SEQ由16个section构成。CONV00--CONV15;单排续器可以使用EVA、EVB、软件、外部引脚GPIO/XINT2_ADCSOC引脚触发。

双排序器:SEQ1由8个section构成:CONV00-CONV07;SEQ2由8个section构成:CONV08-CONV15

相当于两个独立的排序器,SEQ1排序器启动由EVA启动;SEQ2排序器由EVB启动。

通道转换顺序如何确定?

CONV00:中放置的通道第一个被转换,紧接着CONV01中放置的通道被转换,--》CONV02中放置的通道编号的通道被转换。

不论是在双排序,还是单排序,因为SEQ1级别比SEQ2级别高,首先转换完SEQ1的section放置通道编号,然后转换SEQ2中放置的通道编号。

同步模式和顺序模式的区别在于:转换结果在结果寄存器中的放置不同。

只要是同步模式,不论是单排序器还是级联排序器,结果寄存器中的数存放顺序是:RESULT0中存放ADCINA0,RESULT1中存放ADCINB0。
顺序工作模式:RESULT0中存放ADCINA0数值,RESULT1中存放ADCINA1数值....

顺序排序,result0中放置conv00中通道的结果,result1中放置conv01中通道的结果,以此类推...

级联排序:result0中放置conv00中A组的通道结果,result1中放置conv00中B组的通道结果,

ADC转换之前需要配置寄存器,设置转换的通道个数、对那些通道转换、转换次序。

EX:转换的通道个数:AdcRegs.ADCMAXCONV.all = 0x0001; //转换两个通道

EX:要进行转换的通道、转换次序:

AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x3; // Setup ADCINA3 as 1st SEQ1 conv. 通道3第一个被转换
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x2; // Setup ADCINA2 as 2nd SEQ1 conv. 接着通道2被转换

struct ADCASEQSR_BITS { // bits description
Uint16 SEQ1_STATE:4; // 3:0 SEQ1 state
Uint16 SEQ2_STATE:3; // 6:4 SEQ2 state
Uint16 rsvd1:1; // 7 reserved
Uint16 SEQ_CNTR:4; // 11:8 Sequencing counter status
Uint16 rsvd2:4; // 15:12 reserved
};

转换如何开始?

接收到SOC信号之后,ADCASEQSR的SEQ_CNTR位从AdcRegs.ADCMAXCONV中获得需要转换的通道个数,完成一个减小1;直到SEQ_CNTR中的数字变为0.

struct ADCTRL1_BITS { // bits description
Uint16 rsvd1:4; // 3:0 reserved
Uint16 SEQ_CASC:1; // 4 Cascaded sequencer mode
Uint16 SEQ_OVRD:1; // 5 Sequencer override
Uint16 CONT_RUN:1; // 6 Continuous run
Uint16 CPS:1; // 7 ADC core clock pre-scalar
Uint16 ACQ_PS:4; // 11:8 Acquisition window size
Uint16 SUSMOD:2; // 13:12 Emulation suspend mode
Uint16 RESET:1; // 14 ADC reset
Uint16 rsvd2:1; // 15 reserved
};

struct ADCTRL2_BITS { // bits description
Uint16 EVB_SOC_SEQ2:1; // 0 Event manager B SOC mask for SEQ2
Uint16 rsvd1:1; // 1 reserved
Uint16 INT_MOD_SEQ2:1; // 2 SEQ2 Interrupt mode
Uint16 INT_ENA_SEQ2:1; // 3 SEQ2 Interrupt enable
Uint16 rsvd2:1; // 4 reserved
Uint16 SOC_SEQ2:1; // 5 Start of conversion for SEQ2
Uint16 RST_SEQ2:1; // 6 Reset SEQ2
Uint16 EXT_SOC_SEQ1:1; // 7 External start of conversion for SEQ1
Uint16 EVA_SOC_SEQ1:1; // 8 Event manager A SOC mask for SEQ1
Uint16 rsvd3:1; // 9 reserved
Uint16 INT_MOD_SEQ1:1; // 10 SEQ1 Interrupt mode
Uint16 INT_ENA_SEQ1:1; // 11 SEQ1 Interrupt enable
Uint16 rsvd4:1; // 12 reserved
Uint16 SOC_SEQ1:1; // 13 Start of conversion trigger for SEQ1
Uint16 RST_SEQ1:1; // 14 Restart sequencer 1
Uint16 EVB_SOC_SEQ:1; // 15 EVB SOC enable
};

转换结束了会发生什么?

如果ADCTRL1的CONT_RUN是1,转换重新开始,ADCASEQSR的SEQ_CNTR位从AdcRegs.ADCMAXCONV中获得需要转换的通道个数,....

问题是:必须在第二个转换开始之前,从结果寄存器中取走第一次转换的结果;防止第一次转换结果被覆盖。

如果ADCTRL1的CONT_RUN是0,转换停止,SEQ_CNTR保持0.

问题是:排序指针停留在最后一个section,必须使用ADCTRL2的RST_SEQ2或者RST_SEQ1位复位排序器。

ADCASEQSR的SEQ_CNTR位在每次变为0,中断标志为都会置位,用户可以在中断响应函数中手动对ADCTRL2的RST_SEQ2或者RST_SEQ1位复位。

转换的最大通道数


级联排序器同步工作模式:(级联同步) 0x0007

级联排续器顺序工作模式:(级联顺序) 0x000F

双排序器同步工作模式:(双排序器同步) 0x0033

双排序器顺序工作模式:(双排序顺序) 0x0007

双排序器or单排续器影响MAXCONV中设置的数值。

双排序器中的数值=要转换的通道数/2-1

单排续器最大转换通道数值:要转换的通道数-1


单排续器还是双排序器,在ADC控制寄存器1中SEQ_CASC位设置。
同步工作模式还是顺序工作模式在ADC控制寄存器3中的SMODE SEL位设置。默认状况下,ADC工作在双排序器、顺序工作模式。
转换结果:取决于同步模式or顺序模式。
双排序器工作在同步模式下,SEQ1的MAXCONV中存放的数值是0x0033(110011),SEQ1的转换最大通道数是(4-1)对,SEQ2转换的最大通道数是(4-1)对。

使用特权

评论回复
30
god9987| | 2020-2-24 11:34 | 只看该作者
DSP的ADC,这么复杂啊?看来是很高级。性能高。

使用特权

评论回复
31
東南博士|  楼主 | 2020-2-24 11:37 | 只看该作者
god9987 发表于 2020-2-24 11:34
DSP的ADC,这么复杂啊?看来是很高级。性能高。

是的。为电力应用而生。

使用特权

评论回复
32
東南博士|  楼主 | 2020-2-24 11:37 | 只看该作者
CMD 文件是用于 DSP 内部程序存储内存, 数据存储内存和各类编译文件
存储内存分配的文件, 有固定的模式, 数据存储空间根据需要调整即可。
AD 的设置、 启动、 以及转化数据的存储处理和其他程序的融合才是比较
困难的, 在本课题中 AD 采样采用双通道, 双序列发生器同步采样模式, 这样
可以保证在做同步实验时采样数据的同时性, 确保实验效果。 在对数据处理时
采用中值数字滤波方法, 对每 50 个采样实时数据排序, 取中间 5 个数的平均
值作为有效采样值。 程序流程图如图 2-10 所示。
在程序当中, 当 AD 转化结束后, 激发中断, 在中断程序中进行数据的读
取、 处理, 并允许下一次中断产生。

使用特权

评论回复
33
東南博士|  楼主 | 2020-2-24 11:40 | 只看该作者

使用特权

评论回复
34
東南博士|  楼主 | 2020-2-24 11:40 | 只看该作者

使用特权

评论回复
35
東南博士|  楼主 | 2020-2-24 11:40 | 只看该作者

使用特权

评论回复
36
東南博士|  楼主 | 2020-2-24 11:41 | 只看该作者
从主, 从通道分别加入干扰后的控制效果看, 当在主通道加入干扰时, 从
通道很快做出响应, 因此同步误差可控制得比较小, 两个通道可以一起克服干
扰。 然而在从通道加入干扰时, 主通道并未做出响应, 因此同步误差比较大,
主从同步控制不能有效克服从通道所受的干扰, 在同步问题上存在很大缺陷,
一旦从通道受到大一点的干扰, 同步误差将非常大。
综合以上仿真分析, 在主从式同步控制方案当中, 存在着很大的缺陷, 主
从式同步控制因为主从通道之间不存在耦合项, 当主通道受到干扰的时候, 从
通道可以产生相应, 从而一起去克服干扰, 同步误差比较小。 但是从通道受到
干扰的时候, 主通道无法做出响应, 因此同步误差比较大, 另外如果进行实际
控制, 主从通道信号传递还必须考虑器件延迟等产生的影响, 仿真不能有效模
拟实际的情况, 可能会产生比较大的误差。

使用特权

评论回复
37
東南博士|  楼主 | 2020-2-24 11:41 | 只看该作者

使用特权

评论回复
38
東南博士|  楼主 | 2020-2-24 11:41 | 只看该作者

使用特权

评论回复
39
東南博士|  楼主 | 2020-2-24 11:41 | 只看该作者

使用特权

评论回复
40
ADZ2016| | 2020-2-24 11:42 | 只看该作者
楼主,请教一下,这个系统所有的一批设备的参数一样吗?还是每一个设备对应每一个参数去调试?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则