對工具列按右鍵 > 工具列(T) > 新增工具列(N)
在資料夾列打入 C:\Windows\System32\ctfmon.exe
或是到資料夾中直接找到 ctfmon 開啟。
就會在工具列多出語言列了
2015年12月21日 星期一
2015年12月20日 星期日
MPC4812 DAC晶片 Microchip Mixer 混波器 (SPI)
MCP4812簡介
10 bits 的 DAC chip,支援SPI通訊協定的傳輸; 使用 Microchip 提供的API 將 ADC 已經儲存在 dsPIC Register 內的 Digital Value 經由 SPI 傳送到 DAC 的 Register 內輸出。
最高時脈支援到 20 MHz
雙通道,10bit 解析度的電壓輸出,數位轉類比
• Rail-to-Rail Output
• SPI Interface with 20 MHz Clock Support
支援 SPI 到 20MHz 的時脈
• Simultaneous Latching of the Dual DACs with LDAC pin
LDAC腳位可以對DAC進行鎖存
• Fast Settling Time of 4.5 μs
• Selectable Unity or 2x Gain Output
• 2.048V Internal Voltage Reference
• 50ppm/°C VREF Temperature Coefficient
• 2.7V to 5.5V Single-Supply Operation
• Extended Temperature Range: -40°C to +125°C
VDD是供應電源的腳位,正電壓可從 2.7V到5.5V
VSS類比腳位的接地要盡量避免雜訊,使DAC有較好的表現
可以使用適當的旁路(bypass)電容接地,避免高頻的雜訊
10 bits 的 DAC chip,支援SPI通訊協定的傳輸; 使用 Microchip 提供的API 將 ADC 已經儲存在 dsPIC Register 內的 Digital Value 經由 SPI 傳送到 DAC 的 Register 內輸出。
最高時脈支援到 20 MHz
Features
• MCP4812: Dual 10-Bit Voltage Output DAC雙通道,10bit 解析度的電壓輸出,數位轉類比
• Rail-to-Rail Output
• SPI Interface with 20 MHz Clock Support
支援 SPI 到 20MHz 的時脈
• Simultaneous Latching of the Dual DACs with LDAC pin
LDAC腳位可以對DAC進行鎖存
• Fast Settling Time of 4.5 μs
• Selectable Unity or 2x Gain Output
• 2.048V Internal Voltage Reference
• 50ppm/°C VREF Temperature Coefficient
• 2.7V to 5.5V Single-Supply Operation
• Extended Temperature Range: -40°C to +125°C
Package Types
腳位圖,將MCU dsPIC 設定好 SPI 參數並且enable 連線到,有 SCK/SDO,做DAC只需要給他輸入就好了,所以MCU那端不需要 SDI。
MCP4812 Block Diagram
可以看到內部的 register , Data 從 SDI進入以後到 input Register , 經過 LDAC 鎖存控制才能到下一層 DAC Register,經過參考電壓轉換到該電壓準位,經由Output OP AMP 輸出。
腳位描述
Supply Voltage Pins (VDD, VSS)
VDD是供應電源的腳位,正電壓可從 2.7V到5.5V
VSS類比腳位的接地要盡量避免雜訊,使DAC有較好的表現
可以使用適當的旁路(bypass)電容接地,避免高頻的雜訊
Chip Select (CS)
選擇晶片的腳位Serial Clock Input (SCK)
SPI 的序列時脈輸入腳位
Serial Data Input (SDI)
SPI 的序列資料輸入腳位
Latch DAC Input (LDAC)
DAC的資料鎖存,用來同步DAC資料的輸出,當此腳位致能時,才能輸出DAC
使用上可以 always enable
Analog Outputs (VOUTA, VOUTB)
類比輸出的腳位,根據控制位元的設置和參考電壓會輸出DAC的電壓訊號ANALOG OUTPUT VOLTAGE (VOUT)
WRITE COMMAND REGISTER FOR MCP4812 (10-BIT DAC)
Write Command for MCP4812 (10-bit DAC)
使用 SPI 時,需要注意設定SCK Clock的模式,需要知道 Slave的模式為何,Master/Slave 的 Clock 的模式相同兩邊才能通訊。
SPI 傳送每個 Frame ,第一個 character 的 MSB 四個 bits 用來當 configuration。e.g. 0001= A通道,兩倍輸出,運作狀態。反之 Bit12為0時,為 output shutdown。
2015年12月19日 星期六
dsPIC 33F系列DSP 使用內建 ADC輸入模組 透過 SPI 協定傳輸至 MCP4812 DAC 晶片輸出
開發目標:
使用dsPIC33F 的 ADC(模數轉換),輸入的訊號源用訊號產生器產生一個 SINE 的電壓波形,在電路板上經連線輸入到 dsPIC33F chip 的ADC Pair0 (AN0, AN1) 輸入 pin 腳在 IC 的內部進行取樣,在 dsPIC 的ADC模塊裡面將原來的電壓訊號經過取樣保持和轉換後將輸入的電壓取樣成轉化 digital (數位)的值(10 bits)位元數為十,再將此數值儲存在 dsPIC33F 內部的 Register (16 bits) 中。之後便可從記憶體中取出此數值。
將 dsPIC33F ADCBUF 中的取樣值利用 SPI 傳輸協定 (SPI 為晶片上常見的通訊協定) 將資料傳送到另一個 DAC的晶片(MCP4812) ,在 DAC 的輸出端 pin 腳輸出電壓波形,此波形將還原成SINE 的電壓波形,解析度由暫存器內的數值決定。
將 dsPIC33F ADCBUF 中的取樣值利用 SPI 傳輸協定 (SPI 為晶片上常見的通訊協定) 將資料傳送到另一個 DAC的晶片(MCP4812) ,在 DAC 的輸出端 pin 腳輸出電壓波形,此波形將還原成SINE 的電壓波形,解析度由暫存器內的數值決定。
dsPIC Function Block Diagram
dsPIC 包含 MCU 大部分具備的功能,這裡用到 ADC 和 SPI 模組,ADC 搭配 Timer 做 trigger。
ADC Initialization 初始化設定
會用到的如 ADC存入的格式,FORM會有兩種:整數和分數。由於暫存器是16位元的,所以區分方式就用存在前後 10 bits 來做區分。整數就是存在後面(LSB)十個位元,分數的方式是以Q15的格式,然後存在高(MSB)十位元。
還有與 ADC 相關的時脈 (clock) 設定,選擇 converter 的時脈來源 (Clock Source) 和分頻,每次的取樣保持轉換過程,根據 datasheet 上的描述,要 14 個 ADC 的週期才會完成一次完整的取樣轉換。由此可知從時脈計算出來的轉換需要多少的時間可以完成,去調整取出 ADC 資料的頻率。
最後一項是 ADC Trigger Source 的設定,就是選擇由何種行為來觸發每次的 ADC 取樣,常用的如 PWM 波形, Timer, 除了用硬體的方式觸發也可以用軟體中斷來觸發。
void init_ADC(void){
ADCONbits.FORM = 0;//0為整數,1為分數
//選擇轉換成數字的格式
ADCONbits.EIE = 0; //Early Interrupt disabled
ADCONbits.ORDER = 0; //Convert even channel first
ADCONbits.SEQSAMP = 0; //Select simultaneous sampling
/*ADC的時脈*/
ADCONbits.ADCS = 5;
//ADC clock = FADC/6 = 120MHz / 6 = 20MHz
/* Tad = 1/ADC clock 轉換1次要 14*Tad = (ADC clock/14) */
// 控制 ADC clock 的分頻,由Tc 取得 主 clock後轉換成 ADC 的 clock 當TADC
/*使用an0取樣*/
ADPCFGbits.PCFG0 = 0; //select CH0 as analog pin
ADPCFGbits.PCFG1 = 0; //select CH1 as analog pin
/*中斷設置*/
IFS6bits.ADCP0IF = 0; //Clear ADC Pair 0 interrupt flag
IPC27bits.ADCP0IP = 5; //Set ADC Pair 0 interrupt priority
IEC6bits.ADCP0IE = 1; //Enable the ADC Pair 0 interrupt
ADSTATbits.P0RDY = 0; //Clear Pair 0 data ready bit
ADCPC0bits.IRQEN0 = 1; //Enable ADC Interrupt pair 0
/* 用Timer triggle ADC 觸發完才進行下次轉換*/
/*觸發源設置 Timer1 */
ADCPC0bits.TRGSRC0 = 12; //ADC Pair 0 triggered by Timer1
}
ADC Clock Source Select
figure 1. Auxiliary Clock GenerationFRCSEL / ENAPLL / SELACLK / APSTSCLR Control Bits
上述這些位元決定輔助時脈 (ACLK) 的來源和分頻,給出最後的時脈 (clock) 進入到 ADC模組使用後再分頻。
ACLKCONbits.FRCSEL = 1; // FRC provides input for Auxiliary PLL (x16)
ACLKCONbits.SELACLK = 1; // Auxiliary Ocillator provides clock source forADC
ACLKCONbits.APSTSCLR = 7; // Divide Auxiliary clock by 1
ACLKCONbits.ENAPLL = 1; // Enable Auxiliary PLL
Final Output ACLK to ADC:
ADC Aux Clock = 7.37*16/1 = 120 MHz
{
T1CONbits.TON=0;
T1CONbits.TSIDL=0 ;
T1CONbits.TGATE=0;
T1CONbits.TCKPS=0; //Timer1分頻選擇
T1CONbits.TCS=0; // Timer Clock Source Select bit,Internal clock (FOSC/2)
TMR1=0x00;
/*修改PR1*/
// 40M/250 = 160 kHz ; Triggle period time = 6.25us
PR1=248; //Timer interrupt=FCY/TCKPS/PRn+1
/* Timer interrupt setup */
IPC0bits.T1IP= 0x01;
IFS0bits.T1IF= 0;
IEC0bits.T1IE= 1;
}
根據下圖提供的資訊去設定系統要用的時脈來源 (Clock Source),選擇哪種振盪器 (Oscillator) 和有沒有鎖相迴路 (PLL) 倍頻,設定分頻,可以計算出最後的 Fcy 和 Fosc 。
根據上面兩張圖提供的資訊,選擇 system oscillator source ,設定 PLL的分頻的 M 和 N 值,及分頻的大小,計算出 Fcy 和 Fosc 。
_FOSCSEL(FNOSC_FRC); //Internal Fast RC (FRC) oscillator
_FOSC(FCKSM_CSECMD & OSCIOFNC_ON)
/* Clock Switching and Monitor */
//FCKSM_CSECMD : Clock switching is enabled, Fail-Safe Clock Monitor is Disabled
/* OSC2 Pin Function */
//OSCIOFNC_ON : OSC2 is general purpose digital I/O pin
PLLFBD=41; // M = PLLFBD + 2
CLKDIVbits.PLLPOST=0; // N1 = 2
CLKDIVbits.PLLPRE=0; // N2 = 2
最後 Fosc 除以2 即 Fcy 。
Final Fcy:
Fcy = (7.37*43/2/2)/2 = 40 M
TCKPS / TGATE / TCS
T1CONbits.TCKPS=0; //Timer1分頻選擇
T1CONbits.TGATE=0;
T1CONbits.TCS=0; // Timer Clock Source Select bit,Internal clock (FOSC/2)
ACLKCONbits.SELACLK = 1; // Auxiliary Ocillator provides clock source forADC
ACLKCONbits.APSTSCLR = 7; // Divide Auxiliary clock by 1
ACLKCONbits.ENAPLL = 1; // Enable Auxiliary PLL
Final Output ACLK to ADC:
ADC Aux Clock = 7.37*16/1 = 120 MHz
Timer1 Triggle setup
void init_Timer1(void){
T1CONbits.TON=0;
T1CONbits.TSIDL=0 ;
T1CONbits.TGATE=0;
T1CONbits.TCKPS=0; //Timer1分頻選擇
T1CONbits.TCS=0; // Timer Clock Source Select bit,Internal clock (FOSC/2)
TMR1=0x00;
/*修改PR1*/
// 40M/250 = 160 kHz ; Triggle period time = 6.25us
PR1=248; //Timer interrupt=FCY/TCKPS/PRn+1
/* Timer interrupt setup */
IPC0bits.T1IP= 0x01;
IFS0bits.T1IF= 0;
IEC0bits.T1IE= 1;
}
Fcy select source 系統頻率(FCY)的來源
FRC Oscillator / FRCCLK / FRCDIC / FRCDIV<2:0> / FRCDIVN
Source(Internal RC) / PLLPRE / PLLDIV / PLLPOST
根據上面兩張圖提供的資訊,選擇 system oscillator source ,設定 PLL的分頻的 M 和 N 值,及分頻的大小,計算出 Fcy 和 Fosc 。
_FOSCSEL(FNOSC_FRC); //Internal Fast RC (FRC) oscillator
_FOSC(FCKSM_CSECMD & OSCIOFNC_ON)
/* Clock Switching and Monitor */
//FCKSM_CSECMD : Clock switching is enabled, Fail-Safe Clock Monitor is Disabled
/* OSC2 Pin Function */
//OSCIOFNC_ON : OSC2 is general purpose digital I/O pin
PLLFBD=41; // M = PLLFBD + 2
CLKDIVbits.PLLPOST=0; // N1 = 2
CLKDIVbits.PLLPRE=0; // N2 = 2
最後 Fosc 除以2 即 Fcy 。
Final Fcy:
Fcy = (7.37*43/2/2)/2 = 40 M
Timer select source
新增說明文字 |
T1CONbits.TCKPS=0; //Timer1分頻選擇
T1CONbits.TGATE=0;
T1CONbits.TCS=0; // Timer Clock Source Select bit,Internal clock (FOSC/2)
ADC Calculate
取樣 / 保持過程
取樣轉換完成需要 14*Tad
/*ADC的時脈*/
ADCONbits.ADCS = 5;
//ADC clock = FADC/6 = 120MHz / 6 = 20MHz ; Tad = 0.05us
/* Tad = 1/ADC clock 轉換1次要 14*Tad = 0.7us ; 做完一次ADC的頻率 Fad = 1428 kHz */
SPI初始化
SPI 根據 Clock 的類型分成四種 Mode , 以正/負緣觸發和由高/低電位不同做區分。
設定 SPI 的 clock 由 Fcy 取得做分頻, dsPIC33F SPI 模組支援到 20 MHz。
SPI 傳輸的模式有分 8 bits 和 16 bits。
//here is the SPI setup for 20 MHz operation, Mode 0,0.
{
//PLLFBD = 41;
//CLKDIV = 0x0040; //將主clock 移到main前面作設置
SPI1CON1 = 0x013B; //0000 0001 0011 1011
/* 設置SPI的分頻 */
SPI1CON1bits.PPRE = 0b11; //Secondary Prescale bits
SPI1CON1bits.SPRE = 0b110; //Primary Prescale bits
/* Mode Select */
SPI1CON1bits.CKP = 0; //SPI1CON1<6>
SPI1CON1bits.CKE = 1; //SPI1CON1<8>
//Mode(0,0) : CKP=0; CKE=1
SPI1CON1bits.MODE16 = 0;
//Communication is word-wide 16 bits
//Communication is word-wide 16 bits
SPI1CON2 = 0x0000;
SPI1STAT = 0x8000;
}
void InitPorts(void)
{
TRISB = 0x0000; //RB全部設成輸出
/* 用 RB3 當 CS 位*/
TRISBbits.TRISB3 = 0; //RB3(11)
/* LDAC RB6 */
TRISBbits.TRISB6 = 0; //RB6(17)
/* 檢查ADC中斷用RB4腳位 */
TRISBbits.TRISB4 = 0; //RB4 as output
/* Mapping SPI output port*/
RPOR0 = 0x0700; //RP1(9):SDO1/RB1
RPOR1 = 0x0008; //RP2(10):SCK1/RB2
}
腳位初始化 SPI腳位 Mapping
void InitPorts(void){
TRISB = 0x0000; //RB全部設成輸出
/* 用 RB3 當 CS 位*/
TRISBbits.TRISB3 = 0; //RB3(11)
/* LDAC RB6 */
TRISBbits.TRISB6 = 0; //RB6(17)
/* 檢查ADC中斷用RB4腳位 */
TRISBbits.TRISB4 = 0; //RB4 as output
/* Mapping SPI output port*/
RPOR0 = 0x0700; //RP1(9):SDO1/RB1
RPOR1 = 0x0008; //RP2(10):SCK1/RB2
}
2015年12月18日 星期五
dsPIC 入門簡介 33F 系列 DSP
dsPIC33FJ06GS202
16 bit 的 數位信號微控制器支援 SMPS和其他 digtial power-converdsion功能,如 AC to DC 轉換、DC to DC 轉換,Power Factor Correction(PFC),Uninterruptible power supply (UPS) 不間斷電源供應、 Inverters 、 Embedded Power-Supply Controllers、Circuit Breakers 斷路器、Arc Fault Detection 電源弧故障檢測。
Features | |
CPUSystemPower Managed ModesHigh-Speed PWM Module FeaturesHigh-Speed Analog ComparatorHigh-Speed 10-Bit ADCPeripherals |
Block Diagram
可以看到有哪些的模組可以使用。
封裝類型
System Management:
dsPIC33F 初始化的系統設置 System
選擇 Fosc Oscillator Source,和有無PLL。
• Flexible Clock Options:
- External, crystal, resonator, internal RC
- Phase-Locked Loop (PLL) with 120 MHz VCO
- Primary Crystal Oscillator (OSC) in the range of 3 MHz to 40 MHz
- Internal Low-Power RC (LPRC) oscillator at a frequency of 32 kHz
- Internal Fast RC (FRC) oscillator at a frequency of 7.37 MHz
是否致能其他功能,如 watchdog timer 或 其他重置功能。
• Power-on Reset (POR)
• Brown-out Reset (BOR)
• Power-up Timer (PWRT)
• Oscillator Start-up Timer (OST)
• Watchdog Timer with its RC Oscillator
• Fail-Safe Clock Monitor (FSCM)
• Reset by Multiple Sources
線上序列編程,如 ICD3 或 kit3
• In-Circuit Serial Programming™ (ICSP™)
• Reference Oscillator Output
訂閱:
文章 (Atom)