Red de conocimiento informático - Conocimiento sistemático - Solicitud de programación de motores para coches inteligentes de Freescale

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 /* definiciones y macros comunes */

#include /* información derivada */

# 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)

{

DDRB=0XFF;

PORTB=0x04;

init_pwm();

init_ect();

EnableInterrupts ;

para(;;)

{ }

}