Objetivo: Fazer um motor de passo que gire no sentido horário, sentido anti -horário e seja controlado sua velocidade.
Código feito em CCS C Compiler
#include <16F877a.h>
#device ADC = 8
#fuses xt, nowdt, noprotect, put, brownout
#use delay(clock = 20MHz)
#include <lcd.c>
int pinos[] = {0b0001, 0b0010, 0b0100, 0b1000};
//Obs: A variável velocidade e tempo é apenas para demostração
//não é feito nenhum cálculo para calcular a velocidade de rotação do motor
int velocidade, tempo;
void CRESCENTE(){
for(int i = 0; i < (sizeof(pinos)/sizeof(int)); i++){
printf(lcd_putc,"\fSENTIDO: HORARIO\nTempo:%d us\tVelocidade= %d rad/s", tempo, velocidade);
output_b(pinos[i]);
delay_ms(100);
output_low(pinos[i]);
delay_ms(tempo);
}
}
void DECRESCENTE(){
printf(lcd_putc,"\fSENTIDO: ANTI-HORARIO\nTempo:%d us\tVelocidade= %d rad/s", tempo, velocidade);
for(int j = (sizeof(pinos)/sizeof(int)); j >= 1; j--){
output_b(pinos[j-1]);
delay_ms(100);
output_low(pinos[j]);
delay_ms(tempo);
}
}
void main(void){
SETUP_ADC_PORTS(AN0);
SETUP_ADC(ADC_CLOCK_INTERNAL);
SET_ADC_CHANNEL(0);
lcd_init();
while(TRUE){
velocidade = read_adc();
printf(lcd_putc,"\fMotor de Passo:\nMotor OFF");
delay_ms(20);
while(input(pin_C2) == TRUE && input(pin_C5) == FALSE){
velocidade = read_adc();
tempo = read_adc() * 0.8;
CRESCENTE();
}
while(input(pin_C2) == FALSE && input(pin_C5) == TRUE){
velocidade = read_adc();
tempo = read_adc() * 0.8;
DECRESCENTE();
}
}
}