Estoy tratando de controlar un servomotor utilizando PIC 12F675. Tuve éxito manejando el servo así como logrando el control de velocidad para el servo. Gracias por la ayuda de Stack Exchange
Ahora, mi control de velocidad es bastante inestable. Intenté ajustar mi código aquí y allá, pero hasta ahora no he tenido éxito.
Mi principal objetivo es que el servo gire de 0 a 90 y retroceda según los datos del conmutador. Logré este objetivo. Cuando enciendo un potenciómetro, la velocidad a la que gira el servo debería cambiar. Logré esto también. Sin embargo, el servo no está girando 90 grados en todo momento.
Gira 90 ish -120 grados a altas velocidades y gira solo 30-45 grados a bajas velocidades (o algo extraño está ocurriendo). Quiero que mi servo gire 90 grados, pero solo mi velocidad debería variar.
¿Puede alguien señalarme el error en mi código?
GO_DONE=1; // start ADC
while(GO_DONE); // wait for ADC to complete
V_in=(ADRESH<<8)|ADRESL; //copy ADC values into a variable V_in
quotient=V_in/200; // I am dividing this because I will have integers between 1 to 5
// I am using this quotient value to magnify/diminish my time delays for speed
if(quotient<=1)
{
quotient=1; //fool proofing
}
if(GPIO&(1<<3)) //checking whether toggle switch is high. If yes, go forward else reverse
{
while(counter>1000) //this counter is for the delay cycles.
{
counter=counter-(20*quotient);
GPIO|=(1<<2);
cnt_1=counter;
while(cnt_1>0)
{
__delay_us(1);
cnt_1--;
}
GPIO&=~(1<<2); //low signal
__delay_ms(18);
}
cnt=1000;//reset of counter for reverse direction
}
elseif(!(GPIO&(1<<3))) // check if switch is low
{
while(cnt<1500)
{
cnt=cnt+(20*quotient);
GPIO|=(1<<2);
cnt_2=cnt;
while(cnt_2>0)
{
__delay_us(1);
cnt_2--;
}
GPIO&=~(1<<2);
__delay_ms(18);
}
counter=1500;//reset of counter for forward direction
}