如何編寫51微控制器PWM調速C語言程式

發布 科技 2024-03-17
9個回答
  1. 匿名使用者2024-02-06

    使用兩個定時器的方法是使用定時器t0控制頻率,定時器t1控制占空比。 一般的程式設計思路如下:t0定時器中斷使i0埠輸出為高電平,在定時器t0的中斷中啟動定時器t1,此t1使io口輸出為低電平,因此改變定時器t0的初始值可以改變頻率,改變定時器t1的初始值可以改變占空比。

    使用定時器(如定時器t0)時,首先需要確定PWM的週期t和占空比d,確定這些後,就可以用定時器生成乙個時間參考T,例如定時器溢位nn次的時間就是PWM為高電平的時間,則d*t=n*t, 同樣,您可以找出 PWM 的低電平時間需要多少個時間基準 n'。

    由於我們生成的PWM週期為1 ms(1000 Hz),因此我們可以將中斷時間基準設定為1 ms,然後中斷100次至1 ms。 在 interrupt 子程式中,可以設定乙個變數,比如 time,在 interrupt 子程式中,有三個重要的語句:1.當 time>=100 時,時間被清除為零(此語句保證頻率為 1000Hz),2.當時間> n(n 應在 0 到 100 之間變化)時,讓單片輸出的相應 I O 埠為高電平,當。

  2. 匿名使用者2024-02-05

    提供思路:定義乙個靜態變數,程式每次進入定時器的中斷功能時都會判斷占空比是否滿足要求,並不斷累積變數值,直到滿足條件為止,使輸出PWM波的引腳電平反轉。

    這有點囉嗦,我希望它有所幫助。

  3. 匿名使用者2024-02-04

    1.使用定時器+程式設計。

    該系列微控制器不具備PWM輸出功能,可採用定時器和軟體進行輸出。 對於不需要精度的場合,它非常實用。

    3.思路:定義乙個靜態變數,程式每次進入定時器的中斷功能時都會判斷占空比是否滿足要求,並不斷累積變數值,直到滿足條件為止,使輸出PWM波的引腳電平反轉。

    4. 詳情請參考。

  4. 匿名使用者2024-02-03

    使用定時器中斷來控制 IO 埠的輸出。

    設PWM為固定週期T,其中高電平週期T1和低電平週期T0,T=T1+T0。

    週期定時器分別中斷兩次,分別為 t1 和 t0,增加或減少 t1,使 t0=t-t1,即改變輸出占空比。

  5. 匿名使用者2024-02-02

    將計時器設定為 20 毫秒週期,然後讓自己設定這些變數在計時器達到這些點時依次更改。 然後根據你自己的變數,你可以支付輸出埠。 看起來像舵機。

    看完你問的內容後,原來四條道路中的每一條都會產生不斷變化的波形。 這很容易做到。 這些波形可以通過計算統一成乙個迴圈,比如一開始到達,讓固定值被否定,然後加去再否定,再加去再否定。

    然後我一直這樣寫其中的一些。

    還有一種方法可以更改第乙個PWM的設定值。 例如,陣列中總共有 5 個設定值,它們代表您設定的高電平時間,並依次替換第乙個計時器中的中檔時間。

    當然,前兩個幾乎相同,但還有另一種擴充套件方式:使用兩個計時器並將它們與時間匹配。 當然,51且不說微控制器的精度,也不確定能不能達標,乙個計時器中斷,另乙個就得停下來。。

    順便說一句,我個人覺得51微控制器沒有乙個好的PWM模組,所以把PWM程式寫出來,別的都沒辦法。建議使用帶有EPWM模組的MCU,直接呼叫EPWM和EPWM中斷,以節省CPU資源並編寫大量程式。

  6. 匿名使用者2024-02-01

    你用 82c54 擴充套件! 精度和頻率範圍適合您的要求,並且已經用這款+51微控制器實現了一些三軸控制系統! 程式在我回答的問題中,這個程式其實已經除錯過了,可以直接使用!

  7. 匿名使用者2024-01-31

    很多 51 都帶有 PWM,只要你的 PWM 準確,你一定可以實現它。

    標準 51 也可以用帶定時器的軟體實現,如果你的指標不高也沒問題。

  8. 匿名使用者2024-01-30

    你一定能夠理解這個程式的每一句話,不需要給你新增注釋,告訴你PWM的原理,通過與程式的比較,你就會理解它。

    你想用51來產生PWM來控制LED,首先需要確定PWM的週期T和占空比D,確定這些之後,就可以用定時器生成乙個時間參考T,比如定時器溢位n次的時間就是PWM高電平的時間, 則 D*T = N*T,同樣,您可以找出 PWM 低電平時間需要多少個時間基準測試 N'

    然後,您可以根據您設定的時間基線編寫程式。

    t 初始化定時器的分配值,然後開啟定時器,定義乙個標誌位,根據標誌的狀態決定輸出是高還是低,假設當 flag=1 時輸出為高電平,使用乙個變數記錄定時器中斷次數,讓記錄每次中斷次數的變數 +1, 並判斷該變數的值是否已達到中斷程式中。

    n 如果指示高電平的時間足夠,則將標誌改為 0,輸出低電平,並將中斷變數的值記錄為零,每次中斷仍為 +1,並根據 flag=0 的情況跳轉判斷記錄的變數的值是否達到。

    n'如果到了,則表示PWM的低電平就足夠了,然後更改flag=1,將輸出更改為高電平,並將變數的次數記錄為零,重新開始,依此類推,得到你想要的PWM波形。

  9. 匿名使用者2024-01-29

    1、“如果微控制器恆溫能使溫度達到預定值停止加熱,低加熱,用溫度感測器反饋,那麼是不是自動控制”你這是乙個控制系統,但效果會很差,特別是對於這種大慣量系統的溫度控制,要達到預定值停止加熱, 但是由於慣性,溫度肯定會繼續上公升,當電爐燒開水時,水被燒開,斷電後水會沸騰一段時間(煮沸是非常耗能的, 可以看出,如果加熱封口溫度公升高得更嚴重, 您也可以用溫度計自己嘗試);“如果它很低,就加熱它”與茄子的失敗者是一樣的原理。 如果系統對控制精度有要求,你肯定達不到要求。 PID是一種控制演算法,與其他控制演算法相比,它是最簡單的。

    PID可以在溫度即將達到設定值時降低加熱功率,使溫公升速度較慢,最終穩定在設定值。 如果您使用直接控制,溫度將在設定點上下振盪,並且永遠不會在設定點停止。

    2、一般控制系統需要增加反饋,形成閉環控制系統,也有開環控制系統。 例如,開環控制系統就是在加熱時提前計算出大約需要的熱量,然後考慮環境影響,計算加熱時間,然後根據自己的時間控制加熱系統。 你認為這樣的系統會穩定工作嗎?

    環境略有變化! 開環控制系統容易受到環境影響; 閉環控制系統更加穩定,可以使用1L水,2L水,500W電能,也可以使用1000W電爐,這就是閉環的優勢。

    因此,大多數控制系統都是閉環的,很少單獨使用開環,即使使用時也存在閉環。 開環其實是有優點的,開環在控制系統中叫做前饋(對應反饋),比如你系統中的電源電壓公升高,加熱速度肯定會變快,如果你對電源電壓進行取樣,將取樣結果輸入到閉環中,對閉環做輕微的修正, 控制精度會更好,這是開環的優勢,它先進,可以預測結果(根據地源電壓的增加,可以知道需要降低輸出功率)。

    綜上所述,您應該了解反饋是必需的(前饋也是必需的,但不是必需的),並且 PID 不能被替換(除非您使用其他更複雜的控制演算法)。

相關回答
16個回答2024-03-17

定時中斷,外部中斷?

5個回答2024-03-17

8086屬於微處理器(MPU),是一種微處理器。 >>>More

4個回答2024-03-17

MCU C語言程式設計入門課程難不多,說起來不好,首先要了解的是學習MCU C語言時要明白這兩樣東西是什麼? 微控制器的入門程式設計主要是學習C語言,其次是電路和程式語言。 >>>More

20個回答2024-03-17

這可以通過 78xx 系列的 3 端晶元來完成。 外圍電路非常簡單,無需使用微控制器。 如果做恆流源,電流可調,可以考慮微控制器+78xx(如)。

5個回答2024-03-17

對於如何學習微控制器,我覺得還是需要掌握它的硬體、儲存結構,組裝必須熟練,因為介紹組裝對硬體很有幫助和了解,如果你學了微控制器,再學習其他的,比如arm,這個時候你只能熟悉組裝, 但是第一次學習微控制器,彙編,一定要熟練,我的意思是一開始不要用c寫程式,用sinks寫,寫可以10到20個彙編器,你的彙編會更上一層樓,以後你會用C進行開發,你會看到用堅實的彙編基礎優化C是多麼的舒服。關於微控制器的研究,我認為有必要: >>>More