查看: 528|回复: 0
打印 上一主题 下一主题

[STM32F030R8T6学习笔记] 自動澆花系統(3)

[复制链接] qrcode

35

主题

38

帖子

115

积分

注册会员

Rank: 2

积分
115
楼主
跳转到指定楼层
发表于 2015-9-30 10:15 AM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

<前言>

系統已完成,現在開始補文,首先先講解最後的一部份,窗簾軌道和步進馬達部分,馬達固定在窗簾軌道上當作動力來源,挑選合適的輪子可以套在馬達上,將窗簾拉繩繞緊,即可利用拉繩牽動灑水頭


<新增材料>

自走車輪子1個

UL2003驅動板1個


<實作>

1. UL2003步進電機驅動板,適用28BYJ-48等5線8相步進馬達,和自走車的輪子,如下圖:


2. 將強力雙面步膠帶黏在步進馬達輪軸上,加以固定緊牢在輪軸上,如下圖:


3. 接下來研究UL2003內部的電路和如何使用它來驅動步進馬達,首先先觀看原理圖,如下:

插座接上由主控板藉由杜邦線接至IN1,IN2,IN3,IN4輸入邏輯和電源VCC,接地GND

馬達五線分別接上OUT1,OUT2,OUT3,OUT4為輸出邏輯部分,以高低電位決定組態,並接上VM馬達電源


4. 為什麼要經過ULN2003這顆IC呢,因為步進馬達通常需要較大的電流,一般嵌入式的I/O沒辦法提供大的電流,在本系統裡因為主控板本身可提供至800mA總電流(5V 情況下),250mA總電流(12V 情況下),所以基本上是足夠驅動的,但我們還是經過一級的放大,ULN2003 datasheet如下圖:


5. 可得知原來構造是由7個達靈頓(darlington)對所組成,這裡簡單介紹達靈頓,如下圖,由兩個BJT接成,使得第一級BJT的電流又再一次被第二級BJT放大,讓馬達得到足夠的驅動電流,如果要在更熟悉達靈頓的公式推導,可以看Smith電子學一書



6. 接下來我們觀看,步進馬達如何驅動他轉動和方向,如下圖介紹,共8相,順時針和逆時針轉動寫入邏輯的順序恰好顛倒

所以順時鐘的邏輯順序如下,共8相


 // 1
 IN4=HIGH;
 IN3=LOW;
 IN2=LOW;
 IN1=LOW;

 // 2
 IN4=HIGH;
 IN3=HIGH;
 IN2=LOW;
 IN1=LOW;

 // 3
 IN4=LOW;
 IN3=HIGH;
 IN2=LOW;
 IN1=LOW;

 // 4
 IN4=LOW;
 IN3=HIGH;
 IN2=HIGH;
 IN1=LOW;

 // 5
 IN4=LOW;
 IN3=LOW;
 IN2=HIGH;
 IN1=LOW;

 // 6
 IN4=LOW;
 IN3=LOW;
 IN2=HIGH;
 IN1=HIGH;

 // 7
 IN4=LOW;
 IN3=LOW;
 IN2=LOW;
 IN1=HIGH;

 // 8
 IN4=HIGH;
 IN3=LOW;
 IN2=LOW;
 IN1=HIGH;
而逆時鐘的邏輯順序後如下,共8相:


 // 1
 IN1=HIGH;
 IN2=LOW;
 IN3=LOW;
 IN4=LOW;

 // 2
 IN1=HIGH;
 IN2=HIGH;
 IN3=LOW;
 IN4=LOW;

 // 3
 IN1=LOW;
 IN2=HIGH;
 IN3=LOW;
 IN4=LOW;

 // 4
 IN1=LOW;
 IN2=HIGH;
 IN3=HIGH;
 IN4=LOW;

 // 5
 IN1=LOW;
 IN2=LOW;
 IN3=HIGH;
 IN4=LOW;

 // 6
 IN1=LOW;
 IN2=LOW;
 IN3=HIGH;
 IN4=HIGH;

 // 7
 IN1=LOW;
 IN2=LOW;
 IN3=LOW;
 IN4=HIGH;

 // 8
 IN1=HIGH;
 IN2=LOW;
 IN3=LOW;
 IN4=HIGH;

利用這些邏輯高低準位組態就可以正確讓步進馬達順時針和逆時針轉動,達到移動灑水頭的目的


7. 為什麼不用直流馬達呢? 直流馬達通常轉速快,但缺點就是扭力不夠(torque),而步進馬達是由直流馬達和減速比的齒輪組所組成,轉速降為原來的1/64,但增加了足夠的扭力,用以拉動拉繩牽動灑水頭,步進馬達拆解開來如下圖:


8. 最後我們將步進馬達部分寫成驅動函數,完整的程式碼和實際橋接窗簾軌道將在下篇一起公布

void counterclockwise (){
 // 1
 IN1=1;
 IN2=0;
 IN3=0;
 IN4=0;
 wait(delay);
 // 2
 IN1=1;
 IN2=1;
 IN3=0;
 IN4=0;
 wait(delay);
 // 3
 IN1=0;
 IN2=1;
 IN3=0;
 IN4=0;
 wait(delay);
 // 4
 IN1=0;
 IN2=1;
 IN3=1;
 IN4=0;
 wait(delay);
 // 5
 IN1=0;
 IN2=0;
 IN3=1;
 IN4=0;
 wait(delay);
 // 6
 IN1=0;
 IN2=0;
 IN3=1;
 IN4=1;
 wait(delay);
 // 7
 IN1=0;
 IN2=0;
 IN3=0;
 IN4=1;
 wait(delay);
 // 8
 IN1=1;
 IN2=0;
 IN3=0;
 IN4=1;
 wait(delay);
}

void clockwise (){
 // 1
 IN4=1;
 IN3=0;
 IN2=0;
 IN1=0;
 wait(delay);
 // 2
 IN4=1;
 IN3=1;
 IN2=0;
 IN1=0;
 wait(delay);
 // 3
 IN4=0;
 IN3=1;
 IN2=0;
 IN1=0;
 wait(delay);
 // 4
 IN4=0;
 IN3=1;
 IN2=1;
 IN1=0;
 wait(delay);
 // 5
 IN4=0;
 IN3=0;
 IN2=1;
 IN1=0;
 wait(delay);
 // 6
 IN4=0;
 IN3=0;
 IN2=1;
 IN1=1;
 wait(delay);
 // 7
 IN4=0;
 IN3=0;
 IN2=0;
 IN1=1;
 wait(delay);
 // 8
 IN4=1;
 IN3=0;
 IN2=0;
 IN1=1;
 wait(delay);
}


其中wait(delay)調控步進馬達的轉速,藉由延遲寫入邏輯組態來達到速度調變,過低的delay將會造成馬達不轉動而發熱發燙


9. 接上馬達和主控板,可利用這些定義好的組態進行轉動測試,分別定義好IN1,IN2,IN3,IN4為哪隻PIN即可,和delay,定義和接線參考如下:

DigitalOut IN1(D2);
DigitalOut IN2(D3);
DigitalOut IN3(D4);
DigitalOut IN4(D5);
float delay=0.001;


燒寫至板上就可以觀察步進馬達的轉動,沒有輪子的朋友們可用迴紋針卡在輪軸上觀看轉動情形


<小結>

本篇主要介紹步進馬達動力的構造和設計,此為整個系統重要的動力來源,深入淺出的來做介紹,下篇將公布完成的第一版整個系統


作者: MOP 發布於ICKEY社區

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表