LoginSignup
3
1

More than 3 years have passed since last update.

digisparkでサーボを動かす

Last updated at Posted at 2016-12-13

2021.1.24: 引っ張り出して来て触ってみた

200円ほどでamazonで買ったdigispark でサーボを動かしてみる。

方針

  • fast pwm modeを使ってみる 参考
  • PB0とPB1で2つのサーボを制御する
  • attiny85のTimer0を使う
  • PB0: OC0A, PB1: OC0B
  • clock 16MHzなのでPWMの周期は16000000/1024/256=61Hz(16.4ms)になる (一般的なサーボの駆動は50Hz(20ms))
  • サーボへのパルス幅は1.5±0.5msなので、制御可能なレジスタの値は24±8

  -> 実制御して確認したら8〜36までは動いた(150度くらいの変域になる)

(ヌルヌルとは動かない、周期を短くしてもサーボが動くならば細かくできるけど、、、今後の課題)

材料

注意点

  • MacBook Mid 2009 (El Captin) + Arduino 1.6.13ではUSB Hubを使わないと書き込みができなかった -> USB延長ケーブルを使えば認識できそう
  • Edison(ubilinux)ではudev ruleを追加しないといけない 参考 (追加しておかないと、arduino IDEでもmicronucleusでもうまくいかない)
  • delay()は使えないので、
#include <until/delay.h>
#define F_CPU 16000000
...

_delay_ms(1000);

を使う

  • pinMode(1, OUTPUT)が必要

レジスタの設定

  • TCCR0A
    • COM0A = 2 (fast pwm mode, OC0A enable)
    • COM0B = 2 (fast pwm mode, OC0B enable)
    • WGM0 = 3 (fast pwm mode, 0xFFで1周期)
  • TCCR0B
    • WGM02 = 0 (fast pwm mode, 0xFFで1周期)
    • CS0 = 5 (プリスケーラ 1024)
  • OCR0A : PB0の出力のdutyを設定
  • OCR0B : PB1の出力のdutyを設定

ソースコード

ino
#include <avr/io.h>
#include <util/delay.h>

#define F_CPU 16000000

#define COM0A 6
#define COM0B 4
#define WGM0 0
#define WGM02 3
#define CS0 0

void setup() {
  // put your setup code here, to run once:

  /*
    TCCR0A
        COM0A = 2 (fast pwm mode, OC0A enable)
        COM0B = 2 (fast pwm mode, OC0B enable)
        WGM0 = 2 (fast pwm mode, 0xFFで1周期)
    TCCR0B
        WGM02 = 0 (fast pwm mode, 0xFFで1周期)
        CS0 = 5 (プリスケーラ 1024)
   */

   TCCR0A = (2 << COM0A) | (2 << COM0B) | (3 << WGM0);
   TCCR0B = (0 << WGM02) | (5 << CS0);

   pinMode(0, OUTPUT);
   pinMode(1, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:

  OCR0B = 16;
  _delay_ms(2000);

  OCR0B = 24;
  _delay_ms(2000);

  OCR0B = 32;
  _delay_ms(2000);

  OCR0B = 24;
  _delay_ms(2000);
}
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1