domingo, 9 de março de 2014

Circuito para testar motores de passo


Eu precisava de um circuito para testar alguns pequenos motores de passo para um novo projeto e resolvi bolar um com velocidade ajustável e escolha do sentido de rotação. Pra facilitar incorporei o circuito de driver para motores unipolares (os bipolares necessitam de ponte H).
O resultado foi esse circuito simples usando um PIC12F629 como gerador da sequência de pulsos, onde um botão controla sequencialmente o período dos pulsos, inciando em 20ms, para 10ms, indo para 100ms e decrescendo em passos de 10ms. O outro botão apenas altera o sentido de rotação.  Os transistores do circuito driver são BC337 para 500mA, portanto não aguentariam motores de maior porte e torque.  A tensão para alimentação do circuito é de 5V e para os motores pode variar até uns 30V.

Segue o esquema, o firmware e duas fotos da montagem numa placa padrão.





















O firmware para o 12F629:
:100000002828A301A200FF30A207031CA307031C9A
:1000100023280330A100DF300F200328A101E83E90
:10002000A000A109FC30031C1828A00703181528FC
:10003000A0076400A10F152820181E28A01C222844
:1000400000002228080083130313831264000800B1
:1000500007309900831628308500831285011430FB
:10006000B9001030850039080120143085003908A6
:100070000120043085003908012006308500390848
:10008000012002308500390801200330850039083D
:100090000120013085003908012011308500390820
:1000A00001206400851D5D280A30B902640039080A
:1000B0000A3C031D5D286430B9006400851E612878
:1000C000622831281130850039080120013085006F
:1000D00039080120033085003908012002308500ED
:1000E00039080120063085003908012004308500D8
:1000F00039080120143085003908012010308500AE
:10010000390801206400851D8E280A30B902640078
:1001100039080A3C031D8E286430B9006400851E2E
:0A012000922831286228630093281A
:02400E00843FED
:00000001FF


Adendo:
Eu havia colocado o pequeno potenciômetro na plaquinha, mas que estava sem uso. na verdade eu já tinha pensado em fazer um controle analógico tanto para a velocidade como para estabelecer qual o sentido de rotação. Então aqui uma versão com o potenciômetro:

Neste circuito o microcontrolador agora é um PIC12F675 que possui conversor analógico-digital. O programa então foi modificado para ler a posição do potenciômetro (na verdade ele converte a tensão do cursor do potenciômetro) e conforme o valor convertido ele define qual a velocidade e o sentido. A conversão é feita para 8 bits, então temos valores de 0 a 255. Se o valor lido for maior do que 127, então o sentido será um e se o valor for menor do que 128, o sentido será contrário. O valor determina a largura dos pulsos para os passos do motor. Assim quanto mais perto do centro, mais largo deve ser o pulso (faz-se o cálculo 256-valor ou o próprio valor, dependendo do sentido). A largura mínima será de 1ms, a máxima de 127ms.  A chave serve para que o uC efetive a leitura da posição do potenciômetro e movimente o motor no sentido e velocidade desejados.  Há uma mudança no pino de saída para uma das fases em relação ao primeiro esquema. 
O firmware para o 12F675:

:100000003C280F39A0000310A00DA00D1F08E039F7
:10001000200401389F000030A100323023209F14BB
:100020009F181028A1011E083728A301A200FF3045
:10003000A207031CA307031C37280330A100DF30ED
:1000400023201728A101E83EA000A109FC30031CD1
:100050002C28A00703182928A0076400A10F29282D
:1000600020183228A01C36280000362808008313E8
:10007000031383126400080083161830850083126E
:100080000C309F00831638309F0083128501143096
:10009000BA00203085003A081520243085003A083F
:1000A0001520043085003A081520063085003A08EE
:1000B0001520023085003A081520033085003A08E3
:1000C0001520013085003A081520213085003A08B6
:1000D00015206400851D882803300120B9006400C4
:1000E00080303902031C7F2864003908FF3C031D5F
:1000F0007B28FE30B9003908FF3CBA00892864002B
:100100003908003C031D86280130B9003908BA00BF
:100110004928213085003A081520013085003A0829
:100120001520033085003A081520023085003A0872
:100130001520063085003A081520043085003A085D
:100140001520243085003A081520203085003A0813
:1001500015206400851DC82803300120B900640003
:10016000803039020318BE2864003908003C031DA2
:10017000BB280130B9003908BA00492864003908A1
:10018000FF3C031DC528FE30B9003908FF3CBA000A
:0601900089286300C92864
:02400E00843FED
:00000001FF