Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 22 May 2014 11:19:17 -0300
From:      Luiz Otavio O Souza <lists.br@gmail.com>
To:        fabiodive <fabiodive@gmail.com>
Cc:        "freebsd-arm@freebsd.org" <freebsd-arm@freebsd.org>
Subject:   Re: Beaglebone Black. PWM minimum frequency of 1.52KHz
Message-ID:  <CAB=2f8zy7=S_Xh0REsv29_1%2BHk_=h7Ut1SDURjP-otaE9hsxBg@mail.gmail.com>
In-Reply-To: <F5705D29-1EFE-4A20-89CC-CB0E52EB57F3@gmail.com>
References:  <F5705D29-1EFE-4A20-89CC-CB0E52EB57F3@gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
--001a11c3669263125b04f9fdcc1b
Content-Type: text/plain; charset=UTF-8

On 10 May 2014 08:56, fabiodive wrote:
> Hello,
>
> PWM on Beaglebone Black
>
> during my laboratory tests I was not able to setup a frequency suitable for servo motors.
> I tried several times with many values but the results was always the same.
> The minimal frequency I was able to achieve was 1.52 KHz.
> Also, I noticed odd results with the most of configuration values, in this case
> I lost the PWM output signal.
>
> I tried some combinations, measuring the results with an oscilloscope, the period
> configuration key appears to loose its  nanoseconds meaning beyond a value:

Hi Fabio!

The PWM frequency  is determined as SYSCLKOUT (100Mhz) / prescaler
settings / period. As the current code uses 1 for the prescaler and
the period is a 16bit value the lower frequency you can have is
actually 1.529Khz.

> # sysctl dev.am335x_pwm.1.period=1500
> # sysctl dev.am335x_pwm.1.dutyA=300
> result frequency: 66 KHz  ->should be 666 KHz
> length of period: 15 us ->should be 1.5 us
> length of pulse: 2 us

As above, this is correct: 100Mhz / 1 / 1500 = 66Khz.

>
> # sysctl dev.am335x_pwm.1.period=1500000
> # sysctl dev.am335x_pwm.1.dutyA=10000
> result frequency: 1.71 KHz -> should be 666Hz
> length of period:  585 us
> length of pulse:  100 us
>
> # sysctl dev.am335x_pwm.1.period=1800000
> # sysctl dev.am335x_pwm.1.dutyA=10000
> result frequency: 3.24 KHz -> should be 555Hz
> length of period:  308 us
> length of pulse:  100 us

These two examples are overflowing the period variable.

I've the attached patch which enforces the maximum values where needed
(to avoid such overflows) and two new sysctls, one allows you to set
the prescaler for the PWM module and the other (which is probably more
interesting) allows you to check the actual PWM frequency.

The sysctl.am335x_pwm.X.freq can also be use to set an desired
frequency directly, it will try to get you the better setting it can
find for the desired frequency, which usually means get the bigger
period it can find to give the better PWM resolution that is possible
for a given frequency.

I've been able to drive R/C servos directly with this patch and the
following set:

sysctl.am335x_pwm.X.freq = 50 (digital servos may operate at higher frequencies)

And then, for the cheap chinese servo i have here, i can get it to
travel almost 180o using duty values from 2000 to 6000 (YMMV).

I've checked the frequencies with a scope and they look fine for me.

Regards,
Luiz

--001a11c3669263125b04f9fdcc1b
Content-Type: text/plain; charset=US-ASCII; name="am335x_pwm.diff"
Content-Disposition: attachment; filename="am335x_pwm.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_hvi58ht70

SW5kZXg6IHN5cy9hcm0vdGkvYW0zMzV4L2FtMzM1eF9wd20uYwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMv
YXJtL3RpL2FtMzM1eC9hbTMzNXhfcHdtLmMJKHJldmlzaW9uIDI2NjUxNikKKysrIHN5cy9hcm0v
dGkvYW0zMzV4L2FtMzM1eF9wd20uYwkod29ya2luZyBjb3B5KQpAQCAtMjksMTAgKzI5LDExIEBA
CiAKICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KICNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KKyNpbmNs
dWRlIDxzeXMvYnVzLmg+CiAjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPgorI2luY2x1ZGUgPHN5cy9s
aW1pdHMuaD4KKyNpbmNsdWRlIDxzeXMvbG9jay5oPgogI2luY2x1ZGUgPHN5cy9tb2R1bGUuaD4K
LSNpbmNsdWRlIDxzeXMvYnVzLmg+Ci0jaW5jbHVkZSA8c3lzL2xvY2suaD4KICNpbmNsdWRlIDxz
eXMvbXV0ZXguaD4KICNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KICNpbmNsdWRlIDxzeXMvcm1h
bi5oPgpAQCAtNTMsNiArNTQsNyBAQAogCiAvKiBJbiB0aWNrcyAqLwogI2RlZmluZQlERUZBVUxU
X1BXTV9QRVJJT0QJMTAwMAorI2RlZmluZQlQV01fQ0xPQ0sJCTEwMDAwMDAwMAogCiAjZGVmaW5l
CVBXTV9MT0NLKF9zYykJCW10eF9sb2NrKCYoX3NjKS0+c2NfbXR4KQogI2RlZmluZQlQV01fVU5M
T0NLKF9zYykJCW10eF91bmxvY2soJihfc2MpLT5zY19tdHgpCkBAIC0xNzAsNiArMTcyLDggQEAK
IHN0YXRpYyBkZXZpY2VfcHJvYmVfdCBhbTMzNXhfcHdtX3Byb2JlOwogc3RhdGljIGRldmljZV9h
dHRhY2hfdCBhbTMzNXhfcHdtX2F0dGFjaDsKIHN0YXRpYyBkZXZpY2VfZGV0YWNoX3QgYW0zMzV4
X3B3bV9kZXRhY2g7CisgICAgICAgIAorc3RhdGljIGludCBhbTMzNXhfcHdtX2Nsa2Rpdls4XSA9
IHsgMSwgMiwgNCwgOCwgMTYsIDMyLCA2NCwgMTI4IH07CiAKIHN0cnVjdCBhbTMzNXhfcHdtX3Nv
ZnRjIHsKIAlkZXZpY2VfdAkJc2NfZGV2OwpAQCAtMTc3LDYgKzE4MSwxMCBAQAogCXN0cnVjdCBy
ZXNvdXJjZQkJKnNjX21lbV9yZXNbNF07CiAJaW50CQkJc2NfaWQ7CiAJLyogc3lzY3RsIGZvciBj
b25maWd1cmF0aW9uICovCisJaW50CQkJc2NfcHdtX2Nsa2RpdjsKKwlpbnQJCQlzY19wd21fZnJl
cTsKKwlzdHJ1Y3Qgc3lzY3RsX29pZAkqc2NfY2xrZGl2X29pZDsKKwlzdHJ1Y3Qgc3lzY3RsX29p
ZAkqc2NfZnJlcV9vaWQ7CiAJc3RydWN0IHN5c2N0bF9vaWQJKnNjX3BlcmlvZF9vaWQ7CiAJc3Ry
dWN0IHN5c2N0bF9vaWQJKnNjX2NoYW5BX29pZDsKIAlzdHJ1Y3Qgc3lzY3RsX29pZAkqc2NfY2hh
bkJfb2lkOwpAQCAtMjQxLDcgKzI0OSw5OSBAQAogCXJldHVybiAoMCk7CiB9CiAKK3N0YXRpYyB2
b2lkCithbTMzNXhfcHdtX2ZyZXEoc3RydWN0IGFtMzM1eF9wd21fc29mdGMgKnNjKQoreworCWlu
dCBjbGtkaXY7CisKKwljbGtkaXYgPSBhbTMzNXhfcHdtX2Nsa2RpdltzYy0+c2NfcHdtX2Nsa2Rp
dl07CisJc2MtPnNjX3B3bV9mcmVxID0gUFdNX0NMT0NLIC8gKDEgKiBjbGtkaXYpIC8gc2MtPnNj
X3B3bV9wZXJpb2Q7Cit9CisKIHN0YXRpYyBpbnQKK2FtMzM1eF9wd21fc3lzY3RsX2ZyZXEoU1lT
Q1RMX0hBTkRMRVJfQVJHUykKK3sKKwlpbnQgY2xrZGl2LCBlcnJvciwgZnJlcSwgaSwgcGVyaW9k
OworCXN0cnVjdCBhbTMzNXhfcHdtX3NvZnRjICpzYzsKKwl1aW50MzJfdCByZWc7CisKKwlzYyA9
IChzdHJ1Y3QgYW0zMzV4X3B3bV9zb2Z0YyAqKWFyZzE7CisKKwlQV01fTE9DSyhzYyk7CisJZnJl
cSA9IHNjLT5zY19wd21fZnJlcTsKKwlQV01fVU5MT0NLKHNjKTsKKworCWVycm9yID0gc3lzY3Rs
X2hhbmRsZV9pbnQob2lkcCwgJmZyZXEsIHNpemVvZihmcmVxKSwgcmVxKTsKKwlpZiAoZXJyb3Ig
IT0gMCB8fCByZXEtPm5ld3B0ciA9PSBOVUxMKQorCQlyZXR1cm4gKGVycm9yKTsKKworCWlmIChm
cmVxID4gUFdNX0NMT0NLKQorCQlmcmVxID0gUFdNX0NMT0NLOworCisJUFdNX0xPQ0soc2MpOwor
CWlmIChmcmVxICE9IHNjLT5zY19wd21fZnJlcSkgeworCQlmb3IgKGkgPSBuaXRlbXMoYW0zMzV4
X3B3bV9jbGtkaXYpIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJCWNsa2RpdiA9IGFtMzM1eF9wd21f
Y2xrZGl2W2ldOworCQkJcGVyaW9kID0gUFdNX0NMT0NLIC8gY2xrZGl2IC8gZnJlcTsKKwkJCWlm
IChwZXJpb2QgPiBVU0hSVF9NQVgpCisJCQkJYnJlYWs7CisJCQlzYy0+c2NfcHdtX2Nsa2RpdiA9
IGk7CisJCQlzYy0+c2NfcHdtX3BlcmlvZCA9IHBlcmlvZDsKKwkJfQorCQkvKiBSZXNldCB0aGUg
ZHV0eSBjeWNsZSBzZXR0aW5ncy4gKi8KKwkJc2MtPnNjX3B3bV9kdXR5QSA9IDA7CisJCXNjLT5z
Y19wd21fZHV0eUIgPSAwOworCQlFUFdNX1dSSVRFMihzYywgRVBXTV9DTVBBLCBzYy0+c2NfcHdt
X2R1dHlBKTsKKwkJRVBXTV9XUklURTIoc2MsIEVQV01fQ01QQiwgc2MtPnNjX3B3bV9kdXR5Qik7
CisJCS8qIFVwZGF0ZSB0aGUgY2xrZGl2IHNldHRpbmdzLiAqLworCQlyZWcgPSBFUFdNX1JFQUQy
KHNjLCBFUFdNX1RCQ1RMKTsKKwkJcmVnICY9IH5UQkNUTF9DTEtESVZfTUFTSzsKKwkJcmVnIHw9
IFRCQ1RMX0NMS0RJVihzYy0+c2NfcHdtX2Nsa2Rpdik7CisJCUVQV01fV1JJVEUyKHNjLCBFUFdN
X1RCQ1RMLCByZWcpOworCQkvKiBVcGRhdGUgdGhlIHBlcmlvZCBzZXR0aW5ncy4gKi8KKwkJRVBX
TV9XUklURTIoc2MsIEVQV01fVEJQUkQsIHNjLT5zY19wd21fcGVyaW9kIC0gMSk7CisJCWFtMzM1
eF9wd21fZnJlcShzYyk7CisJfQorCVBXTV9VTkxPQ0soc2MpOworCisJcmV0dXJuICgwKTsKK30K
Kworc3RhdGljIGludAorYW0zMzV4X3B3bV9zeXNjdGxfY2xrZGl2KFNZU0NUTF9IQU5ETEVSX0FS
R1MpCit7CisJaW50IGVycm9yLCBpLCBjbGtkaXY7CisJc3RydWN0IGFtMzM1eF9wd21fc29mdGMg
KnNjOworCXVpbnQzMl90IHJlZzsKKworCXNjID0gKHN0cnVjdCBhbTMzNXhfcHdtX3NvZnRjICop
YXJnMTsKKworCVBXTV9MT0NLKHNjKTsKKwljbGtkaXYgPSBhbTMzNXhfcHdtX2Nsa2RpdltzYy0+
c2NfcHdtX2Nsa2Rpdl07CisJUFdNX1VOTE9DSyhzYyk7CisKKwllcnJvciA9IHN5c2N0bF9oYW5k
bGVfaW50KG9pZHAsICZjbGtkaXYsIHNpemVvZihjbGtkaXYpLCByZXEpOworCWlmIChlcnJvciAh
PSAwIHx8IHJlcS0+bmV3cHRyID09IE5VTEwpCisJCXJldHVybiAoZXJyb3IpOworCisJUFdNX0xP
Q0soc2MpOworCWlmIChjbGtkaXYgIT0gYW0zMzV4X3B3bV9jbGtkaXZbc2MtPnNjX3B3bV9jbGtk
aXZdKSB7CisJCWZvciAoaSA9IDA7IGkgPCBuaXRlbXMoYW0zMzV4X3B3bV9jbGtkaXYpOyBpKysp
CisJCQlpZiAoY2xrZGl2ID49IGFtMzM1eF9wd21fY2xrZGl2W2ldKQorCQkJCXNjLT5zY19wd21f
Y2xrZGl2ID0gaTsKKworCQlyZWcgPSBFUFdNX1JFQUQyKHNjLCBFUFdNX1RCQ1RMKTsKKwkJcmVn
ICY9IH5UQkNUTF9DTEtESVZfTUFTSzsKKwkJcmVnIHw9IFRCQ1RMX0NMS0RJVihzYy0+c2NfcHdt
X2Nsa2Rpdik7CisJCUVQV01fV1JJVEUyKHNjLCBFUFdNX1RCQ1RMLCByZWcpOworCQlhbTMzNXhf
cHdtX2ZyZXEoc2MpOworCX0KKwlQV01fVU5MT0NLKHNjKTsKKworCXJldHVybiAoMCk7Cit9CisK
K3N0YXRpYyBpbnQKIGFtMzM1eF9wd21fc3lzY3RsX2R1dHkoU1lTQ1RMX0hBTkRMRVJfQVJHUykK
IHsKIAlzdHJ1Y3QgYW0zMzV4X3B3bV9zb2Z0YyAqc2MgPSAoc3RydWN0IGFtMzM1eF9wd21fc29m
dGMqKWFyZzE7CkBAIC0yOTIsMTUgKzM5MiwxOSBAQAogCWlmIChwZXJpb2QgPCAxKQogCQlyZXR1
cm4gKEVJTlZBTCk7CiAKLQlpZiAoKHBlcmlvZCA8IHNjLT5zY19wd21fZHV0eUEpIHx8IChwZXJp
b2QgPCBzYy0+c2NfcHdtX2R1dHlCKSkgewotCQlkZXZpY2VfcHJpbnRmKHNjLT5zY19kZXYsICJQ
ZXJpb2QgY2FuJ3QgYmUgbGVzcyB0aGVuIGR1dHkgY3ljbGVcbiIpOwotCQlyZXR1cm4gKEVJTlZB
TCk7Ci0JfQorCWlmIChwZXJpb2QgPiBVU0hSVF9NQVgpCisJCXBlcmlvZCA9IFVTSFJUX01BWDsK
IAotCiAJUFdNX0xPQ0soc2MpOworCS8qIFJlc2V0IHRoZSBkdXR5IGN5Y2xlIHNldHRpbmdzLiAq
LworCXNjLT5zY19wd21fZHV0eUEgPSAwOworCXNjLT5zY19wd21fZHV0eUIgPSAwOworCUVQV01f
V1JJVEUyKHNjLCBFUFdNX0NNUEEsIHNjLT5zY19wd21fZHV0eUEpOworCUVQV01fV1JJVEUyKHNj
LCBFUFdNX0NNUEIsIHNjLT5zY19wd21fZHV0eUIpOworCS8qIFVwZGF0ZSB0aGUgcGVyaW9kIHNl
dHRpbmdzLiAqLwogCXNjLT5zY19wd21fcGVyaW9kID0gcGVyaW9kOwogCUVQV01fV1JJVEUyKHNj
LCBFUFdNX1RCUFJELCBwZXJpb2QgLSAxKTsKKwlhbTMzNXhfcHdtX2ZyZXEoc2MpOwogCVBXTV9V
TkxPQ0soc2MpOwogCiAJcmV0dXJuIChlcnJvcik7CkBAIC0zNjAsNiArNDY0LDE0IEBACiAJY3R4
ID0gZGV2aWNlX2dldF9zeXNjdGxfY3R4KHNjLT5zY19kZXYpOwogCXRyZWUgPSBkZXZpY2VfZ2V0
X3N5c2N0bF90cmVlKHNjLT5zY19kZXYpOwogCisJc2MtPnNjX2Nsa2Rpdl9vaWQgPSBTWVNDVExf
QUREX1BST0MoY3R4LCBTWVNDVExfQ0hJTERSRU4odHJlZSksIE9JRF9BVVRPLAorCSAgICAiY2xr
ZGl2IiwgQ1RMVFlQRV9JTlQgfCBDVExGTEFHX1JXLCBzYywgMCwKKwkgICAgYW0zMzV4X3B3bV9z
eXNjdGxfY2xrZGl2LCAiSSIsICJQV00gY2xvY2sgcHJlc2NhbGVyIik7CisKKwlzYy0+c2NfZnJl
cV9vaWQgPSBTWVNDVExfQUREX1BST0MoY3R4LCBTWVNDVExfQ0hJTERSRU4odHJlZSksIE9JRF9B
VVRPLAorCSAgICAiZnJlcSIsIENUTFRZUEVfSU5UIHwgQ1RMRkxBR19SVywgc2MsIDAsCisJICAg
IGFtMzM1eF9wd21fc3lzY3RsX2ZyZXEsICJJIiwgIlBXTSBmcmVxdWVuY3kiKTsKKwogCXNjLT5z
Y19wZXJpb2Rfb2lkID0gU1lTQ1RMX0FERF9QUk9DKGN0eCwgU1lTQ1RMX0NISUxEUkVOKHRyZWUp
LCBPSURfQVVUTywKIAkgICAgInBlcmlvZCIsIENUTFRZUEVfSU5UIHwgQ1RMRkxBR19SVywgc2Ms
IDAsCiAJICAgIGFtMzM1eF9wd21fc3lzY3RsX3BlcmlvZCwgIkkiLCAiUFdNIHBlcmlvZCIpOwpA
QCAtMzcyLDcgKzQ4NCw2IEBACiAJICAgICJkdXR5QiIsIENUTFRZUEVfSU5UIHwgQ1RMRkxBR19S
Vywgc2MsIDAsCiAJICAgIGFtMzM1eF9wd21fc3lzY3RsX2R1dHksICJJIiwgIkNoYW5uZWwgQiBk
dXR5IGN5Y2xlcyIpOwogCi0KIAkvKiBDT05GSUdVUkUgRVBXTTEgKi8KIAlyZWcgPSBFUFdNX1JF
QUQyKHNjLCBFUFdNX1RCQ1RMKTsKIAlyZWcgJj0gfihUQkNUTF9DTEtESVZfTUFTSyB8IFRCQ1RM
X0hTUENMS0RJVl9NQVNLKTsKQEAgLTM4MSw2ICs0OTIsNyBAQAogCXNjLT5zY19wd21fcGVyaW9k
ID0gREVGQVVMVF9QV01fUEVSSU9EOwogCXNjLT5zY19wd21fZHV0eUEgPSAwOwogCXNjLT5zY19w
d21fZHV0eUIgPSAwOworCWFtMzM1eF9wd21fZnJlcShzYyk7CiAKIAlFUFdNX1dSSVRFMihzYywg
RVBXTV9UQlBSRCwgc2MtPnNjX3B3bV9wZXJpb2QgLSAxKTsKIAlFUFdNX1dSSVRFMihzYywgRVBX
TV9DTVBBLCBzYy0+c2NfcHdtX2R1dHlBKTsK
--001a11c3669263125b04f9fdcc1b--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAB=2f8zy7=S_Xh0REsv29_1%2BHk_=h7Ut1SDURjP-otaE9hsxBg>