---
# System prepended metadata

title: 2022AUV軟體培訓-Servo馬達
tags: [教學]

---

# 2022AUV軟體培訓-Servo馬達
###### tags: `教學`
## PWM訊號
writer: 林哲丞
email: snoopy195011@gmail.com

***1. Why PWM?***

PWM全名為Pulse Width Modulation
是一種可以將數位訊號模擬成類比訊號的方式(digital -> analog)
大部分馬達的使用都會需要用PWM訊號進行驅動 
因為arduino或是stm32等微控制器的GPIO只能輸出數位訊號


***2. PWM基本概念***

參數有frequency, duty cycle
**- duty cycle**
duty cycle的定義為高電位時間佔一整個週期多少比例
    ![](https://i.imgur.com/kdiDzZY.png)

在一定的頻率下，通過不同的duty cycle，即可得到不同的輸出模擬電壓
比方說 若最大電壓為5V
duty cycle爲50% ，就可以得到模擬的2.5V輸出電壓 
duty cycle為75% 得到的電壓就是3.75V

**- frequency**
在不同使用情景下，會有適合的頻率範圍
以控制馬達為例，頻率太低會導致馬達轉動不穩定，如果頻率剛好在人耳聽覺範圍，有時還會聽到呼嘯聲。頻率太高的話馬達可能轉不起來。

***3. PWM如何對電機轉速進行控制***

當輸出高電位時，電機會轉動，但是是一點一點的提速，在高電位突然轉向低電位時，電機由於電感有防止電流突變的作用是不會停止的，會保持這原有的轉速，以此往復，電機的轉速就會對應周期內輸出的平均電壓值。

Servo的頻率一般爲50HZ(週期20ms)，而輸出的高電位一般爲0.5-2.5ms。來控制Servo不同的轉角
0.5~2.5ms的PWM高電位部分對應控制180度舵機的0-180度
以180度角度的Servo爲例，那麼對應的控制關係如下圖：
![](https://i.imgur.com/4OzIhoK.png)
若為360度的Servo，那麼對應的控制關係如下圖：
![](https://i.imgur.com/U8lH5Ec.png)


### 數位訊號vs類比訊號
數位訊號就是只有1或0，高電位or低電位
類比訊號就是輸出的訊號可以是1~10之類的
如圖
!    ![](https://i.imgur.com/XNTzK5V.png)
!    ![](https://i.imgur.com/VsawsfY.png)

## 實作
- **藉由可變電阻控制servo角度**
(可變電阻10k以上)
![](https://i.imgur.com/uOs5KyU.jpg)

- **Why use PCA9685**
1. 如果要控制很多馬達的話，微控器的腳位數量可能不夠
2. the servo library itself make use of some of the Arduino internal timer and that may conflict with some of the other libraries that you are using for other sensors, so that it can be a problem  when you are controlling servo even if you have only one or two. 
## 參考文件:
PWM訊號:https://ppfocus.com/0/spa2f6e78.html
I2C: https://rexpighj123.pixnet.net/blog/post/219960237-i2c%E7%9A%84%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86%E8%88%87%E6%8A%80%E8%A1%93%E5%88%86%E6%9E%90
PCA 9685: http://wiki.sunfounder.cc/index.php?title=PCA9685_16_Channel_12_Bit_PWM_Servo_Driver
實作影片:https://www.youtube.com/watch?v=kUHmYKWwuWs&list=LL&index=1&t=1729s&ab_channel=DroneBotWorkshop
教學: https://www.youtube.com/watch?v=tmuaUtzm-tU