Solicitud de programación de motores para coches inteligentes de Freescale
Depende de qué canal PWM se utilice para el control.
PWM2 y PWM3 se utilizan para el control a continuación.
#include
#include
# pragma LINK_INFO DERIVATIVO "mc9s12dg128b"
int cnt2=80,cnt3=20;
void init_pwm(void)
{
PWME =0X00; //PWM deshabilitado
PWMPRCLK=0x10; //Reloj B=8M/2=4MHz
PWMSCLB=200 //Reloj SB=Reloj B/2/200; =10kHz
PWMCLK=0x0c; //Establece las fuentes de reloj de PWM2 y PWM3 en Clock SB
PWMPOL=0x0c //Establece la polaridad de PWM2 y PWM3 en 1< / p>
PWMCAE=0x00; //Establece la alineación de PWM2 y PWM3 a la izquierda
PWMPER2=200
PWMDTY2=cnt2; Tiempo de nivel alto interno
PWMPER3=200
PWMDTY3=cnt3; //Establece el tiempo de nivel alto interno de PWM3
PWME=0x0c; , PWM3 habilitado
}
void init_ect(void)
{
TSCR1_TEN=0 //Contador borrado
TSCR2_PR=7; // Clock=Bus/128
TIOS_IOS1=1; //Establece el puerto ECT1 como comparación de salida
TC1=406250; una interrupción programada cada 6500 ms
DLYCT=0x01; //Retraso 256 ciclos de bus, es decir, 32us
PACN1=0 //Borrar el registro TC1
TIE_C1I=1; //Establece la habilitación de interrupción del puerto ECT1
TSCR1_TEN=1; //Comienza a contar
}
void interrupt 9 run(void) //Interrumpir después de contar 650ms
{
TFLG1_C1F=1; //Borrar el indicador de interrupción de ECT1
TC1=TC1+406250;
cnt2=cnt2-5;
cnt3=cnt3+5;
PWMPER2=cnt2
PWMPER3=cnt3;
if (cnt2==0)
init_pwm();
}
void main(void)
{ p>
DDRB=0XFF;
PORTB=0x04;
init_pwm();
init_ect();
EnableInterrupts ;
para(;;)
{ }
}