微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 使用ADSP-CM408F ADC控制器的电机控制反馈采样时序

使用ADSP-CM408F ADC控制器的电机控制反馈采样时序

时间:07-26 来源:未知 点击:

TRU。

  如前文所述,在应用层处理ADC数据由ADCC定时器回调函数实现,该回调函数后跟一个中断,此中断在完成定时器事件以及相关的DMA传输后发出。

  第98至第127行实现回调函数。缓冲数据在缓冲器的相应位置处提取,并保存至适当的全局变量中。本例中,更新后的相位电流数据立即用于电机控制算法中,通过第117行中的算法调用函数MotorControl()从定时器1回调函数中调用。

  注意,ADCC事件定时器中断服务是访问ADCC数据时发生的唯一软件调用例程。同步与时序均在硬件层面中实现。

  第128行至第136行包含的附加代码片段可插入TRU和ADCC设置函数,以使能图11所示的增强型精确采样时序功能。第128行至第129行中设置了从PWM SYNC至GP定时器TMR7再至ADCC定时器0触发的硬件触发路由路径。第130行至第136行包含的示例代码可插入ADC设置函数,以正确配置和使能GP定时器TMR7,从而提供正确的延迟。

  无论何时,都必须在调用SetupADC函数前调用SetupTRU函数。

  P15

  /*************************************************

  ADCC Module Setup Code Example

  *************************************************/

  /********************Defines*********************/

  1. #define ADCC_DEVICE_NUM 0

  2. #define TRU_DEV_NUM 0

  3. #define ADI_TRU_REQ_MEMORY

  4. #define NUM_SAMPLES0 4

  5. #define NUM_SAMPLES1 2 /* Length of ADC buffers */

  6. #define FRAME_INC0

  2*NUM_SAMPLES0*sizeof(short)

  7. #define FRAME_INC1

  2*NUM_SAMPLES1*sizeof(short) /* Frame

  increment in number of bytes for each buffer*/

  8. #define FRAMES_IN_BUFFER 1 /*Number of frames in buffer */

  9. #define NO_OF_EVENTS 6 /* Total number of events */

  10. #define EVENT_MASK 0xFFFF

  /*Event Times in ACLK Cycles*/

  11. #define SMP_TIME0 950

  12. #define SMP_TIME1 950

  13. #define SMP_TIME2 951

  14. #define SMP_TIME3 952

  15. #define SMP_TIME4 0

  16. #define SMP_TIME5 0

  /* Control Words for All ADC Channels */

  /*Upper Nibble = Chan No. Lower Nibble = 0xF for Sim Sampling, 0xD Otherwise*/

  17. #define ADC0_VIN00_CTL 0x0F

  18. #define ADC0_VIN01_CTL 0x1F

  19. #define ADC0_VIN02_CTL 0x2D

  20. #define ADC0_VIN03_CTL 0x3D

  21. #define ADC0_VIN04_CTL 0x4D

  22. #define ADC0_VIN05_CTL 0x5D

  23. #define ADC0_VIN06_CTL 0x6D

  24. #define ADC0_VIN07_CTL 0x7D

  25. #define ADC1_VIN00_CTL 0x0F

  26. #define ADC1_VIN01_CTL 0x1F

  27. #define ADC1_VIN02_CTL 0x2D

  28. #define ADC1_VIN03_CTL 0x3D

  29. #define ADC1_VIN04_CTL 0x4D

  30. #define ADC1_VIN05_CTL 0x5D

  31. #define ADC1_VIN06_CTL 0x6D

  32. #define ADC1_VIN07_CTL 0x7D

  /*Mapping the Signals to the Appropriate ADC Channels*/

  33. #define ES_CTL ADC0_VIN00_CTL

  34. #define EC_CTL ADC1_VIN00_CTL

  35. #define VDC_CTL ADC0_VIN02_CTL

  36. #define THS_CTL ADC0_VIN03_CTL

  37. #define IV_CTL ADC0_VIN01_CTL

  38. #define IW_CTL ADC1_VIN01_CTL

  /*Locations of ADC Signals in Data Buffer Index*/

  39. #define IV_ADC 0

  40. #define IW_ADC 1

  41. #define ES_ADC 0

  42. #define EC_ADC 1

  43. #define VDC_ADC 2

  44. #define THS_ADC 3

  /*******************Variables********************/

  45. static ADI_ADCC_HANDLE hADCC; /* ADCC Handle */

  46. static ADI_ADCC_HANDLE hADCCTimer0, hADCCTimer1; /*ADCC Timer Handles*/

  47. static uint8_t ADCCMemory[ADI_ADCC_MEMORY]; /* Memory buffer for the ADCC device - predefined */

  48. static uint8_t ADCCTmr0Memory[ADI_ADCC_TMR_MEMORY];

  49. static uint8_t ADCCTmr1Memory[ADI_ADCC_TMR_MEMORY]; /* Memory buffer for the ADCC Timers - predefined*/

  50. static uint16_t SampleBuffer0[NUM_SAMPLES0];

  51. static uint16_t SampleBuffer1[NUM_SAMPLES1];

  /* Memory buffer for the ADC samples */

  52. static uint16_t Iv_adc, Iw_adc;

  53. static uint16_t Es_adc, Ec_adc, Vdc_adc, Ths_adc;

  /*Variables for ADC data*/

54. static uint8_t TruDevMemory[ADI_TRU_RE

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top