---
# System prepended metadata

title: 4/22 開會

---

# 4/22 開會
- PID 複習
https://www.ni.com/zh-tw/innovations/white-papers/06/pid-theory-explained.html
- 馬達正轉反轉 角動量守恆

# 4/25 PWM 心得
### **試著用數位(1或0 即不連續)去模擬類比(連續)的連續訊號**
- **人的眼睛到30HZ就會暫留，故只要速度夠快就會看起來好像是連續一樣**
- **故需要使用一計數器和比較器(比較器值只要大於CCR就會變成0)**
## Arduino PWM
#### 參考資料: 
https://www.allaboutcircuits.com/projects/using-the-arduinos-analog-io/
板子是使用digital去跑，而現實生活是用analog(電池，Voltage generator.....)
- Aruduino 有ADC (現實訊號轉成0和1)，**語法: analogRead(pin)**
可以讀5V或是3.3V 然後直接切成0-1023(2^10)等分，所以一個等分是4.9mV，反正最後會換算出來要有幾個是0幾個是1，求得電壓

   例如: 輸入5V的時候，analog.read(5V)就是1023，意即 4.9mV*1024=5V  (0-1023)

- 如果要用DAC(數位輸出連續信號)的話，就需要使用PWM去輸出，語法: **analogWrite(腳位,value) ;**
--有些編號旁有 "~" 符號，這些 pin 就是可以使用 PWM pin。
-- value 為 0-255(全暗和全亮)
- 若要將拿到的類比訊號轉數位訊號，使用map函數 語法: **map(value, fromLow, fromHigh, toLow, toHigh)**
可能一個連續變化的電壓(加可變電阻)要控制servo移動

   -map(數值,0,1023,0,255)數值從0到1023轉換比例到0~255

   -如果要用servo的話，可以把拿到的analog值利用map去換算成角度
   ex: map(4,0,1023,0,180)這樣可以把4V換算成角度

## 範例
1. 試著想輸入2V的連續電壓，但是數位只能開或關(5V or 0V)，速度夠快就可以用峰值乘上DutyCycle(40%)即可看起來(平均以後)有2V可以用。


- analogWrite(腳位,255*0.4)

- val = map(2,0,1024,0,255)
analogwrite(腳位,val)



