前言

上节是做了dsPIC的准备工作,熟悉了开发环境与一些基本配置位的操作,项目种选用dsPIC芯片目的还是用来做电机控制的,对于电机控制来说,PWM,ADC,定时器是非常重要的功能,本节就开始介绍dsPIC的时钟配置,并使用定时器来验证。

首先,接入电路中的外部晶振是8M晶振,因此根据手册,可以选择主振荡器Posc:

根据上表,选择带PLL的主振荡器,由于使用的是XT晶振,因此使用XT模式,之后,修改配置位:

生成代码为:

// FOSC
#pragma config POSCMD = XT              // 主振荡器模式选择位(XT晶体振荡器模式)
#pragma config OSCIOFNC = OFF           // OSC2 Pin Function bit (OSC2 is clock output)
#pragma config IOL1WAY = ON             // Peripheral pin select configuration (Allow only one reconfiguration)
#pragma config FCKSM = CSDCMD           // Clock Switching Mode bits (Both Clock switching and Fail-safe Clock Monitor are disabled)
// FOSCSEL
#pragma config FNOSC = PRIPLL           // 振荡器源选择(带PLL<a class="decoration-color" href="https://buy.icxbk.com/index.php?ctl=Product&met=lists&category_id=1047" target="_blank">模块</a>的主振荡器(XT + PLL,HS + PLL,EC + PLL))
#pragma config PWMLOCK = ON            // PWM Lock Enable bit (Certain PWM registers may only be written after key sequence)
#pragma config IESO = ON                // Two-speed Oscillator Start-up Enable bit (Start up device with FRC, then switch to user-selected oscillator source)

之后要做的便是时钟计算,根据我们的配置来计算出我们现在的各个频率是多少。dsPIC33 PLL框图如下:

公式中:
N1对应 CLKDIV寄存器的PLLPRE位
N2对应 PLLFBD寄存器的PLLDIV位
M对应 CLKDIV的PLLPOST位

此时我们需要将Fosc锁定在120M,此时系统的工作频率即为60M,由于晶振使用的是8M晶振,因此,取N1 = 2,N2 = 2,M = 60

按照手册的说明:系统的工作频率为Fosc频率的一半。
代码如下:

//产生Fosc = 120MHz
CLKDIVbits.PLLPRE = 0;          //N1 = 2
PLLFBDbits.PLLDIV = 58;         //M = 60
CLKDIVbits.PLLPOST = 0;         //N2 = 2    8 * (60 / (2 + 2)) = 120M
while (OSCCONbits.COSC!= 0b011)
while (OSCCONbits.LOCK!= 1) {};//PLL 处于锁定状态

配置完成,那么接下来就是验证我们配置的60M频率对不对,就使用一个定时器来验证好了。

关于dsPIC33的定时器,是把他们分成了三类,ABC三类定时器,如果要使用32位定时器,可以使用B类与C类定时器组合构成23位定时器,此时B类定时器控制寄存器中的T32控制位(TxCON<3>)必须置1,对于32位的工作,C类定时器保存最高有效字(即高16位),而B类定时器保存最低有效字(即低16位)。具体的32位定时器的使用,手册中直接给出了例子,因此就不再赘述。现在使用一个普通定时器来验证时钟就好,我选用的是timer3,C类定时器。

现在使用timer3来构造一个4ms的定时器,然后在中断里翻转一个IO口的电平状态来验证。

定时时间为4ms,因此设置分频率为1:8
T3CONbits.TCKPS = 0x01;//输入时钟预分频比1:8

周期寄存器的值为30000,(主频为60M)
PR3 = 30000;

注意:timer3定时器的优先级寄存器为 IPC2 timer1的优先级寄存器为 IPC0

程序如下:

void Tim3_Init()
{T3CONbits.TON = 0;//禁止16位Timer3T3CONbits.TCS = 0;//内部时钟Fosc/2  60MT3CONbits.TGATE = 0;//门控时间累加位 禁止T3CONbits.TCKPS = 0x01;//输入时钟预分频比1:8TMR3 = 0; //初始值  相当于CNTPR3 = 30000;         //由于是8分频,也就是7.5M频率  因此取30000为定时4msIPC2bits.T3IP = 0x03; // 优先级1  定时器3的中断优先级为 IPC2   定时器1为IPC0IFS0bits.T3IF = 0; // Timer3中断标志状态位 清零IEC0bits.T3IE = 1; // Timer3中断允许位 允许T3CONbits.TON = 1; //启动使能16位Timer3
}
void __attribute__((__interrupt__, no_auto_psv)) _T3Interrupt(void)
{static uint8_t led_flag = 0;IFS0bits.T3IF = 0; //清楚中断标志led_flag = 1 - led_flag;if (led_flag == 0){PORTAbits.RA4 = 0;}else{PORTAbits.RA4 = 1;}
}

实验结果:

时钟正确。

【dsPIC33】振荡器与定时器相关推荐

  1. Hans R. Camenzind发明555定时器的故事

      在电子领域中, 555 定时器集成芯片 是著名集成芯片之一.然而很多人并不知道它是如何被发明的?下面是发表在网站 Circuit Today上的一篇文章 ,带你重温从555被发明开始直到当今的发展 ...

  2. 4. 定时器(TIM)(定时器计数)

    1.TIM简介 •TIM(Timer)定时器 •定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断 •16位计数器.预分频器.自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大5 ...

  3. 基于555时基集成芯片压控振荡器

    简 介: 对于555振荡器压控端(PIN5)对于输出信号的占空比 以及频率进行分析和实际测试e.bjdj.gov.cn发现在PIN5电压比较低的时候,会出现频率与理论上计算不同.使用超声波接受传感器以 ...

  4. 三大电机控制方案之DSP篇(1):TMS320F28335

    三大电机控制方案之DSP篇(1):TMS320F28335 简介: TMS320F28335数字信号处理器是属于C2000系列的一款浮点DSP控制器.与以往的定点DSP相比,该器件的精度高,成本低, ...

  5. 脉冲波形的变换与产生

    单稳态触发器 1.没有触发脉冲作用时电路处于一种稳定状态 2.在触发脉冲作用下,电路由稳态翻转到暂稳态.暂稳态是一种不能长久保持的状态. 3.由于电路中RC延时环节的作用,电路的暂稳态在维持一段时间后 ...

  6. MICROCHIP的PIC16F1519-I/PT中英文简略规格书

    PIC16(L)F1516/7/8/9通用,带有XLP技术的28/40/44针Flash微控制器 本数据表中包含的设备 •pic16f1516 •pic16f1517 pic16f1518 pic16 ...

  7. YX150C 纯IO口 8位OTP单片机

    YX150C是一种低成本.高速.高抗干扰.基于OTP的8位CMOS微控制器. 它采用了只有42条指令的RISC架构.除程序分支需要两个周期外,所有指令都是单周期的.易于使用和易于记忆的指令集大大减少了 ...

  8. PIC以太网开发板——基于微芯最新ENC28J60以太网控制器

    PIC以太网开发板--基于微芯最新ENC28J60以太网控制器                       PIC以太网开发板--基于微芯最新ENC28J60以太网控制器 导航栏 ENC28J60芯片 ...

  9. 【转载】电荷泵电路分析

    1.电荷泵电路 [每日电路赏析]实现电压升高的电荷泵电路 ` 假设你拥有一个3.3伏的低电压源,而你需要一个5V的电压源.如果电路中有电池的话就比较麻烦.最明显的方法当然是使用开关模式转换器,比如升压 ...

  10. 常用电子元器件简介(转)

    来源-作者@MyScala &https://blog.csdn.net/j_kkk/article/details/5262171 建议读者阅读原文,确保获得完整的信息. 一.电阻器 电阻器 ...

最新文章

  1. VS编译时output/Error list窗口自动弹出设置
  2. python中pos()_python中不带NLTK的POS标记器
  3. 列运算_Power Query列运算的几种方法比较
  4. 开关量光端机指示灯说明及常见故障问题处理方法
  5. 小米键盘 键盘切换_“年轻人的第一把机械键盘”,小米机械键盘到底值不值...
  6. sqlserver 没有维护计划_制定数据库备份计划,不再为数据丢失闹心!
  7. 最大似然估计的缺陷 —— 方差和均值的 bias
  8. ASP.NET 3.5控件和组件开发技术之客户端回发/回调揭密
  9. Struts2_day03--向值栈放数据
  10. 娟红静敏,从女孩子名中可以看出什么
  11. CSS YUI reset
  12. 用c语言编写超级马里奥_编写《超级马里奥兄弟》游戏以学习游戏开发
  13. 游戏开发——Gris日志 day01
  14. 在计算机网络中集线器的作用是,集线器有什么用 集线器的作用介绍
  15. 英语基本句型及一般时态
  16. EXCEL取小数点数值
  17. PL/SQL将电话号码前三位用括号括起来(以XXX-XXX-XXXX为例)
  18. 跨境电商货源采购平台有哪些?
  19. matlab 热图,基于表格数据创建热图
  20. 阅文集团的盛世危机才刚刚开始

热门文章

  1. c++ Beep函数的雪之梦
  2. “概率模型与计算机视觉” 林达华
  3. 数据分析入门系列教程-SVM实战
  4. Android 9 系统修改内设WLAN热点名称
  5. 通过rgb值判断颜色深浅
  6. Php 类似coffeescript,有什么东西像CoffeeScript for PHP吗?
  7. ceph存储 FC HBA、iSCSI HBA、以太网卡3者区别
  8. 软件测试输入准则,单元测试准则
  9. lua脚本PHP加密网站源码,【几维安全】lua脚本加密,lua代码加密使用说明
  10. 系统安装-U盘安装Windows XP SP3纯净版简述