自分自身のための ものづくり / 自分自身のためのものづくりメモ

* センサレスDCモータにセンサを付けて回す

#電子工作 #途中経過


 HDDに用いられるセンサレスのDCブラシレスモータは、部品として取りだしてもそれを回すのはなかなか大変である。
…が、センサを付けてしまえば、複雑な位置検知回路は不要である。

 というわけで、
・反射型フォトセンサ
・通電パターンを印刷した円盤
・トランジスタ
を組み合わせ、HDD用のセンサレスDCモータを回してみた。


 HDDのモータは身近にあるモータの中では群を抜いて高精度な物なので、これを単体でいじれるとメカトロ野郎(or乙女)にとって面白いおもちゃになるだろう。


参考文献
トランジスタ技術 2000年2月号「特集 実験で学ぶモータ制御回路の設計」
ソリトン 2006年8月 モータの基礎と実用制御回路設計 モータの動作原理と特性
http://www.japanservo.jp/products/pdf/soliton34.pdf
日本サーボ株式会社


Eagle用データ
http://baku.homeunix.net/elec/loft/ptn4DCmoter.brd


ruby -Ks mkptn.rb > mkptn.scr
とかしてEagle用スクリプト生成し、作成した。
include Math
require 'complex'

offset_x = 50
offset_y = 50
$中心 = Complex.new(offset_x, offset_y)

半径 = 45.72+1.27 # 2.54mm*18
幅 = -5.08 # 2.54mm*2

相数 = 3
極数 = 4

相間電気角 = 120 #[deg]
各相電気角正 = 90 #[deg] # 60:1相励磁 , 90:1-2相励磁
各相電気角負 = 90 #[deg]


def 円弧(半径, 始角, 終角) # 始点・終点は[deg]
    最小角 = 3 #[deg]
    分割数 = ((終角-始角).abs/最小角).ceil
    
    points=[]
    for n in 0..分割数
        θ = 2*PI* (始角 + (終角-始角)*n/分割数)/360
        points << Complex.new(cos(θ),sin(θ))*半径
    end
    return points
end

def eagle_coord(複素数)
    return sprintf("(%.3f %.3f)", 複素数.real, 複素数.image)
end

def put_polygon(内径, 幅,  始角, 終角)
    内側 = 円弧(内径, 始角, 終角)
    外側 = 円弧(内径+幅, 始角, 終角)
    
    points = []
    points += 内側
    points += 外側.reverse
    points << 内側[0]
    
    coords = ""
    points.each do |point|
        coords << eagle_coord(point+$中心) + " "
    end
    
    return "polygon " + coords
end


θ = 0
for 極 in 0..(極数-1)
    for 相 in 0..(相数-1)
        θ = 360*極/極数 + 相間電気角*相/極数
        print put_polygon(半径+幅*相,幅, θ-各相電気角負/極数, θ+各相電気角正/極数)
    end
end

create : 2007/02/02 (Fri)
update : 2007/02/11 (Sun)