|
|
View previous topic :: View next topic |
Author |
Message |
torlaktr
Joined: 17 Mar 2016 Posts: 10
|
30f2010 dead time problem |
Posted: Fri Mar 18, 2016 1:42 am |
|
|
Hello gentlemen
My problem
It gives error
Expression must evaluate to a constant :: DT too high
Why ?
Code: | #include <30f2010.h>
#device ADC=10
#fuses XT_PLL16
#fuses NOWDT
#fuses NOPROTECT
#fuses NOBROWNOUT
#fuses NOPUT
#fuses NOWRT
#fuses NODEBUG
#fuses PWMPIN
#fuses MCLR
#fuses ICSP1
#use delay(clock=4000000)
int8 x=0;
int16 dutya = 160;//154
void main(output_drive)
{
setup_motor_pwm(1,MPWM_FREE_RUN ,1,1,900);
set_motor_unit(1,2,MPWM_ENABLE ,50,50);
set_motor_pwm_duty(1,1,900);
basla:
delay_ms(5);
goto basla;
}
} |
|
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19550
|
|
Posted: Fri Mar 18, 2016 3:32 am |
|
|
XT_PLL16 and 'clock=4000000', don't really go together. Would imply a crystal at 250KHz.
'main' cannot have a variable received 'by' it. It is always a void function both on it's receipts and returns.
Then a goto loop. Take -50 points. Goto can sometimes be used for very specific programming reasons, but generally a label, and goto, are 'near capital' offences....
Then you have one more closing bracket than opening bracket in the code posted.
The only faults are basic syntax errors:
Code: |
#include <30f2010.h>
#device ADC=10
#fuses XT_PLL16
#fuses NOWDT
#fuses NOPROTECT
#fuses NOBROWNOUT
#fuses NOPUT
#fuses NOWRT
#fuses NODEBUG
#fuses PWMPIN
#fuses MCLR
#fuses ICSP1
#use delay(clock=64MHz) //assuming 4MHz crystal
void main(void)
{
int8 x=0;
int16 dutya = 160;//154
setup_motor_pwm(1,MPWM_FREE_RUN ,1,1,900);
set_motor_unit(1,2,MPWM_ENABLE ,50,50);
set_motor_pwm_duty(1,1,900);
while (TRUE)
delay_ms(5);
}
|
|
|
|
torlaktr
Joined: 17 Mar 2016 Posts: 10
|
Thank you |
Posted: Fri Mar 18, 2016 4:40 am |
|
|
Dear Ttelmah thank you
But
set_motor_unit(1,2,MPWM_ENABLE ,50,50); very good
Im chance dead time
set_motor_unit(1,2,MPWM_ENABLE ,65,65);
Compiler error : Expression must evaluate to a constant :: DT too high
and then
Im chance dead time
set_motor_unit(1,2,MPWM_ENABLE ,66,66 ); very good
Why not accept 65 ?
and then again Im chance dead time
int8 x = 10;
set_motor_unit(1,2,MPWM_ENABLE ,x,x ); Compiler error : Expression must evaluate to a constant :: DT too high
Why ? |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Fri Mar 18, 2016 12:16 pm |
|
|
The dsPIC30F2010 data sheet says:
Quote: |
14.7.1 DEAD-TIME GENERATORS
Each complementary output pair for the PWM module
has a 6-bit down counter that is used to produce the
dead-time insertion. As shown in Figure 14-4, the
dead-time unit has a rising and falling edge detector
connected to the duty cycle comparison output.
14.7.2 DEAD-TIME RANGES
The amount of dead time provided by the dead-time
unit is selected by specifying the input clock prescaler
value and a 6-bit unsigned value. |
With 6 bits, you can only get values from 0 to 63. So you could never
get a dead-time of 66 anyway. |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19550
|
|
Posted: Fri Mar 18, 2016 12:54 pm |
|
|
Also be aware that the deadtime, is a configuration value, not something that can be changed on the fly.
This is because the PWM has to be stopped before you can update the deadtime. From the data sheet:
"Note: The user should not modify the DTCON1
values while the PWM module is operating
(PTEN = 1). Unexpected results may
occur." |
|
|
torlaktr
Joined: 17 Mar 2016 Posts: 10
|
Thank you |
Posted: Sat Mar 19, 2016 11:47 am |
|
|
I drive h bridge mosfets ...
but I have to replace dead time
How can I do it ? |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19550
|
|
Posted: Sat Mar 19, 2016 3:04 pm |
|
|
You set it up once at the start. Since it is a feature of your hardware (how long is needed to ensure that one set of FETs turns off, before trying to turn the others on, it should never have to change.
If you must change it (perhaps two different hardware configurations), then you must stop the PWM (PWM_OFF), and program it to the second value. However as two distinct fixed setup commands. |
|
|
|
|
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
|