EIS 實驗室 在QT2410上實現PWM功能 693415003 王兆慶 693415083 朱育昇
脈波寬度調變簡介(1/3) 離散信號的例子有:脈衝振幅調變(PAM)脈衝相位調變(PPM),脈衝寬度調變(PWM),它們代表信息的參數完全隨信息的變化而變化。 所謂脈波寬度調變(Pulse Width Modulate簡稱 PWM)信號就是一連串可以調整脈波寬度的信號。 脈寬調變是一種調變或改變某個方波的簡單方法。在它的基本形式上,方波工作周期(duty cycle)是根據輸入信號的變化而變化。 工作周期(duty cycle)是指方波的高電平時間和低電平時間之比。 Embedded System Course
脈波寬度調變簡介(2/3) PWM有許多應用,其中包括電動機控制、伺服控制、光線調整、開關電源,甚至某些音頻放大器。 若將供應馬達的電源在一個固定週期做ON 及OFF 的控制,則ON 的時間越長,馬達的轉速越快,反之越慢。 此種ON 與OFF 比例控制速度的方法即稱為脈波寬度調變,ON 的期間稱為工作週期(duty cycle),以百分比表示。 Embedded System Course
脈波寬度調變簡介(3/3) PWM脈波寬度調變信號圖 若直流馬達的供應電源電壓為10伏特,乘以20%的工作週期即得到2伏特的輸出至馬達上,不同的工作週期對應出不同電壓讓直流馬達轉速產生不同的變化。 Embedded System Course
直流馬達控制電路(1/2) 本次實驗,直流馬達的速度控制主要是仰賴S3C2410所產生的脈波寬度調變(PWM)做為速度的控制方式,藉由利用改變輸出的脈波寬度或頻率來使直流馬達有精準的速度輸出。 但因S3C2410輸出的是3.3伏特PWM訊號,並不是太足夠用來推動馬達到一定的速度,故在此使用了一光耦合器(PC817)做為將3.3伏特PWM訊號轉換成為10伏特的PWM訊號。 光耦合器內部電路架構 Embedded System Course
直流馬達控制電路(2/2) S3C2410 DC Motor Controller TA7291 光耦合器 PC817 直流馬達控制方塊圖 I/O 光耦合器 PC817 DC PWM 直流馬達控制方塊圖 Embedded System Course
TA7291P Embedded System Course
TA7291P BLOCK DIAGRAM Bridge Driver Embedded System Course
TA7291P PIN FUNCTION Embedded System Course
TA7291P 操作模式 其共有四種電壓的輸出方式,分別是正轉、逆轉、停止及剎車 Embedded System Course
Demo 實作講解 Embedded System Course
系統時脈 Embedded System Course
PWM_init FCLK 200MHz HCLK 100MHz PCLK 50MHz s3c2410_get_cpu_clk() HCLK 100MHz s3c2410_get_bus_clk(GET_HCLK) PCLK 50MHz s3c2410_get_bus_clk(GET_PCLK) MPLL = (m * Fin) / (p* 2^ s ) m = MDIV p = PDIV s = SDIV UPLL USB裝置 48 MHz Embedded System Course
pwm驅動程式的函式 File_operations PWM_fops Open Release Read Ioctl Write 開啟驅動程式 Release 釋放PWM驅動程式 Read 暫不使用 Ioctl 設定馬達正反轉、PWM時脈和脈波寬度 Write Embedded System Course
PWM 驅動程式 Ioctl參數 PWM_IOC_2HZ_INITIAL輸出頻率為2HZ PWM_IOC_5KHZ_INITIAL輸出頻率為5KHZ PWM_IOC_READ_TCMPB讀取脈波寬度 PWM_IOC_SET_TCMPB輸出脈波寬度 PWM_IOC_SET_MOTOR設定正反轉 Embedded System Course
PWM 驅動程式 Embedded System Course
PWM_IOC_2HZ_INITIAL TCFG0 TCFG1 輸出時脈為PCLK/(presclaer +1)/(divider) 設定prescaler0的時脈 0 ~~ 255 TCFG1 設定Clock Divider(除頻器) 1/2、1/4、1/8、1/16 輸出時脈為PCLK/(presclaer +1)/(divider) 50MHZ / (31+1) / (1/16) = 97.656KHZ 50MHZ / (0 + 1) / (1/2) = 25MHZ Embedded System Course
PWM_IOC_2HZ_INITIAL TCNTB0 TCNPB0 設定計數器的值 TCNTB0 = 0xbebc(48828) 50MHZ / (31+1) / (1/16) = 97.656KHZ 97.656KHZ / 48828 = 2Hz 相同方式可設定出5KHz時脈 TCNPB0 設定比較暫存器,去決定脈波寬度 TCMPB0 = TCNTB0 >>1 為50%脈波寬度 Embedded System Course
PWM_IOC_READ_TCMPB PWM_IOC_SET_TCMPB PWM_IOC_SET_MOTOR 讀取脈波寬度 輸出脈波寬度 設定GPIO (GPG)使其達到正反轉功能 Embedded System Course