This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/TMDSDOCK28335:从提供给 ADC 引脚的给定直流信号中获取 PWM

Guru**** 2609895 points
Other Parts Discussed in Thread: CONTROLSUITE

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/683351/ccs-tmdsdock28335-pwm-from-given-dc-signal-provided-to-adc-pin

器件型号:TMDSDOCK28335
Thread 中讨论的其他器件:controlSUITE

工具/软件:Code Composer Studio

主席/女士

我正在学习 tms28335实验套件。 我的目的是将信号发生器的模拟 D.C 信号提供给 ADC 引脚 A0、并观察控制器的脉冲。 我不知道问题在哪里。 我正在复制以下代码。

#include"DSP2833x_Device.h"
#include" math.h"

//外部函数原型
extern void InitAdc (void);
extern void InitSysCtrl(void);
extern void InitPieCtrl (void);
extern void InitPieVectTable (void);

//此文件中找到的函数的原型语句。
void GPIO_select (void);
void Setup_ePWM1 (void);
中断空 ADC_ISR (空);//序列 ISR 的 ADC 末尾

//全局变量
uint16 PWM=750;
浮点 Voltage_VR1;
浮点 Duty_PWM;


//######################################################################################################################
//主代码
//######################################################################################################################
void main (void)

InitSysCtrl();// DSP2833x_sysctrl.c 中的基本内核初始化

EALLOW;
SysCtrlRegs.WDCR= 0x00AF;//重新启用看门狗
EDIS;// 0x00AF 要不禁用看门狗、预分频器= 64

DINT;//禁用所有中断

GPIO_SELECT ();// GPIO9、GPIO11、GPIO34和 GPIO49作为输出
//在外设资源管理器上连接到4个 LED)

SETUP_ePWM1 ();// ePWM1A 的初始化

InitPieCtrl();// PIE 表的基本设置;来自 DSP2833x_PIECTRL.c

InitPieVectTable();// PIE 中的默认 ISR

InitAdc ();//基本 ADC 设置、包括 校准

AdcRegs.ADCTRL1.All = 0;
AdcRegs.ADCTRL1.bit.ACQ_PS = 1;// 7 = 8 x ADCCLK
AdcRegs.ADCTRL1.bit.SEQ_CASC =0;// 1=级联序列发生器
AdcRegs.ADCTRL1.bit.CPS = 0;//除以1
AdcRegs.ADCTRL1.bit.CONT_RUN = 0;//单次运行模式

AdcRegs.ADCTRL2.all = 0;
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1;// 1=启用 SEQ1中断
AdcRegs.ADCTRL2.bit.ePWM_SOCA_SEQ1 =1;// 1=SEQ1从 ePWM_SOCA 触发器开始
AdcRegs.ADCTRL2.bit.INT_MOD_SEQ1 = 0;// 0=序列每结束后的中断

AdcRegs.ADCTRL3.bit.ADCCLKPS = 2;// ADC 时钟:FCLK = HSPCLK /2 * ADCCLKPS
// HSPCLK = 75MHz (请参阅 DSP2833x_SYSCTRL.c)
// FCLK = 12.5MHz

AdcRegs.ADCMAXCONV.ALL = 0;//从序列发生器1进行1次转换

AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0;//将 ADCINA0设置为第一个 SEQ1转换器

EALLOW;
PieVectTable.ADCINT =&ADC_ISR;
EDIS;

PieCtrlRegs.PIEIER1.bit.INTx7=1;// CPU 定时器0
PieCtrlRegs.PIEIER1.bit.INTx6 = 1;// ADC

IER |=1;

EINT;
ERTM;

void GPIO_select (void)

EALLOW;
GpioCtrlRegs.GPAMUX1.ALL = 0;// GPIO15... GPIO0 =通用尸体 I/O
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1;// ePWM1A 有效

GpioCtrlRegs.GPAMUX2.ALL = 0;// GPIO31... GPIO16 =通用 I/O
GpioCtrlRegs.GPBMUX1.ALL = 0;// GPIO47... GPIO32 =通用 I/O
GpioCtrlRegs.GPBMUX2.ALL = 0;// GPIO63... GPIO48 =通用 I/O
GpioCtrlRegs.GPCMUX1.ALL = 0;// GPIO79... GPIO64 =通用 I/O
GpioCtrlRegs.GPCMUX2.ALL = 0;// GPIO87... GPIO80 =通用 I/O

GpioCtrlRegs.GPADIR.ALL = 0;
GpioCtrlRegs.GPADIR.bit.GPIO9 = 1;//外设资源管理器:GPIO9上的 LED LD1
GpioCtrlRegs.GPADIR.bit.GPIO31 = 1;//外设资源管理器:GPIO11上的 LED LD2


GpioCtrlRegs.GPBDIR.ALL = 0;// GPIO63-32作为输入
GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1;//外设资源管理器:GPIO34上的 LED LD3
GpioCtrlRegs.GPBDIR.bit.GPIO49 = 1;//外设资源管理器:GPIO49上的 LED LD4
GpioCtrlRegs.GPCDIR.ALL = 0;// GPIO87-64作为输入
EDIS;

中断空 ADC_ISR (空)

VOLTGE_VR1 =(AdcMirror.ADCRESULT0);//将结果存储为全局
//为下一个 ADC 序列重新初始化
AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;//复位 SEQ1
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;//清除 INT SEQ1位
PieCtrlRegs.PIEACX.ALL = PIEACK_Group1;//确认 PIE 中断

void Setup_ePWM1 (void)

EPwm1Regs.ETSEL.bit.SOCAEN = 1;//启用组上的 SOC
EPwm1Regs.ETSEL.bit.SOCASEL = 1;//在递增计数时从 CPMA 选择 SOC
EPwm1Regs.ETPS.bit.SOCAPRD = 1;//在发生第一个事件时生成脉冲
EPwm1Regs.TBCTL.bit.CLKDIV = 0;// CLKDIV = 1
EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0;// HSPCLKDIV = 2
EPwm1Regs.TBCTL.bit.CTRMODE = 2;//向上-向下计数模式

EPwm1Regs.AQCTLA.bit.CAU = 2;//在 CMPA 上设置 ePWM1A
//在 CMPA 递减时清除 ePWM1A

EPwm1Regs.AQCTLA.bit.CAD = 1;//在 CMPB 上设置 ePWM1B
//清除 CMPB 上的 ePWM1B

Duty_PWM = PWM*(Voltage_VR1)/4096;   
EPwm1Regs.CMPA.half.CMPA = Duty_PWM;  


//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
//源代码结束。
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    贡图库

        从 controlSUITE 中的 ADC 示例开始。 然后确定 ADC 采样哪个引脚、它将有助于查看包含 controlCARD 引脚分配的"C:\ti\controlSUITE\development_kits\~controlCARDs\CC2833xHWdevPkg\F28335controlCARD-PinOutTable.pdf"。

    ADC 示例无需修改即可工作、从该点开始、并根据您的需求修改代码。


    此致、
    Cody  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    先生

    我已经使用了具有嵌入式编码器(Matlab 和28335)的 ADC 引脚、并获得了结果。 现在、我想在编码中学习相同的内容。 那么、我 的问题是 如何 从信号发生器的给定直流信号中生成脉冲的可变占空比、示例中没有提到这一点。 请告诉我上面粘贴的代码中的任何更正。 谢谢主席先生

    此致

    Kishore

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Kishore、

    我不是指您使用 Embedded Coder。 controlSUITE 是一个软件库、其中包含一组完全用 C 代码编写的示例。 这些示例旨在允许没有编码经验的客户在合理的用例中设置和评估各个模块。

    尝试导入在" \controlSUITE\device_support\F2833x\v142\DSP2833x_examples_ccsv5\ADC_SoC"。 此示例将为您设置 ADC。

    如果您希望随后根据该 ADC 读数生成 PWM、则需要设置 PWM 模块。 " controlSUITE\device_support\f2833x\v142\DSP2833x_examples_ccsv5\ePWM_UP_AQ"是一个很好的示例。

    当您毫无疑问地进入了一个寄存 器时、您不知道其用途、或者您可能希望实现一个更高级的功能、如跳闸区域、您可以在此处的相应模块用户指南中找到详细信息。

    根据我的经验、代码审查不是很有成果。 查找问题的最快方法是在器件上执行时测试代码。 您应该首先使用断点验证配置、以便在使用内存浏览器读回配置的同时单步执行代码。

    如果您发现某个问题不能正常工作、请提供说明、我很乐意帮助您解决该问题! 您提供的详细信息越多、我就能提供的帮助越多。

    此致、
    Cody  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    先生

    它不是关于评论。 我已经转储了它。 它成功了。 但我在 DSO 上没有得到任何结果。

    此致

    Kishore

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Kishore、

    尝试加载其中一个 PWM 示例、如果它起作用、我们可以排除硬件问题。

    您是否启用了 PWM 模块的时钟?

    TBCLK 是否在计数?

    您是否已通过读取存储器浏览器中的寄存器来验证 GPIO 配置?

    您是否已将示波器的探头连接到正确的引脚?

    此致、
    Cody  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    由于不活动、我将关闭此问题。 如果您的问题尚未得到解答、请随意回复或启动新的相关主题。

    此致、
    Cody