From owner-freebsd-arm@FreeBSD.ORG Thu May 22 14:19:20 2014 Return-Path: Delivered-To: freebsd-arm@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 3F703996 for ; Thu, 22 May 2014 14:19:20 +0000 (UTC) Received: from mail-wg0-x229.google.com (mail-wg0-x229.google.com [IPv6:2a00:1450:400c:c00::229]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id C42B62695 for ; Thu, 22 May 2014 14:19:19 +0000 (UTC) Received: by mail-wg0-f41.google.com with SMTP id z12so3515584wgg.24 for ; Thu, 22 May 2014 07:19:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=K+6UoSqJ6vlfLiyBLjMXW339p9JgJZxnyYO5uaUGtcM=; b=dtExBHOrPFp1e8m0TBWLHp16YppV5A8JS4V3Qfb1E+iXab/68dD1BJsbbffffC92OH rqzvvHEPr6I6iSLNwilY1iCFYKnyh3meOvlvanJKIPgEgsJBBCAo7/J988b1eqOJiUJX t4+7KQ0fSzwxKSK+3munnkdMsajXTFeGMtZwFjkSHzBNDvlLBpJmojDETesr3t2UQCg+ AQrr18Z++1XdUBJUDndCVI1zOXNsNHhaQjQxrOpKAaydKZOem62sQgnVga7eMSUG64cr DZK3sRrxo4/gKVWroCLvKuusDA3iq4X+a9sShs6bvST0tE9a9MIAMIDgpYBqGAJFQtMk jung== MIME-Version: 1.0 X-Received: by 10.180.12.238 with SMTP id b14mr16965965wic.16.1400768357921; Thu, 22 May 2014 07:19:17 -0700 (PDT) Received: by 10.216.40.72 with HTTP; Thu, 22 May 2014 07:19:17 -0700 (PDT) In-Reply-To: References: Date: Thu, 22 May 2014 11:19:17 -0300 Message-ID: Subject: Re: Beaglebone Black. PWM minimum frequency of 1.52KHz From: Luiz Otavio O Souza To: fabiodive Content-Type: multipart/mixed; boundary=001a11c3669263125b04f9fdcc1b Cc: "freebsd-arm@freebsd.org" X-BeenThere: freebsd-arm@freebsd.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: "Porting FreeBSD to ARM processors." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 22 May 2014 14:19:20 -0000 --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--