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