MPC5746C Input Pulse Width Measurement

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

MPC5746C Input Pulse Width Measurement

984 Views
mandarpande
Contributor I

I am using eMIOS_0 module of #MPC5746C for controlling Motor Drives and measuring Input Pulse Width and Period.

I am using channel number 23 configured in MCB mode as a timebase channel to drive Counter Bus A. 

For Motor Drive control I am using OPWMB mode and for Input pulse width measurement I am using IPWM mode.

I am using Counter Bus A as a timebase for both OPWMB mode and IPWM mode. 

When I configure Motor Drive control frequency at e.g. 500Hz and try to measure pulse width of signals with frequency lower than 500Hz, I am getting wrong values. I found that I was getting wrong values because MCB counter was overflowing multiple times between leading edge and trailing edge captures in IPWM mode(because the period of the pulse under measurement was much more than the period of the counter). Thus, I will not get the proper pulse width by subtracting A register value from B register value.

I tried to count the number of MCB counter overflows that happened between the leading and trailing edge of the pulse by setting the FEN bit in C register of channel 23 and increment a counter variable in the ISR of channel 23. The following code snippet is how I am calculating the value of pulse width:

if (eMIOS_UC_0.UC[ucChannel].S.B.FLAG) {
   unEdge2Cnt = (uint32_t)eMIOS_UC_0.UC[ucChannel].A.R; /* Read 2nd edge count */
   unEdge1Cnt = (uint32_t)eMIOS_UC_0.UC[ucChannel].B.R; /* Read 1st edge count */

   eMIOS_UC_0.UC[ucChannel].S.B.FLAG = (vuint32_t)1; /* Clear flag */
   unDutyInuSec = (uint32_t)(unEdge2Cnt + (g_ucMcbFlgSetEvntCnt * g_usEmiosGblBusACount) - unEdge1Cnt);
}

Here,

ucChannel = eMIOS channel which is configured in IPWM mode

g_ucMcbFlgSetEvntCnt = the counter variable I am incrementing in the ISR of MCB flag

g_usEmiosGblBusACount = the MCB A register value which will be used for MCB up counter 

But even using this method I am not getting proper value.

Due to hardware design limitations, I cannot use any other counter bus other than Counter Bus A to provide timebase for both OPWMB and IPWM modes. And I cannot modify MCB count as it is controlling the frequency of Motor Drive circuits.

Please suggest a possible solution as to what I can do to get proper values for pulse width measurement.

Labels (1)
0 Kudos
1 Reply

690 Views
PetrS
NXP TechSupport
NXP TechSupport

Hi,

I did similar some time ago for other customer. See attached example, which uses channel23 interrupt to count counter bus A overflows. The SAIC mode is used but can be easily reused for your IPWM mode.

Hope it helps.

BR, Petr

0 Kudos