• slider image 442
  • slider image 497
  • slider image 498
  • slider image 499
  • slider image 500
  • slider image 502
:::

論壇索引


Board index » All Posts




Re: PIC24FJ128GB106 PWM頻率問題
新會員
新會員


非常感謝您的回覆
當初在看到教育光碟的時候想說dspic30不適用於我這顆pic24的晶片,所以沒有讀到這部分。
我目前是照著mcc設定為Edge-Aligned PWM mode設定如附圖

您提到的方式我會再研究的,謝謝。

Attach file:



jpg  oc1.jpg (71.42 KB)
78057_5fc47184ea3bb.jpg 582X737 px

發表於: 2020/11/30 12:14
頂部


Re: ATWINC3400
管理員
管理員


Hi Anthony,

The reference design on our ATWINC3400-Xplained EVB should use an external oscillator to supply 32.768K for Bluetooth workable.
https://www.microchip.com/developmentt ... ls/PartNo/ATWINC3400-XPRO
We suggest not to remove it for your first run design to avoid any side effect we not proved.

In our EVB design, we reserved a 'NM R116' could supply 32.768K clock from MCU for alternate.
縮圖
If you want use the clock from MCU please do below test on your board.
1. Please do not parallel connect or use a buffer 74lvc04 to wire XOUT32 for clock to WINC3400.
2. If you want the 32.768K Output from SAME51, Please follow below example to output the 32K from GCLK output pin PA17 PB17 of SAME51J20A
A) Enable external 32K crystall for clock source of GCLK3 to get the 32K clock.
縮圖
B) The GCLK could configure to work while sleeping mode.
縮圖
C) Click on [GCLK I/O Configuration] to configure the GCLK3 to output clock.
縮圖
D) Enable the output pin PA17 or PB17 of GCLK3 output
縮圖

Attach file:



jpg  SAME51_32K_GLCK.jpg (174.60 KB)
67979_5fc46eb614d06.jpg 1321X307 px

jpg  SAME51_GLCK.jpg (92.10 KB)
67979_5fc46ede39887.jpg 551X384 px

jpg  WINC3400-RTC_CLK.jpg (169.01 KB)
67979_5fc46ef6583d2.jpg 733X646 px

jpg  SAME51_GCLK_Output.jpg (64.11 KB)
67979_5fc46f0c1a65d.jpg 489X327 px

jpg  SAME51_GCLK_PIN.jpg (110.08 KB)
67979_5fc46f1b88058.jpg 664X302 px

發表於: 2020/11/30 12:02
頂部


Re: PIC24FJ128GB106 PWM頻率問題
版主
版主


看起來你的 PWM 應該是使用 Compare Match Mode 來產生的。在此模式下,有些暫存器的設定值是有限制的,這需要遵守一個設定的原則: PR2 >= OCxRS>OCxR
PR2 是 Timer2 的計時器提供了 PWM 的週期,改變 PR2 的值就可以改變 PWM 的頻率。
一般常使用的 PWM Mode 是設定成 "Continuous Output Pulse mode";在此模式下產生的是連續的 PWM 波形,PR2 從 0 往上計數,PR2 == OCxR 時期 PWM 的輸出為 Hi;當 PR2 在往上計數到 == OCxRS 時,PWM 輸出便 Low;此動作會一直循環而產生 PWM 的輸出。調整 PR2 可以改變 PWM 週期,變更 OCxR 及 OCxRS 則可改變 Duty。

關於此動作說明可以到教育訓練光碟下載 "dsPICMOD dsPIC30F Module Training" 裡面有一 "9. Output Comparator" 的教材面就有說明。

Compare Match Mode 的輸出參考一下貼圖。

Attach file:



jpg  擷取.JPG (56.67 KB)
16_5fc46889d031f.jpg 603X461 px

發表於: 2020/11/30 11:29
頂部


Re: PIC24FJ128GB106 PWM頻率問題
新會員
新會員


您好,感謝回覆
我使用的是mcc的程式生成,以下是相關code

oc1的設定。
參照:
#include "oc1.h"

/** OC Mode.
  @Summary
    Defines the OC Mode.
  @Description
    This data type defines the OC Mode of operation.
*/

static uint16_t         gOC1Mode;

/**
  Section: Driver Interface
*/


void OC1_Initialize (void)
{
    
// ENFLT0 disabled; OCSIDL disabled; OCM Edge-Aligned PWM mode; OCFLT0 disabled; OCTSEL TMR2; TRIGMODE Only Software; 
    
OC1CON1 0x06;
    
// SYNCSEL TMR2; TRIGSTAT disabled; OCINV disabled; OCTRIG Trigger; OC32 disabled; FLTOUT disabled; OCTRIS disabled; FLTMD Cycle; FLTTRIEN disabled; 
    
OC1CON2 0xCC;
    
// CMP2B 100; 
    
OC1RS 1000;
    
// CMP1B 30; 
    
OC1R 300;
    
// OC1TMR 0; 
    
OC1TMR 0x00;
    
gOC1Mode OC1CON1bits.OCM;
    
IFS0bits.OC1IF false;
    
IEC0bits.OC1IE true;
}

void __attribute__ ((weak)) OC1_CallBack(void)
{
    
// Add your custom callback code here
}

void __attribute__ ( ( interruptno_auto_psv ) ) _ISR _OC1Interruptvoid )
{    
    if(
IFS0bits.OC1IF)
    {
        
// OC1 callback function 
        
OC1_CallBack();
        
IFS0bits.OC1IF 0;
    }
}


void OC1_Startvoid )
{
    
OC1CON1bits.OCM gOC1Mode;
}


void OC1_Stopvoid )
{
    
OC1CON1bits.OCM 0;
}

void OC1_SecondaryValueSetuint16_t secVal )
{
   
    
OC1RS secVal;
}


void OC1_PrimaryValueSetuint16_t priVal )
{
   
    
OC1R priVal;
}

bool OC1_IsCompareCycleCompletevoid )
{
    return(
IFS0bits.OC1IF);
}


bool OC1_FaultStatusGetOC1_FAULTS faultNum )
{
    
bool status;
    
/* Return the status of the fault condition */
   
    
switch(faultNum)
    { 
        case 
OC1_FAULT0:
            
status OC1CON1bits.OCFLT0;
            break;
        default :
            break;

    }
    return(
status);
}


void OC1_FaultStatusClearOC1_FAULTS faultNum )
{
    
    switch(
faultNum)
    { 
        case 
OC1_FAULT0:
            
OC1CON1bits.OCFLT0 0;
                break;
        default :
                break;
    }    
}


void OC1_ManualTriggerSetvoid )
{
    
OC1CON2bits.TRIGSTATtrue
}

bool OC1_TriggerStatusGetvoid )
{
    return( 
OC1CON2bits.TRIGSTAT );
}


void OC1_TriggerStatusClearvoid )
{
    
/* Clears the trigger status */
    
OC1CON2bits.TRIGSTAT 0;
}

/**
 End of File
*/


timer2的設定。

參照:
#include <stdio.h>
#include "tmr2.h"

/**
 Section: File specific functions
*/

/**
  Section: Data Type Definitions
*/

/** TMR Driver Hardware Instance Object

  @Summary
    Defines the object required for the maintenance of the hardware instance.

  @Description
    This defines the object required for the maintenance of the hardware
    instance. This object exists once per hardware instance of the peripheral.

  Remarks:
    None.
*/

typedef struct _TMR_OBJ_STRUCT
{
    
/* Timer Elapsed */
    
volatile bool           timerElapsed;
    
/*Software Counter value*/
    
volatile uint8_t        count;

TMR_OBJ;

static 
TMR_OBJ tmr2_obj;

/**
  Section: Driver Interface
*/

void TMR2_Initialize (void)
{
    
//TMR2 0; 
    
TMR2 0x00;
    
//Period = 0.01 s; Frequency = 8000000 Hz; PR2 9999; 
    
PR2 0x270F;
    
//TCKPS 1:8; T32 16 Bit; TON enabled; TSIDL disabled; TCS FOSC/2; TGATE disabled; 
    
T2CON 0x8010;

    
    
tmr2_obj.timerElapsed false;

}


void TMR2_Tasks_16BitOperationvoid )
{
    
/* Check if the Timer Interrupt/Status is set */
    
if(IFS0bits.T2IF)
    {
        
tmr2_obj.count++;
        
tmr2_obj.timerElapsed true;
        
IFS0bits.T2IF false;
    }
}

void TMR2_Period16BitSetuint16_t value )
{
    
/* Update the counter values */
    
PR2 value;
    
/* Reset the status information */
    
tmr2_obj.timerElapsed false;
}

uint16_t TMR2_Period16BitGetvoid )
{
    return( 
PR2 );
}

void TMR2_Counter16BitSet uint16_t value )
{
    
/* Update the counter values */
    
TMR2 value;
    
/* Reset the status information */
    
tmr2_obj.timerElapsed false;
}

uint16_t TMR2_Counter16BitGetvoid )
{
    return( 
TMR2 );
}




void TMR2_Startvoid )
{
    
/* Reset the status information */
    
tmr2_obj.timerElapsed false;


    
/* Start the Timer */
    
T2CONbits.TON 1;
}

void TMR2_Stopvoid )
{
    
/* Stop the Timer */
    
T2CONbits.TON false;

}

bool TMR2_GetElapsedThenClear(void)
{
    
bool status;
    
    
status tmr2_obj.timerElapsed;

    if(
status == true)
    {
        
tmr2_obj.timerElapsed false;
    }
    return 
status;
}

int TMR2_SoftwareCounterGet(void)
{
    return 
tmr2_obj.count;
}

void TMR2_SoftwareCounterClear(void)
{
    
tmr2_obj.count 0
}

/**
 End of File
*/


原本想放上截圖但圖片無法插入,以上是mcc生成的code

謝謝。

發表於: 2020/11/30 11:07
頂部


Re: PIC24FJ128GB106 PWM頻率問題
管理員
管理員


OCxRS/OCxR 在PWM模式下,是Dual Buffer的架構,主要是避免突然改變數值造成當前周期的PWM工作週期異常的狀態。
以上是多說了。
簡單的說,OCxRS/OCxR就是改變周期的,PRx則是改變頻率的。
如果動作不正常就是操作上有錯誤,是否可以把你的程式碼上傳來看看,或許能找到問題點。

發表於: 2020/11/30 9:45
頂部


PIC24FJ128GB106 PWM頻率問題
新會員
新會員


各位前輩好,小弟目前剛碰PIC24的晶片,以前也沒有過相關經驗,還請各位前輩多多賜教

我目前正在製作PWM,用的是PIC24FJ128GB106這塊晶片,使用MPLAB X IDE內的MCC撰寫程式

我上網查資料以及看了datasheet後有些地方一直不了解。

根據datasheet中pwm的頻率公式是:PWM Period = [(PRy) + 1] • TCY • (Timer Prescale Value)
裡面說明與PRy有關係。
但是測試後發現幾個問題:
1、我在調整PWM的DUTY時更動OCxRS OCxR 這兩個暫存器時竟然會連帶影響到PWM的頻率
2、根據原理,我調整PR2(我使用TIMER2)時並不會改變PWM的頻率
3、根據理論,當我的PR2+1我想請問要如何才能正確的調整PWM的頻率?
感謝

發表於: 2020/11/29 20:56
頂部


Re: ATWINC3400
初級會員
初級會員


if I use XIN32/XOUT32 of ATSAME51N19A to connect a 32.768khz crystal, can I connect the XOUT32 to RTC_CLK of ATWINC3400 to save the component count?

do I need to add a buffer like 74lvc04 to reshape the waveform?

or I can configure one GPIO to output the 32.768khz? If the MCU is put into sleep mode, is the output still running?

PS. suppose the ATWINC need a free running 32.768khz in power down mode(CHIP_EN=LOW)

Anthony

發表於: 2020/11/28 12:01
best regards,
Anthony
頂部


Re: dspic33ch PGXCAP問題
新會員
新會員


你好,我是用PWM模組裡面,有一個PCI功能,有外部訊上升緣RESET我PWM的timer,
是即時運作開關訊號,偵測開關頻率需使用PGXCAP功能,
不用SCCP模組Capture功能是因為會有兩個中斷,
PWM中斷和Capture中斷互搶可能性,所以沒用SCCP的Capture功能

發表於: 2020/11/27 17:15
頂部


Re: dspic33ch PGXCAP問題
版主
版主


有點困惑? 為什這要抓外部頻率不是用 Capture Module 來量測頻率 (10.0 CAPTURE/COMPARE/PWM/
TIMER MODULES (SCCP) )。

我也不懂為何 PWM 可以量測頻率?

發表於: 2020/11/27 13:55
頂部


Re: PIC16F18855的CIP功能,可由軟體來觸發嗎?
高級會員
高級會員


了解,謝謝版主

發表於: 2020/11/27 11:03
頂部



« 1 ... 219 220 221 (222) 223 224 225 ... 7525 »



:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------