冰楓論壇

 找回密碼
 立即註冊
ads_sugarbook
搜索
查看: 494|回覆: 0
打印 上一主題 下一主題

[討論] PIC16F877A-I/P 智能吸塵器(變頻)

[複製鏈接]

2609

主題

0

好友

950

積分

高級會員

Rank: 4

UID
373967
帖子
7669
主題
2609
精華
0
積分
950
楓幣
8279
威望
929
存款
20000
贊助金額
0
推廣
0
GP
1205
閱讀權限
50
在線時間
415 小時
註冊時間
2023-1-12
最後登入
2024-5-31

2023端午節紀念勳章 2023中秋節紀念勳章 2023聖誕節紀念勳章

跳轉到指定樓層
1
發表於 2023-4-8 17:29:30 |只看該作者 |倒序瀏覽
程式碼,可以進行修改以符合你的具體需求:


#include <xc.h>

// 計數器計數上限值,調整此值可以調整變頻器的頻率
#define PERIOD 255

// 定義I/O腳位
#define MOTOR_PIN RC2
#define PWM_PIN RC1
#define BUTTON_PIN RB0

// 變頻器計數器初始值
uint8_t counter = 0;

void main(void) {
    // 設置I/O方向,MOTOR_PIN和PWM_PIN為輸出,BUTTON_PIN為輸入
    TRISC2 = 0;
    TRISC1 = 0;
    TRISB0 = 1;

    // 設置計數器模塊
    T2CON = 0b00000110; // 計數器工作在Timer mode,預分頻為1:16
    TMR2 = 0; // 計數器初值為0
    PR2 = PERIOD; // 計數器計數上限值

    // 設置PWM模塊
    CCP1CON = 0b00001100; // PWM mode,輸出PWM波形
    CCPR1L = 0; // 初值為0,佔空比為0%
    PIR1bits.TMR2IF = 0; // 清除計數器中斷標誌位
    T2CONbits.TMR2ON = 1; // 啟動計數器

    while(1) {
        if (BUTTON_PIN == 0) {
            // 按鈕被按下,開始運行吸塵器
            MOTOR_PIN = 1;
            CCPR1L = PERIOD / 2; // 設置佔空比為50%
        } else {
            // 按鈕未被按下,停止吸塵器
            MOTOR_PIN = 0;
            CCPR1L = 0; // 設置佔空比為0%
        }
    }
}
此代碼利用PIC16F877A的計數器模塊和PWM模塊實現了變頻控制吸塵器馬達的功能。

按鈕被按下時,馬達開始運轉,PWM波形的佔空比為50%,此時馬達轉速最高;按鈕未被按下時,馬達停止運轉,PWM波形的佔空比為0%,此時馬達停止運轉。

你可以根據具體需求調整計數器計數上限值PERIOD,以調整PWM波形的頻率,從而達到控制馬達轉速的目的。
收藏收藏0 推0 噓0


把本文推薦給朋友或其他網站上,每次被點擊增加您在本站積分: 1骰子
複製連結並發給好友,以賺取推廣點數
簡單兩步驟,註冊、分享網址,即可獲得獎勵! 一起推廣文章換商品、賺$$
高級模式
B Color Image Link Quote Code Smilies |上傳

廣告刊登意見回饋關於我們管群招募本站規範DMCA隱私權政策

Copyright © 2011-2024 冰楓論壇, All rights reserved

免責聲明:本網站是以即時上載留言的方式運作,本站對所有留言的真實性、完整性及立場等,不負任何法律責任。

而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。

小黑屋|手機版|冰楓論壇

GMT+8, 2024-5-31 18:36

回頂部