freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于proteus的直流無刷電機(jī)控制仿真的研究與開發(fā)-資料下載頁

2024-11-10 03:29本頁面

【導(dǎo)讀】世界上,成功的有兩種人,一種人是傻子,一種人是瘋子。傻子是會(huì)吃虧的人,瘋子是會(huì)行動(dòng)的人!直流無刷電動(dòng)機(jī)是在有刷直流電動(dòng)機(jī)的基礎(chǔ)上發(fā)展起來的。目前為止,雖然在傳。動(dòng)機(jī)正在迅猛發(fā)展,日益受到人們廣泛的關(guān)注。BLDC電機(jī)具有直流電機(jī)方便調(diào)速的優(yōu)。點(diǎn),但它沒有機(jī)械換向的種種問題,同時(shí)擴(kuò)大了調(diào)速的范圍。此外還有很多有優(yōu)點(diǎn),比如噪音比較低,效率高以及轉(zhuǎn)矩波動(dòng)較小,具有重要的研究意義??刂蒲芯?實(shí)現(xiàn)了仿真的硬件電路及單片機(jī)程序的仿真。通過MPLAB軟件對(duì)代碼進(jìn)行。編寫和調(diào)試,并且結(jié)合Proteus軟件的硬件仿真。最終得到實(shí)驗(yàn)結(jié)果。制的靈活性及控制精度更高。

  

【正文】 中斷保存理想轉(zhuǎn)速最大值的需求。這 些 只是當(dāng)電機(jī)運(yùn)行時(shí)完成。 ADC 中斷 用于模 /數(shù)轉(zhuǎn)換。 void __attribute__((interrupt, no_auto_psv)) _ADC1Interrupt (void) { if () //判斷電機(jī)是否啟動(dòng) ifdef CLOSEDLOOP // 對(duì)于閉環(huán)控制 DesiredSpeed = ADC1BUF0 * POTMULT。 //為閉環(huán) 保存控制速度值 else { // 對(duì)于開環(huán)控制 P1DC1 = (ADC1BUF0 1)。 // 賦值?? P1DC2 = P1DC1。 // 并裝載所有的三個(gè) PWM?? P1DC3 = P1DC1。 // 占空比寄存器 } endif 【精品文檔】世界上,成功的有兩種人,一種人是傻子,一種人是瘋子。傻子是會(huì)吃虧的人,瘋子是會(huì)行動(dòng)的人! // 重置 ADC 中斷標(biāo)志 = 0。//清除中斷標(biāo)志 } PID 算法子程序 BLDC 電機(jī) 速度的給定是電 位計(jì) 來確定 的 。 首先 用 要求的速度值來確定比例 ( P)誤 差和積分 ( I) 誤差。 通過它們的值,來 重新計(jì)算 占空比 。 PID 算法流程如圖 49所示: 圖 49 PID算法子程序流程圖 使用 “ P+ I” 的 算法來 重新 計(jì)算 DutyCycle 的 值, 并把該值 載入 PDCx 。 void __attribute__((interrupt, no_auto_psv)) _T1Interrupt (void)//只用于閉環(huán)控制 { ActualSpeed = SPEEDMULT/timer3avg。//給實(shí)際速度賦值 SpeedError = DesiredSpeed ActualSpeed。//速度差 =設(shè)定速度 實(shí)際速度 SpeedProportional = (int)(((long)Kps*(long)SpeedError) 15)。//計(jì)算比例速度 【精品文檔】世界上,成功的有兩種人,一種人是傻子,一種人是瘋子。傻子是會(huì)吃虧的人,瘋子是會(huì)行動(dòng)的人! SpeedIntegral = SpeedIntegral_n_1 + (int)(((long)Kis*(long)SpeedError) 15)。//計(jì)算積分速度 if (SpeedIntegral 0)//判斷積分速度是否小于零 SpeedIntegral = 0。//積分速度小于零賦值為零 else if (SpeedIntegral 32767)//判斷積分速度是否大于 32767 SpeedIntegral = 32767。//如果大于則積分速度賦值為 32767 SpeedIntegral_n_1 = SpeedIntegral。 DutyCycle = SpeedIntegral + SpeedProportional。 //重新計(jì)算得到的 占空比 if (DutyCycle 0)//判斷占空比是否小于零 DutyCycle = 0。//如果小于零則賦值為零 else if (DutyCycle 32767)//判斷占空比是否大于 32767 DutyCycle = 32767。//如果大于則占空比賦值為 32767 PDC1 = (int)(((long)(PTPER*2)*(long)DutyCycle) 15)。//賦值 PDC2 = PDC1。//裝載所有三個(gè) PWM PDC3 = PDC1。//占空比寄存器 = 0。//清除中斷標(biāo)志 } 延時(shí) 服務(wù)子程序 延時(shí)程序 (開環(huán)閉環(huán)都一樣) (1)它是 一般 的 1 ms 延遲程序,目的是 提供 1 毫秒 到 秒的延遲。 (2)當(dāng) N = 1,那么延遲 1 ms ;當(dāng) N = 65535,那么延遲 65,535 ms。 (3)注意 FCY 是 用于計(jì)算 的 。 (4)請(qǐng) 根據(jù)上文的定義做出相應(yīng)的修改來 計(jì)算出正確的 FCY。 void DelayNmSec(unsigned int N) { unsigned int j。 while(N) for(j=0。j MILLISEC。j++)。 【精品文檔】世界上,成功的有兩種人,一種人是傻子,一種人是瘋子。傻子是會(huì)吃虧的人,瘋子是會(huì)行動(dòng)的人! } 主函數(shù)代碼的通讀與解釋 該主程序控制初始化,按鍵以起動(dòng)和停止 直流無刷 電機(jī),電機(jī) 轉(zhuǎn)速 Proteus 會(huì)自動(dòng)顯示 。 int main(void) { CLKDIV = 0x30C0。 //設(shè)置 時(shí)鐘分頻比 PLLFBD = 0x0026。 //設(shè)置 PLL 反饋倍頻比 TRISB |= 0x000C。 // S3/S6 作為 RB2/RB3 的輸入 // 模擬引腳已經(jīng)在 ADC 初始化的子程序 _LOCK = 0。 //判斷標(biāo)志置 0 = 0x7。 //啟用 中斷 IC7 = 0x5。 //啟用 中斷 IC1 = 0x6。 //啟用 中斷 IC2 _LOCK = 1。 //判斷標(biāo)志置 1 InitADC10()。 //初始化 ADC 標(biāo)志部分 InitTMR1()。 //初始化 TMR1 1ms 周期 ISR InitTMR3()。 //初始化 TMR3 是一個(gè)一直在走的時(shí)鐘 timer3avg = 0。 //清定時(shí)次數(shù)計(jì)數(shù)值 InitMCPWM()。 //初始化 PWM@39Hz InitIC()。 //初始化霍爾傳感器輸入 到 ISR 上 = 0。 // 初始化 CW 方向 unsigned int i。 for(i=0。i1000。i++)。 ResetPowerModule()。 //調(diào)用速度精準(zhǔn)函數(shù) while(1) { while(S3) // 等待按開始鍵 { 【精品文檔】世界上,成功的有兩種人,一種人是傻子,一種人是瘋子。傻子是會(huì)吃虧的人,瘋子是會(huì)行動(dòng)的人! if (!S6) // 檢查方向變化 { while (!S6) // 等待直到釋放按鍵 DelayNmSec(10)。 //延時(shí) 10ms //通過端口 B讀來自霍爾位置傳感器的信號(hào)(反向) ^= 1。 } Nop()。 //空操作 ,沒有任何操作數(shù) ,從而避免 了 出現(xiàn)意外執(zhí)行這一區(qū)內(nèi)代碼 情況 的 可能 } while (!S3) // 等待直到釋放按鍵 DelayNmSec(10)。//延時(shí) 10ms // 讀 PORTD 霍爾位置傳感器(正向) HallValue = (unsigned int)((PORTB 8) amp。 0x0007)。// 讀霍爾值 (右移以獲得值 2?? 6)屏蔽其它位,保留 RB RB6 和 RB7 if ()//方向判斷 OVDCON = StateTableFwd[HallValue]。//(正轉(zhuǎn)) 裝載改寫控制寄存器 Else OVDCON = StateTableRev[HallValue]。//(反轉(zhuǎn))作用同上 PWMCON1 = 0x0777。 // 使 PWM 輸出 = 1。 // 將 電機(jī)啟動(dòng) 標(biāo)志置 1 = 1。 // 啟動(dòng) timer3 polecount = 1。 //轉(zhuǎn)過的電級(jí)數(shù)置 1 DelayNmSec(100)。 //調(diào)用延時(shí)函數(shù) ,延時(shí) 100ms ResetPowerModule()。 //傳輸 控制 PWM 輸出模塊 while () // 當(dāng)電機(jī)運(yùn)行時(shí) { if (!S3) // 如果未按下 S2 【精品文檔】世界上,成功的有兩種人,一種人是傻子,一種人是瘋子。傻子是會(huì)吃虧的人,瘋子是會(huì)行動(dòng)的人! { PWMCON1 = 0x0700。 // 禁用 PWM 輸出 OVDCON = 0x0000。 // 將 PWM 改寫為低電平 = 0。 // 復(fù)位運(yùn)行標(biāo)志 while (!S3) // 等待釋放按鍵 DelayNmSec(10)。 //延時(shí) 10ms } //while ()結(jié)束 Nop()。 //空操作 ,沒有任何操作數(shù) , 強(qiáng)制為一條 NOP 指令,從而避免了 出現(xiàn)意外執(zhí)行這一區(qū) 內(nèi)代碼 情況 的可能 }//while (1) 結(jié)束 } } 開環(huán)控制與閉環(huán)控制的設(shè)計(jì) 開環(huán)控制。 在 主程序的第一個(gè) 循環(huán) 中 ,MCPWM 將 會(huì) 讀取電位計(jì)并將其 值作為占空比插入 ,了 BLDC 電機(jī)的轉(zhuǎn)動(dòng)速度 由這個(gè)值決定 。 占空比 的 值 越大, 電機(jī)的電流越大 ,電機(jī)的轉(zhuǎn)速越高。如圖 410所示 直流 無刷 電機(jī)的轉(zhuǎn)速由電位計(jì)決定。 圖 410開環(huán)電壓控制模式 下面我們來介紹一下開環(huán)控制的一般流 程 。 首先是初始化 MCPWM、 ADC、端口以及 變化通知輸入 ,然后程序 要 一個(gè)激活信號(hào) 作為開始。按下 啟 動(dòng) 鍵 后,程序?qū)?會(huì) 讀 取霍爾傳感器 的值 ,根據(jù)讀到的霍爾值, 再 從表 StateTable 中讀取 相應(yīng)的值,將這個(gè)值寫入 OVDCON(用于輸出收寫) 以后, 直流 無刷 電機(jī)開始轉(zhuǎn)動(dòng),接著用電位計(jì) 來 設(shè)定速度給定,用給定值裝載 PDCx( PDC1: PWM 占空比寄存器 PDC2 : PWM 占空比寄存器 PDC3 ; PWM 占空比寄存器 3) 。 具體 的 流程 如圖 411所示。 【精品文檔】世界上,成功的有兩種人,一種人是傻子,一種人是瘋子。傻子是會(huì)吃虧的人,瘋子是會(huì)行動(dòng)的人! 圖 411開環(huán)控制流程圖 在轉(zhuǎn)子旋轉(zhuǎn)時(shí) ,直流 無刷 電機(jī)轉(zhuǎn)子的位置發(fā)生 了 變化 ,從而使轉(zhuǎn)子進(jìn)入不同的區(qū)間 ,我們用 IC 中斷表示轉(zhuǎn)子進(jìn)入每個(gè)新 的 位置。為了保證 直流 無刷 電機(jī) 的轉(zhuǎn)子 能夠 在正確的區(qū)間對(duì)應(yīng)正確的繞組通電,因而要 在 IC 中斷程序中,讀 取 霍爾傳感器的值,并根據(jù) 這個(gè)值查 StateTable 表找到一個(gè)狀態(tài)值,并將 這個(gè) 值寫入 OVDCON 寄存器 (此寄存器的作用是用于輸出收寫) 。 IC中斷流程圖如圖 412 所示 : 圖 412 IC中斷流程圖 【精品文檔】世界上,成功的有兩種人,一種人是傻子,一種人是瘋子。傻子是會(huì)吃虧的人,瘋子是會(huì)行動(dòng)的人! 與 直流 無刷 電機(jī) 開環(huán)控制使用電位計(jì)設(shè)定速度給定不 一樣 ,在 直流無刷電機(jī)的 閉環(huán)控制當(dāng)中 ,對(duì)速度進(jìn)行了比例和積分控制 (PID 控制策略 ),其 使用 TMR3 作為定時(shí)器來選取 一個(gè)完整的電周期來測量實(shí)際速度。 下面, 圖 413 是 閉環(huán)電壓控制 模式 。 緊接著 圖 413 是 閉環(huán)控制 流程圖。 圖 413閉環(huán)電壓控制模式 圖 414閉環(huán)控制流程圖 值 控制代碼的設(shè)計(jì)與解釋 門限 值 控制在 汽車 工業(yè)生產(chǎn)設(shè)計(jì)當(dāng)中有著廣泛的應(yīng)用, 現(xiàn)在我 們 也采用門限 值 控制策略來對(duì)直流無刷電機(jī)進(jìn)行仿真控制 ,根據(jù)門限 值 控 制的原理來設(shè)計(jì)直流無刷電機(jī)的 C語言代碼 。 門限 值 控制的 C語言 代碼如下面所示 : 【精品文檔】世界上,成功的有兩種人,一種人是傻子,一種人是瘋子。傻子是會(huì)吃虧的人,瘋子是會(huì)行動(dòng)的人! 圖 415門限 值 控制流程圖 void __attribute__((interrupt, no_auto_psv)) _T1Interrupt (void) { ActualSpeed = SPEEDMULT/timer3avg。//給實(shí)際速度賦值 Minus = 0。//判斷標(biāo)志 置零 if (ActualSpeed DesiredSpeed)//實(shí)際速度與期望速度的比較 SpeedError = ActualSpeed DesiredSpeed。//保證速度差為正值 else { SpeedError = DesiredSpeed ActualSpeed。 //設(shè)定速度減去實(shí)際速度得到速度差 Minus = 1。//判斷標(biāo)志 置 1 } if (Minus)//判斷 DutyCycle = SpeedError + DutyCycle。//重新計(jì)算占空比 else DutyCycle = DutyCycle SpeedError。//兩種不同情況下的占空比 【精品文檔】世界上,成功的有兩種人,一種人是傻子,一種人是瘋子。傻子是會(huì)吃虧的人,瘋子是會(huì)行動(dòng)的人! if (DutyC
點(diǎn)擊復(fù)制文檔內(nèi)容
試題試卷相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1