[FUG-BR] ARMv6 FreeBSD na beaglebone 5v

Luiz Otavio O Souza lists.br em gmail.com
Terça Julho 15 22:00:48 BRT 2014


2014-07-15 10:34 GMT-03:00 Evandro Nunes:
> sim, estou assistindo a um curso no youtube excelente, ja consigo ler
> esquematicos agora apesar de não ter decorado todos os simbolos, e em
> especial não decorar as cores dos aneis nos resistores mas tudo ficou claro
>
> dentro desse assunto me digam o seguinte quero fazer isso em shell script:
>
> http://beagleboard.org/Support/BoneScript/ServoMotor/
>
> no trecho:
>
> var duty_cycle = (position*0.115) + duty_min;
> b.analogWrite(SERVO, duty_cycle, 60, scheduleNextUpdate);
>
> o duty_cycle é o dutyA ou dutyB nas sysctl do freebsd?
>
> o period é o 200? equivalente a:
>
>  // call updateDuty after 200ms
>     setTimeout(updateDuty, 200);
>
> posso por então o period do PWM em 200 e o dutyA (ou B?) em
> (position*0.115) + duty_min num shell script?
>

Cada modulo de PWM tem duas saídas que são nomeadas de PWM1A e PWM1B
para o modulo 1 e PWM2A e PWM2B para o modulo 2.

Como a freqüência do PWM é configurada por modulo as saídas A e B vão
operar na mesma freqüência mas podem ter ciclos de trabalho diferentes
(por exemplo: frequência PWM 100Khz, saída A 20% e saída B 60%).

Assim são 2 módulos PWM e 4 saídas.

O pino 14 do conector P9 corresponde a saída A do PWM1 (conforme
https://wiki.freebsd.org/FreeBSD/arm/BeagleBoneBlack).

No caso do servo, o duty cycle não são os 200ms, esse valor é o tempo
no qual a saída do PWM é atualizada (a cada 200ms ela tem um novo
valor).  O período é calculado através da freqüência que nesse caso é
o '60' passado no analogWrite(). O 60 corresponde a 60Hz (servos RC
operam entre 50~60Hz).

O PWM da BBB não funcionava com freqüências tão baixas (antes o mínimo
era 1.525kHz) até a r266937 quando corrigi isso. Como ainda não fiz o
MFC você só vai conseguir utilizar servos com o -current (que tem 2
sysctls a mais - clockdiv e frequency).

Com essa sysctl 'frequency', você pode setar ela diretamente pra 60 e
depois só precisa alterar o duty cycle (A ou B dependendo da saída que
você estiver utilizando) para movimentar o servo.

Como teste eu liguei um potenciometro em uma das entradas analógicas e
um programa em C lendo esse valor e alterando o duty cycle do PWM,
assim o servo acompanhava o movimento conforme o movimento que era
feito no potenciometro.

Luiz


Mais detalhes sobre a lista de discussão freebsd