# 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)