|
|
View previous topic :: View next topic |
Author |
Message |
af19
Joined: 21 Aug 2014 Posts: 15
|
Motor PWM (micro reset in 100V) |
Posted: Sun Aug 23, 2015 12:13 am |
|
|
Hello guys.
My micro is dsPIC30F4011 and I'm having a problem with my micro.
I'm using the micro to control an IM (Induction Motor), and I'm just using MPWM pins of the micro.
MPWM outputs are okay at the start, but when I increase the DC bus voltage to 110V my micro shut down (I have a LED on the micro and it turns off).
At this situation (DC bus = 110v) when I try to reset the micro by making MCLR pin low, MPWM output come back for a second and micro shut down again, but when I reduce the voltage to 80V I can reset my micro and output come back.
I have another problem too which I think it's connected to the last problem.
When I program the micro with my programmer (PICKIT3) and my programmer is connected to the circuit everything is fine, but when I disconnect the programmer and I switch off the microcontroller power supply, my micro doesn't start working on the power supply switch on, and I should reset the micro after switching on the supply to make my micro run.
But I don't have this problem when my programmer is connected and my micro works on the power supply switch on.
Here is my code.
Code: |
#include <30F4011.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES CKSFSM //Clock Switching is enabled, fail Safe clock monitor is enabled
#FUSES NOBROWNOUT
#FUSES PWMPIN
#FUSES LPOL_HIGH
#FUSES HPOL_HIGH
#device ICSP=1
#use delay(crystal=8MHz)
#DEFINE PHASE_SHIFT_120 0X5555
#DEFINE PHASE_SHIFT_240 0XAAAA
int SineTable[512]={99, 100, 101, 103, 104, 105, 106, 107, 109, 110, 111, 112, 114, 115, 116, 117, 118, 120, 121, 122, 123, 124, 125, 127, 128, 129, 130, 131, 132, 133, 135, 136, 137, 138, 139, 140, 141, 142, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 165, 166, 167, 168, 169, 170, 171, 172, 172, 173, 174, 175, 176, 176, 177, 178, 179, 179, 180, 181, 181, 182, 183, 183, 184, 185, 185, 186, 186, 187, 187, 188, 188, 189, 190, 190, 190, 191, 191, 192, 192, 193, 193, 193, 194, 194, 194, 195, 195, 195, 196, 196, 196, 196, 197, 197, 197, 197, 197, 197, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 197, 197, 197, 197, 197, 197, 196, 196, 196, 196, 195, 195, 195, 194, 194, 194, 193, 193, 193, 192, 192, 191, 191, 190, 190, 190, 189, 188, 188, 187, 187, 186, 186, 185, 185, 184, 183, 183, 182, 181, 181, 180, 179, 179, 178, 177, 176, 176, 175, 174, 173, 172, 172, 171, 170, 169, 168, 167, 166, 165, 165, 164, 163, 162, 161, 160, 159, 158, 157, 156, 155, 154, 153, 152, 151, 150, 149, 148, 147, 146, 145, 144, 142, 141, 140, 139, 138, 137, 136, 135, 133, 132, 131, 130, 129, 128, 127, 125, 124, 123, 122, 121, 120, 118, 117, 116, 115, 114, 112, 111, 110, 109, 107, 106, 105, 104, 103, 101, 100, 99, 98, 97, 95, 94, 93, 92, 91, 89, 88, 87, 86, 84, 83, 82, 81, 80, 78, 77, 76, 75, 74, 73, 71, 70, 69, 68, 67, 66, 65, 63, 62, 61, 60, 59, 58, 57, 56, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 33, 32, 31, 30, 29, 28, 27, 26, 26, 25, 24, 23, 22, 22, 21, 20, 19, 19, 18, 17, 17, 16, 15, 15, 14, 13, 13, 12, 12, 11, 11, 10, 10, 9, 8, 8, 8, 7, 7, 6, 6, 5, 5, 5, 4, 4, 4, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 7, 7, 8, 8, 8, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 15, 15, 16, 17, 17, 18, 19, 19, 20, 21, 22, 22, 23, 24, 25, 26, 26, 27, 28, 29, 30, 31, 32, 33, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 56, 57, 58, 59, 60, 61, 62, 63, 65, 66, 67, 68, 69, 70, 71, 73, 74, 75, 76, 77, 78, 80, 81, 82, 83, 84, 86, 87, 88, 89, 91, 92, 93, 94, 95, 97, 98};
int16 i = 0;
int16 Phase1,Phase2,Phase3,Temp1,Temp2,Temp3;
#INT_PWM1
void pwm1_isr(void)
{
if (i>=0XFFFF)
i=0;
i += 328;
}
void main()
{
setup_motor_pwm(1,MPWM_FREE_RUN,1,1,99);
set_motor_unit(1,1,MPWM_ENABLE,4,4);
set_motor_unit(1,2,MPWM_ENABLE,4,4);
set_motor_unit(1,3,MPWM_ENABLE,4,4);
enable_interrupts(INT_PWM1);
enable_interrupts(INTR_GLOBAL);
while(TRUE)
{
Temp1 = i;
Temp2 = i + PHASE_SHIFT_120;
Temp3 = i + PHASE_SHIFT_240;
Phase1 = (Temp1)>>7;
Phase2 = (Temp2)>>7;
Phase3 = (Temp3)>>7;
set_motor_pwm_duty(1,1,SineTable[Phase1]);
set_motor_pwm_duty(1,2,SineTable[Phase2]);
set_motor_pwm_duty(1,3,SineTable[Phase3]);
//TODO: User Code
}
}
|
My circuit is very simple and I'm just using the MPWM pins of the micro for a three phase H-Bridge, my switch driver is HCPL316J and my switches are IRFP460.
Any one know what is the problem? |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19541
|
|
Posted: Sun Aug 23, 2015 5:32 am |
|
|
Electrical noise.
With anything involving switching into inductors (motors are both inductors and also generators), your supply/switching circuit has to contain the circuitry to handle both the high voltages when the drive switches off, and the massive changes in the actual load on the rail, with the passage of time.
It has to have a path somewhere to handle/control these or they _will_ find a route back through the drive pins.
Almost certainly some of the former is being dumped into the supply rail. probably through the MPWM pins and the internal protection diodes. The extra smoothing & ground present when the programmer is present is helping a little, but the real solution is to handle these yourself before they reach the processor.
The currents and voltages will rise as the supply rises, so the problem gets worse. |
|
|
af19
Joined: 21 Aug 2014 Posts: 15
|
|
Posted: Sun Aug 23, 2015 10:07 am |
|
|
Ttelmah wrote: | Electrical noise.
With anything involving switching into inductors (motors are both inductors and also generators), your supply/switching circuit has to contain the circuitry to handle both the high voltages when the drive switches off, and the massive changes in the actual load on the rail, with the passage of time.
It has to have a path somewhere to handle/control these or they _will_ find a route back through the drive pins.
Almost certainly some of the former is being dumped into the supply rail. probably through the MPWM pins and the internal protection diodes. The extra smoothing & ground present when the programmer is present is helping a little, but the real solution is to handle these yourself before they reach the processor.
The currents and voltages will rise as the supply rises, so the problem gets worse. |
Thanks for the reply.
I created a 1hz blink project with above fuse bits and I still have the second problem (micro doesn't start when programmer is not connected and I switch on the microcontroller's power supply)
what do you think is the problem? |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19541
|
|
Posted: Sun Aug 23, 2015 10:20 am |
|
|
What circuit do you have on the MCLR pin?. |
|
|
af19
Joined: 21 Aug 2014 Posts: 15
|
|
Posted: Sun Aug 23, 2015 10:39 am |
|
|
Ttelmah wrote: | What circuit do you have on the MCLR pin?. |
I just have a 10k pull up resistor. |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19541
|
|
Posted: Sun Aug 23, 2015 10:43 am |
|
|
Double check your ground connection. The classic 'reasons' for this, are 1: MCLR. 2: Power. 3: Still compiling in DEBUG mode.
Remember if you are compiling through MPLAB, this defaults to selecting DEBUG. |
|
|
af19
Joined: 21 Aug 2014 Posts: 15
|
|
Posted: Sun Aug 23, 2015 10:58 am |
|
|
Ttelmah wrote: | Double check your ground connection. The classic 'reasons' for this, are 1: MCLR. 2: Power. 3: Still compiling in DEBUG mode.
Remember if you are compiling through MPLAB, this defaults to selecting DEBUG. |
I tested programming in release mode and my second problem solved!! Lol
But now I have another problem, in release mode for the first time after programming everything works fine and I have a good PWM. After switching off and on the power supply I get PWM but it has changed and is out of shape. It should be a SPWM but the output have changed and it just doesn't look like the last output and it has changed a lot!!
PWM output gets okay when I re-program the micro but it goes bad after another switching on and off (even when the programmer is connected)!!
This problem is making me crazy! |
|
|
newguy
Joined: 24 Jun 2004 Posts: 1909
|
|
Posted: Sun Aug 23, 2015 12:24 pm |
|
|
A 10k pullup is a little on the large side in a noisy environment. 4.7k would provide a "stronger" pullup that noise would have a tougher time pulling down.
Do you have the brownout fuse enabled? If so, what specific value? Can you set it to a lower value? |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19541
|
|
Posted: Sun Aug 23, 2015 1:55 pm |
|
|
Unfortunately, you have to be careful, if using MCLR for ICD. Many on the debug interfaces can't pull down a resistor below 10K (some even recommend 22K!....). |
|
|
newguy
Joined: 24 Jun 2004 Posts: 1909
|
|
Posted: Sun Aug 23, 2015 2:08 pm |
|
|
True. I use only the CCS ICDs (ICD-U64 and the load-n-go), and I used to only use a 47k /MCLR pullup on all PIC projects until I had issues with a board that controls a welder resetting during a weld. I dropped that resistor to a 22k, then to a 10k, then finally settled on a 4.7k. That was the only value that wouldn't allow the processor to spontaneously reset. Happily, both ICDs can still program it without issue.
It should also be said that my /MCLR circuitry is very minimalistic: just the pullup resistor. |
|
|
af19
Joined: 21 Aug 2014 Posts: 15
|
|
Posted: Mon Aug 24, 2015 11:13 pm |
|
|
newguy wrote: | A 10k pullup is a little on the large side in a noisy environment. 4.7k would provide a "stronger" pullup that noise would have a tougher time pulling down.
Do you have the brownout fuse enabled? If so, what specific value? Can you set it to a lower value? |
I set my pull up to 3.3K and now I don't have resets any more!!
But my second problem still exists. When I'm in debug mode every time I power up the circuit I should reset my micro to get started, and when I'm in release mode for the first time after programming I have desired output. But after the first switching on and off the power supply, my PWMs shape gets bad and I should re-program the micro to make the PWM work good. (Even reset the micro doesn't solve PWM).
What do you think is causing this problem? |
|
|
af19
Joined: 21 Aug 2014 Posts: 15
|
|
Posted: Tue Aug 25, 2015 12:00 am |
|
|
I found something which I think it is causing the bad PWM output.
I erased and my PWM output got bad, so I think it's the part of the code which is making my PWM shape to be okay.
But I don't know why in release mode after the first switch on and off the PWM get bad, and I should reprogram the chip to make the output good.
What is your idea? |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19541
|
|
Posted: Tue Aug 25, 2015 12:53 am |
|
|
I go back to my original reply:
"Electrical noise."
You have got major noise problems. CKSFSM only has an effect, if the master processor oscillator, is seen as being erratic. It stands for 'Clock Fail Safe Monitoring'. If the master oscillator misses pulses or stops, the processor switches to the internal oscillator to keep running.
The same applies to your MCLR problem. Sounds here like RF pick-up on the tracks to the ICD header.
Realistically you need to look carefully at the layout of your board (ground plane etc.), how traces (and sections of the plane) carrying high currents are routed, the decoupling round the chips, etc. etc.. |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|