Como se sugirió en mi pregunta original en raspberrypi.stackexchange.com , también estoy publicando mi problema aquí, lo encontrará textualmente al final de esta pregunta.
Sin embargo, debido a que este es un sitio de ingeniería eléctrica, me complace formular una pregunta que es un poco más específica sobre la parte de ingeniería eléctrica:
Según el problema que describo, ¿es probable que el
problema se deba a un problema de sincronización (es decir, busque una solución en la forma en que dirijo el
motor paso a paso, es decir, una solución de software), o cree que hay algún
tipo de problema eléctrico/? ¿Problema mecánico o característica del motor paso a paso que no conozco?
Muchas gracias de antemano!
EDICIÓN 1: Actualización basada en los comentarios hasta ahora: el helicóptero es una placa de aluminio de 16 cm de diámetro y 1 mm de espesor con 5 agujeros. Suponiendo un disco masivo para facilitar el cálculo, el disco tiene un volumen de 20 cm^3 y una masa de 54 gramos. El momento de inercia debe ser 0,5 M R^2 = 0,5 0,054 0,08^2 = 0,0001728 kg.m2. La conversión a oz.pulgada^2 produce ~9.4 oz.pulgada^2, lo que concedo parece ser 2-3 veces el par motor basado en su hoja de especificaciones. (No seleccioné el hardware para este prototipo... :)) Lo que me sorprende es que incluso una aceleración 10 veces más lenta (llegando a la velocidad máxima en el transcurso de 32 segundos) TAMBIÉN falla regularmente , generalmente alrededor de 2000PPS o 10000PPS según un algunos intentos rápidos. El hecho de que funcione a veces(aunque rara vez) también me sorprende.
Por lo que entiendo hasta ahora, podría ser que el motor tenga poca potencia. ¿Alguna explicación de por qué funcionará bien a veces, e incluso fallará en aceleraciones muy lentas a veces también?
Resumen:
Raspberry Pi controla un EasyDriver y un motor paso a paso, pero los resultados son inconsistentes y el sistema falla regularmente. No puedo entender por qué.
Texto largo:
Hola a todos,
Tengo una configuración pequeña en la que se supone que un motor paso a paso impulsa una rueda de helicóptero para modular una señal. Contar los pasos no es un requisito ya que el motor viene con un codificador, pero sí una velocidad estable. Estoy usando la biblioteca pigpio (más específicamente, la función hardware_PWM) para configurar el RPM en el pin (12) en la Raspberry. Dado que configurarlo a máxima velocidad instantáneamente no hace que el motor paso a paso se mueva en absoluto, he codificado un pequeño aumento de velocidad. El script de prueba que uso hace que suba a 32000 ppm (20 Hz / 1200 RPM), permanezca allí durante unos segundos y luego disminuya nuevamente.
He tenido un problema regular en el que, en cualquier momento durante la aceleración, el funcionamiento estable o la disminución gradual (aunque generalmente aumenta), el motor parece perder su "agarre" en el eje giratorio y el helicóptero. A partir de ese momento, el picador disminuirá su velocidad a 0 RPM, pero el motor continuará intentando acelerar (incrementar) o mantener la velocidad (RPM estables), lo que provocará un silbido/zumbido diferente al del funcionamiento normal. Actualmente creo que debe ser algún tipo de problema de tiempo, ya que, según mi comprensión limitada, un motor paso a paso se puede comparar con un giro que necesitaría "empujar" en el momento correcto, o no hará nada o realmente lento abajo. ¿Es posible que en algún punto aleatorio se produzca una discrepancia de tiempo entre el tren de pulsos y los "tiempos de empuje ideales", lo que provoque este problema? Asombrosamente,
Me doy cuenta de que esto es probablemente una combinación de Raspberry Pi, hardware y pigpio, pero espero que esto le suene a alguien que pueda ayudarme, ¡sería muy apreciado!
Algunas especificaciones, en caso de que ayuden:
Motor : NEMA08-17-01D-AMT112S ( https://www.cuidevices.com/product/resource/nema08-amt112s.pdf )
Fuente de alimentación : LPV-150-24 (LED reutilizado- controlador, https://www.meanwell-web.com/nl-nl/ac-dc-single-output-led-driver-constant-voltage-c-lpv--150--24 )
Controlador : EasyDriver ROB-12779 ( https://www.sparkfun.com/products/12779 )
Código de prueba : https://pastebin.com/tKS0jvDA (Hay un error tipográfico en la línea 7 que no está en el código real;))
Demostración de error: https: //www.youtube.com/watch?v=KtLGCtxPLPw
Notas de demostración:En el primer ciclo, falla durante el centrifugado, puede escuchar cómo aumenta la frecuencia pero el eje se ralentiza. En el segundo intento, alcanza la velocidad que debería, y luego falla mientras reduce la velocidad, momento en el que la melodía que escuchas es causada por la masa del helicóptero que impulsa efectivamente un motor sin energía :)
EDITAR 29/04: Se agregó una lista de códigos para publicar según lo solicitado:
import datetime
import time
import pigpio
import numpy as np
import Rpi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(6, GPIO.OUT)
GPIO.output(6,0) #Enable motor
pi = pigpio.pi()
freq_startup_diff = 100
freq_startup_wait = 0.01
motor_freq = 32000
startup_range = np.arange(0,motor_freq+1,freq_startup_diff)
print('Motor starting')
for freq in startup_range:
pi.hardware_PWM(int(12),int(freq),int(1e6*0.5))
print("Frequency equals {}".format(freq))
time.sleep(freq_startup_wait)
print('Motor started.')
time.sleep(3)
print('Motor stopping.')
stop_range = np.flip(startup_range)
for freq in stop_range:
pi.hardware_PWM(int(12),int(freq),int(1e6*0.5))
print("Frequency equals {}".format(freq))
time.sleep(freq_startup_wait)
GPIO.output(6,1) # Disable motor
print('Motor stopped.')
```
O su motor paso a paso no entrega suficiente torque para seguir tal rampa o la corriente es demasiado pequeña para este motor. Solución: aumente la rampa de aceleración/desaceleración y verifique la configuración de corriente de salida de la placa del controlador.
El par requerido para acelerar la masa de inercia en el ángulo de aceleración especificado. Si la aceleración requerida es demasiado alta, entonces el motor paso a paso se desincroniza y pierde pasos.
Otro aspecto es el par VS. características de velocidad
A velocidades más altas, el par cae. El punto de inflexión depende de la constante de voltaje del motor y del voltaje de la fuente de alimentación.
EDITAR:
La combinación motor/carga actúa como un péndulo de torsión. La combinación de la inercia del rotor y la carga con un eje forma un sistema oscilante. Cuando hace girar el motor con cualquier desequilibrio del volante, en realidad excita el sistema, una vez que se alcanza la resonancia, su motor no puede sostener este par de ondulación.
NOTA para su generación de rampa:
Si cambia el punto de ajuste de velocidad en pasos, eso teóricamente significa una aceleración ilimitada. Debe actualizar el PWM lo más rápido posible con pequeñas cantidades:
Vea el método para crear un PWM que cambia continuamente: cómo generar una rampa de frecuencia suave
mattman944
SvB
Marko Bursic
SvB
cristiano b
SvB
cristiano b
cristiano b
wait_times = (t1, t2, t3) speeds = (v1,v2,v3) for cur_wait_time, cur_speed in zip(wait_times, speeds)
y luego jugar con los valores. descubra los "pasos más grandes posibles para la velocidad mientras busca un tiempo de espera decente"mattman944
mattman944
mattman944
SvB
SvB
cristiano b