使用ADSP-CM408F ADC控制器的电机控制反馈采样时序
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
- 电动 / 混合电动汽车电池管理系统的可靠性(11-09)
- 低成本、8通道、同步采样数据采集系统设计(03-11)
- 用于高速 ADC 的串行接口(11-07)
- SAR ADC 掌控世界(03-05)
- 低功耗 ADC:凌力尔特新方法降低整个信号链路的功耗(11-22)
- 怎样采用多种单端信号驱动低功率、1Msps、±2.5V 差分输入、16 位 ADC(03-07)