目前共有3篇帖子。 字體大小:較小 - 100% (默認)▼  內容轉換:台灣正體▼
 
點擊 回復
666 2
【實驗】用電容器延緩I/O口的電平變化速度
一派掌門 二十級
1樓 發表于:2017-4-4 12:11
將一個電阻和一個電容串聯起來接地。最左邊為電阻,電阻的最左端接單片機的PC1口,並設為輸出。電阻和電容中間引出一根線,接到PC0口,設為輸入。
最初PC1輸出低電平,電容上沒有電荷,PC0為低電平。
此時立即將PC1設為高電平,電容開始充電,PC0仍為低電平,過了一段時間後才變為高電平。也就是說PC0比PC1變化慢。將PC1設置回低電平後,也要過一段時間PC0才能變回低電平。
【計時用的程序】
#include <stm32f10x.h>

#define MODE 0
// MODE: 0->六位小數, 1->4位小數

#if MODE
#define TPSC 7199 // 精度: 100us
#define N 4
#else
#define TPSC 71 // 精度: 1us
#define N 6
#endif

uint8_t seg8[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
uint16_t num = 0;

void delay(void)
{
    uint16_t i;
    for (i = 0; i < 20000; i++);
}

void ser_in(uint8_t data)
{
    uint8_t i;
    for (i = 0; i < 8; i++)
    {
        GPIOB->BRR = GPIO_BRR_BR9; // SCLK=PB9
        if (data & 0x80)
            GPIOB->BSRR = GPIO_BSRR_BS7; // DIO=PB7
        else
            GPIOB->BRR = GPIO_BRR_BR7;
        data <<= 1;
        GPIOB->BSRR = GPIO_BSRR_BS9;
    }
}

void par_out(void)
{
    GPIOB->BRR = GPIO_BRR_BR8; // RCLK=PB8
    GPIOB->BSRR = GPIO_BSRR_BS8;
}

void seg_scan(void)
{
    uint8_t i;
    uint16_t numbuf = num;
    for (i = 0; i <= N; i++)
    {
        if (i == N)
            ser_in(seg8[numbuf % 10] & 0x7f);
        else
            ser_in(seg8[numbuf % 10]);
        ser_in(1 << i);
        par_out();
        delay();
        numbuf /= 10;
    }
}

int main(void)
{
    RCC->APB1ENR = RCC_APB1ENR_TIM6EN;
    RCC->APB2ENR = RCC_APB2ENR_IOPBEN | RCC_APB2ENR_IOPCEN;
   
    GPIOB->CRH = 0x00300033;
    GPIOB->CRL = 0x30000033;
    GPIOC->CRL = 0x34;
   
    TIM6->ARR = TIM_ARR_ARR;
    TIM6->PSC = TPSC;
    TIM6->CR1 = TIM_CR1_URS | TIM_CR1_OPM;
    TIM6->EGR = TIM_EGR_UG;
   
    TIM6->CR1 |= TIM_CR1_CEN; // 開始計時
    GPIOC->BSRR = GPIO_BSRR_BS1; // 充電
    while ((GPIOC->IDR & GPIO_IDR_IDR0) == 0); // 等待輸出端的電平變為1
    num = TIM6->CNT; // 記錄時間
    GPIOC->BRR = GPIO_BRR_BR1; // 放電
   
    while (1)
        seg_scan();
}
一派掌門 二十級
2樓 發表于:2017-4-4 12:14
【實驗數據1】
當MODE=1,R=10kΩ, C=100μF時,測得的時間如下:
0.5678s
0.5205s
0.5612s
0.5546s
0.5789s
0.5342s
0.6569s
0.6559s
0.6058s
0.6509s
0.6646s
 
一派掌門 二十級
3樓 發表于:2017-4-4 12:15
【實驗數據2】
當MODE=0,R=4.7kΩ, C=0.1μF時,測得的時間如下:
0.000288s
0.000278s
0.000283s
0.000284s
0.000283s
0.000284s
0.000293s
0.000287s
 

回復帖子

內容:
用戶名: 您目前是匿名發表
驗證碼:
(快捷鍵:Ctrl+Enter)
 

本帖信息

點擊數:666 回複數:2
評論數: ?
作者:巨大八爪鱼
最後回復:巨大八爪鱼
最後回復時間:2017-4-4 12:15
 
©2010-2025 Purasbar Ver2.0
除非另有聲明,本站採用創用CC姓名標示-相同方式分享 3.0 Unported許可協議進行許可。