MSP5438A接25M晶振,33pf电容,晶振波形不稳定,有时候晶振停振,有时候程序运行一半就停了,但是P11口的特殊功能引脚还在输出波形,
25M是接多大的电容合适?我的波形接近正弦,但是偶尔出现几条重叠的波形,相位不同,
void MCU_Init(void) {
WDTCTL = WDTPW + WDTHOLD; P11DIR = BIT1+BIT2+ BIT0; // P11.1-2 to output direction
P11SEL |= BIT1+BIT2 + BIT0; // P11.1-2 to output SMCLK,MCLK
P5SEL |= 0x0C; // Port select XT2
UCSCTL6 &= ~XT2OFF; // Enable XT2
UCSCTL6 |= 0xc000; //crease to 18M
UCSCTL3 |= SELREF_2; // FLLref = REFO
UCSCTL4 |= SELA_2 + SELM_5; // ACLK=REFO,SMCLK=DCO,MCLK=DCO
do {
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG); // Clear XT2,XT1,DCO fault flags
SFRIFG1 &= ~OFIFG; // Clear fault flags
}while (SFRIFG1&OFIFG); // Test oscillator fault flag // expected frequency
UCSCTL4 |= SELS_5 + SELM_5; //UCSCTL5 |=DIVM__8; // SMCLK=MCLK=XT2
}
晶振换了几个,仿真时不能正常运行,有时候按好几次复位后能正常运行
Ling Zhu2:
不建议用示波器探头直接测晶振,可以通过430内部时钟输出功能来测~
Triton Zhang:
先科普:
单片机外部晶体与管脚之间的电容和电路板上的电容共同形成了晶体的负载电容,一般的晶体都会给出这个负载电容的参数。不用的晶体负载电容不一样,所以在选择接晶体两端的电容时要参考晶体的负载电容参数。在一般的应用中,可以直接用外接电容作为负载电容,在要求高的场合需要考虑电路板的寄生电容和IC的输入端管脚对地的电容。
负载电容的大小主要会影响到晶体的谐振频率,从而造成晶体波形的畸变。
回到问题:
一般来讲:
晶体的负载电容= C1*C2/(C1+C2) +Cpcb + Cic
其中C1,C2分别代表晶体两端的电容,
Cpcb代表PCB上的寄生电容,一般在3-5PF
Cic 表示IC管脚的电容
在一般应用中可以忽略Cpcb和Cic的影响。
以晶体负载电容为15PF为例子,C1和C2接25~28PF 即可。
补充:
1. C1和C2一般选一样的电容,如果深究的话,C1接XIN,C2接XOUT, C1的大小影响晶体波形的畸变形状,C2影响晶体波形的幅度。
2. 不要以为示波器量得的波形就是正确的,因为示波器的探头对地有电容,所以有时候接上示波器波形很好,但工作照样不正常。实际用示波器测试波形时需要更换小一点的负载电容。
3. 晶体的布线也很重要,具体参见晶体的布线原则。
相信这些知识足够一个单片机工程师开发大多数产品了。:-)